学习C/C++语言:结构体,动态链表

//***************************************************************
//结构体:简单的静态链表
#include<stdio.h>
#include<string.h>
#define NULL 0
#define SIZE 10
struct student
{
	char num[SIZE];
	float score;
	struct student *next;
};
void main()
{
	struct student a,b,c,*head,*p;
	strcpy(a.num,"10101");a.score=89.5;
	strcpy(b.num,"10103");b.score=90;
	strcpy(c.num,"10107");c.score=85;
	head=&a;
	a.next=&b;
	b.next=&c;
	c.next=NULL;
	p=head;
	do
	{
		printf("%s %5.1f\n",p->num,p->score);
		p=p->next;
	}while(p!=NULL);
}
//***************************************************************
//结构体:动态链表
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
	long num;
	float score;
	struct student *next;
};
int n;
//
struct student *creat(void)
{
	struct student *head,*p1,*p2;
	n=0;
	p1=p2=(struct student *)malloc(LEN);
	printf("num,score\n");
	scanf("%ld,%f",&p1->num,&p1->score);
	head=NULL;
	while(p1->num!=0)
	{
		n=n+1;
		if(n==1)
			head=p1;
		else
			p2->next=p1;
		p2=p1;
		p1=(struct student *)malloc(LEN);
        printf("num,score\n");
	    scanf("%ld,%f",&p1->num,&p1->score);
	}
	p2->next=NULL;
	printf("head num %ld,score %5.1f\n",head->num,head->score);
	printf("***************************************\n");
	return head;
}
//
void print(struct student *head)
{
	struct student *p;
	printf("\nNow,these %d records are:\n",n);
	p=head;
	if(head!=NULL)
		do
		{
			printf("%ld %5.1f\n",p->num,p->score);
			p=p->next;
		}while(p!=NULL);
}
//
struct student *del(struct student *head,long num)
{
	struct student *p1,*p2;
	if(head==NULL)
	{
		printf("\nlist null! \n");
		return head;
	}
	p1=head;
	while(num!=p1->num&&p1->next!=NULL)
	{
		p2=p1;
        p1=p1->next;
	}
    if(num==p1->num)
	{
		if(p1==head)
			head=p1->next;
		else
			p2->next=p1->next;
		printf("delete:%ld\n",num);
		n=n-1;
	}
	else
		printf("%ld not found!\n",num);
	return head;
}
//
struct student *insert(struct student *head,struct student *stud)
{
	struct student *p0,*p1,*p2;
	p1=head;
	p0=stud;
    if(head==NULL)
	{
		head=p0;
		p0->next=NULL;
	}
	else
	{
		while(p0->num>p1->num&&p1->next!=NULL)
		{
			p2=p1;
			p1=p1->next;
		}
		if(p0->num<p1->num)
		{
			if(head==p1)
				head=p0;
			else
				p2->next=p0;
			p0->next=p1;
		}
		else
		{
			p1->next=p0;
			p0->next=NULL;
		}
	}
	n=n+1;
	return (head);
}
//
void main()
{
	struct student *head,stu;
	long del_num;
	printf("input records:\n");
	head=creat();
	print(head);
	printf("\ndelete number:\n");
	scanf("%ld",&del_num);
	while(del_num!=-1)
	{
		head=del(head,del_num);
		print(head);
		printf("\ndelete number:\n");
    	scanf("%ld",del_num);
	}
	printf("\ninput the inserted record:\n");
	//stu=(struct student *)malloc(LEN);
	scanf("%ld,%f",&stu.num,&stu.score);
	while(stu.num!=0)
	{
		head=insert(head,&stu);
		print(head);
        printf("\ninput the inserted record:\n");
	    //stu=(struct student *)malloc(LEN);
	    scanf("%ld,%f",&stu.num,&stu.score);
	}
}

学习C/C++语言:结构体,动态链表

时间: 2024-10-08 20:58:50

学习C/C++语言:结构体,动态链表的相关文章

c语言 结构体动态创建

1 #include<stdio.h> 2 #include<malloc.h> 3 struct Student 4 { 5 int num; 6 int total; 7 char name[20]; 8 float score[3]; 9 }; 10 11 int main() 12 { 13 int N,i,j; 14 printf("Please input N:"); 15 scanf("%d",&N); 16 struc

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+ 指针数组: 在一个数组中,如果它的元素全部都是指针类

c语言结构体链表

原文链接:http://zhina123.blog.163.com/blog/static/417895782012106036289/ 引用自身的结构体,一个结构体中有一个或多个成员的基类型就是本结构体类型时,说明这个结构体可以引用自己,所以称作引用自身的结构体. 例如下面的结构体: struct link{ char ch; struct link *p} a; p是一个可以指向struct link类型变量的指针成员,这样,a.p=&a就是合法的表达式.那么,这有什么意义呢? 这样的意义就

c语言结构体中动态数组的使用

[背景] c语言结构体中动态数组使得用户能够根据需要来申请空间,相比静态数组,更能有效利用存储空间. [正文] 1. 动态数组在结构体中间 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { int a; char buf[0]; // 或者char buf[]; int b; }Node; int main() { printf("%d\n", si

C语言结构体

一.结构体的定义 1.定义形式 struct 结构名 {成员列表:};       //定义为语句,分号不能丢 2.结构类型变量的声明 (1)声明形式1 struct student { int number; char name[10]; float score; }; struct student st1,st2,st3; (2)声明形式2 struct student { int number; char name[10]; float score; }st1,st2,st3; (3)结构

c 语言 结构体

结构体初学者都有点小怕其实思维清晰之后你会发现结构体是个非常好的东西,嘿嘿. 第一,结构体的定义和初始化.别被书上大量的描述吓到 1.怎么定义结构体了例子如下,我们以构建一个包含学生姓名,年龄,Email为例子 1 struct 2 { 3 char name; 4 int age; 5 char Email; 6 }person; 现在我们定义就已经完成了,当然这是我最喜欢的范式,你们也可以在书上找到自己喜欢的. 2.怎么初始化了?结构体一般初始化都是以结构体数组的形式来的所以我们只说这个 t

C语言 结构体指针赋值 incompatible types when assigning to type &#39;char[20]&#39; from type &#39;char *&#39;

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

漫谈C语言结构体struct、公用体union空间占用

先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; union union_data1{ short a;//本身占用2个字节 char b[13];//本身占用13个字节 int c ;//本身占用4个字节 }; struct struct_data{ int a ;//int本身占用4个字节,偏移量为0 char b ;//char本身占用1个字节,偏移量为

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语