结构体数据类型与链表

上传人:沈*** 文档编号:172676450 上传时间:2022-12-05 格式:PPT 页数:45 大小:274.02KB
收藏 版权申诉 举报 下载
结构体数据类型与链表_第1页
第1页 / 共45页
结构体数据类型与链表_第2页
第2页 / 共45页
结构体数据类型与链表_第3页
第3页 / 共45页
资源描述:

《结构体数据类型与链表》由会员分享,可在线阅读,更多相关《结构体数据类型与链表(45页珍藏版)》请在装配图网上搜索。

1、第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程12022/12/5第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程22022/12/59.1 9.1 结构体类型的定义结构体类型的定义1.结构体类型的定义结构体类型的定义 struct 结构体名 类型标识符1 成员名1;类型标识符2 成员名2;类型标识符n 成员名n;;struct 结构体名结构体名 结构体类型名结构体类型名 结构体是由结构体是由C语言中的基本数据类型构成的、并用一个标识符语言中的基本数据类型构成的、并用一个标识符来命名的各种变量的组合来命名的各种变量的组合,其中可以使用不同的

2、数据类型。其中可以使用不同的数据类型。第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程32022/12/52、关于结构体类型的说明:、关于结构体类型的说明:“struct 结构体名结构体名”是一个类型名,它和是一个类型名,它和int、float等作用一样可以用来定义变量。等作用一样可以用来定义变量。结构体名结构体名是结构体的标识符不是变量名,也不是类是结构体的标识符不是变量名,也不是类型名。型名。构成结构体的每一个类型变量称为构成结构体的每一个类型变量称为结构体成员结构体成员,它它象数组的元素一样象数组的元素一样,但数组中元素以下标来访问的但数组中元素以下标来访问的,

3、而结而结构体是按结构体变量名来访问成员的。构体是按结构体变量名来访问成员的。结构体中的各成员既可以属于不同的类型,也可以结构体中的各成员既可以属于不同的类型,也可以属于相同的类型,而数组中的元素是属于同一类型的。属于相同的类型,而数组中的元素是属于同一类型的。成员也可以是一个结构体类型成员也可以是一个结构体类型,如:,如:第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程42022/12/5structstruct date date intint month;month;intint day;day;intint year;year;struct personfloa

4、t num;char name20;char sex;int age;struct date birthday;char address10;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程52022/12/59.2 9.2 结构体类型变量结构体类型变量9.2.1 9.2.1 结构体类型变量的定义结构体类型变量的定义1.1.先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量 形式:形式:struct 结构体名结构体名 类型标识符类型标识符 1 成员名成员名1;类型标识符类型标识符2 成员名成员名2;类型标识符类型标识符n 成员名成员名n;struct

5、 结构体名结构体名 变量名表变量名表;例如:例如:structstruct student student char name20;char name20;char char sex;sex;int int age;age;float float score;score;;struct student struct student stu1,stu2;stu1,stu2;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程62022/12/52.2.在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量形式:形式:struct struct 结构体名结构体名 类型标

6、识符类型标识符 1 1 成员名成员名1 1;类型标识符类型标识符2 2 成员名成员名2 2;类型标识符类型标识符n n 成员名成员名n n;变量名表变量名表;例如:例如:structstruct student student char name20;char name20;char sex;char sex;int int age;age;float score;float score;stu1,stu2;stu1,stu2;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程72022/12/5 3.用匿名形式直接定义结构体类型变量用匿名形式直接定义结构体类型变量形式

7、:形式:struct struct 结构体名结构体名 类型标识符类型标识符 1 1 成员名成员名1 1;类型标识符类型标识符2 2 成员名成员名2 2;类型标识符类型标识符n n 成员名成员名n n;变量名表变量名表;例如:例如:structstruct char name20;char name20;char sex;char sex;int int age;age;float score;float score;stu1,stu2;stu1,stu2;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程82022/12/59.2.2 9.2.2 结构体变量的使用结构体

8、变量的使用 结构体是一种新的数据类型结构体是一种新的数据类型,因此结构体变量也可因此结构体变量也可以象其它类型的变量一样赋值、运算以象其它类型的变量一样赋值、运算,不同的是不同的是结构结构体变量以成员作为基本变量。体变量以成员作为基本变量。结构体成员的表示方式为结构体成员的表示方式为:结构体变量名结构体变量名.成员名成员名 其中的圆点运算符称为其中的圆点运算符称为成员运算符成员运算符,它的运算级,它的运算级别最高。别最高。如果将如果将 结构体变量名结构体变量名.成员名成员名 看成一个整体看成一个整体,则则这个整体的数据类型与结构体中该成员的数据类型相这个整体的数据类型与结构体中该成员的数据类型

9、相同同,这样就可象前面所讲的变量那样使用这样就可象前面所讲的变量那样使用,但应遵循但应遵循以下规则:以下规则:第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程92022/12/5 (1)不能将一个结构体变量作为一个整体进行输入和不能将一个结构体变量作为一个整体进行输入和输出输出,而只能对结构体变量中的各个成员分别进行输入而只能对结构体变量中的各个成员分别进行输入和输出和输出。structstruct date date intint month;month;intint day;day;intint year;year;day;day;scanf(“%d%d%d”,d

10、ayscanf(“%d%d%d”,day););(错误错误)scanf(“%d%d%d”,&day.yearscanf(“%d%d%d”,&day.year,&day.month,&day.day);,&day.month,&day.day);(正确正确)printf(“%d%d%dprintf(“%d%d%d”,day);”,day);(错误错误)printf(“%d%d%d”,day.year,day.month,day.day);(正确正确)第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程102022/12/5(2)如果成员本身又属一个结构体类型如果成员本身又属

11、一个结构体类型,则要用若干个则要用若干个成员运算符(成员运算符(.),一级一级地找到最底的一级的成员一级一级地找到最底的一级的成员,只能对最底级的成员进行赋值或存取运算只能对最底级的成员进行赋值或存取运算.structstruct date date intint month;month;intint day;day;intint year;year;struct struct student student long num;long num;char name20;char name20;char sex;char sex;intint age;age;structstruct date

12、birthday;date birthday;char depart10;char depart10;stu1;stu1;如:如:stu1.birthday.year=2004;stu1.birthday.year=2004;stu1.birthday.month=12 stu1.birthday.month=12;(3)(3)对结构体变量的成员可以像同类型普通变量一样对结构体变量的成员可以像同类型普通变量一样进行各种运算进行各种运算。第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程112022/12/59.2.3 结构体变量的初始化与存储 1.1.结构体变量的初始化

13、:在定义结构体变量的同时结构体变量的初始化:在定义结构体变量的同时 给它赋以初值。给它赋以初值。struct student char name20;char sex;int age;float score;stu1,stu2=“Wangwu”,m,20,88.5;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程122022/12/5stu110001020102110231027name20sexagescore2.2.结构体变量存储分配示意图结构体变量存储分配示意图第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程132022/12/59.

14、3 9.3 结构体数组结构体数组9.3.1 结构体数组的定义 结构体是一种新的数据类型结构体是一种新的数据类型,同样可以有结构体数组。同样可以有结构体数组。1、结构体数组的定义、结构体数组的定义 结构体数组就是具有相同结构体类型的变量集合。结构体数组就是具有相同结构体类型的变量集合。假如要定义一个班级假如要定义一个班级105105个同学的学号、姓名、性别、年个同学的学号、姓名、性别、年龄龄,可以定义成一个结构体数组。如下所示可以定义成一个结构体数组。如下所示:struct struct long num;char name20;char sex;int age;stu105;第第9 9章章 结

15、构体数据类型与链表结构体数据类型与链表C语言程序设计教程142022/12/5struct student long num;char name20;char sex;int age;float score;char add5;stu3=101,”WGJ”,M,28,88.5,”CS”,102,”DYH”,F,26,88.0,”CS”,103,”DYC”,M,24,78.5,”CS”;9.3.2 结构体数组变量的初始化一般形式是在定义的数组后面加上 =初值表列;数组各元素在内存中连续存放数组各元素在内存中连续存放 num name sex age score addstu0 101 WGJ M

16、 28 88.5 CSstu1 102 DYH F 26 88.0 CSstu2 103 DYC M 24 78.5 CS101”WGJ”M2888.5”CS”102”DYH”F2688.0”CS”103”DYC”M2478.5”CS”stu0stu1stu2 结构体数组成员的访问是以结构体数组成员的访问是以数组元素为结构体变量数组元素为结构体变量的的,其其形式为形式为:结构体数组元素名结构体数组元素名.成员名成员名 如:如:stu2.agestu2.age 结构体数组的成员也可以是数组。结构体数组的成员也可以是数组。struct student long num;char name20;ch

17、ar sex;int age;float score3;char add5;stu5;9.3.3 结构体数组的使用例9.1 候选人得票的统计。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程172022/12/5structstruct person person char name20;char name20;int int count;count;leader3=Zhang,0,Li,0,Wang,0;leader3=Zhang,0,Li,0,Wang,0;main()main()int i

18、nt i,j;i,j;char leader_name20;char leader_name20;for(i=1;i=10;i+)for(i=1;i=10;i+)scanf(%s,leader_name scanf(%s,leader_name););for(j=0;j3;j+)for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name if(strcmp(leader_name,leaderj.name)=0)=0)leaderj.count+;leaderj.count+;printf(n printf(n););for(i=0;i3;i+)for(i

19、=0;i-成员名成员名-为指向运算符为指向运算符如:上面示例用指针变量引用其成员的方式为:如:上面示例用指针变量引用其成员的方式为:(*pstu).num ,(pstu).num ,(*pstu).namepstu).name(*pstupstu).sex).sex ,(,(*pstupstu).score).score可以等价表示为:可以等价表示为:pstu-num,pstu-num,pstu pstu-name-name,pstu-sex,pstu-scorepstu-sex,pstu-scorestruct student struct student *pstu,stu;pstu,st

20、u;pstu=&stu;pstu=&stu;/*不要认为结构体变量名代表起始地址不要认为结构体变量名代表起始地址*/第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程202022/12/5例例9.2 比较结构体成员的几种引用方式比较结构体成员的几种引用方式#include string.h#include string.hmain()main()struct struct student student long int long int num;num;char name20;char name20;char sex;char sex;float score;floa

21、t score;struct struct student stu_1;student stu_1;structstruct student student*p;p;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程212022/12/5 p=&stu_1;p=&stu_1;stu_1.num=200601 stu_1.num=200601;strcpy(stu_1.name,Li Ping);strcpy(stu_1.name,Li Ping);stu_1.sex=M;stu_1.sex=M;stu_1.score=89.5;stu_1.score=89.5;prin

22、tf(No.:%ldnname:%snsex:%cnscore:%fn printf(No.:%ldnname:%snsex:%cnscore:%fn,stu_1.num,stu_1.name,stu_1.sex,stu_1.score);stu_1.num,stu_1.name,stu_1.sex,stu_1.score);printf(nNo.:%ldnname:%snsex:%cnscore:%fn printf(nNo.:%ldnname:%snsex:%cnscore:%fn,(*p).num,(p).num,(*p).name,(p).name,(*p).sex,(p).sex,(

23、*p).score);p).score);printf(nNo.:%ldnname:%snsex:%cnscore:%fn printf(nNo.:%ldnname:%snsex:%cnscore:%fn,p-num,p-name,p-sex,p-scorep-num,p-name,p-sex,p-score););第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程222022/12/59.4.2 指向结构体数组元素的指针 一个指针变量可以指向一个结构体数组元素一个指针变量可以指向一个结构体数组元素(将该结将该结构体数组的数组元素地址赋给此指针变量构体数组的数组元素地址

24、赋给此指针变量)。例如:。例如:struct int a;float b;arr3,*p;p=arr;此时使此时使p指向指向arr数组的第一个元素,数组的第一个元素,“p=arr;”等价于等价于“p=&arr0;”。若执行。若执行“p+;”则此时指针变量则此时指针变量p此时指此时指向向arr1。第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程232022/12/5例例9.3 9.3 输出数组中各元输出数组中各元素中各成员的值。素中各成员的值。structstruct student student int int num;num;char name20;char na

25、me20;char sex;char sex;int int age;age;struct struct student stu3=student stu3=10101,Zhang,M,18,10101,Zhang,M,18,10102,Li,M,19,10102,Li,M,19,10103,Wang,F,2010103,Wang,F,20;main()main()structstruct student student*p;p;printf printf(No.Name sex agen);(No.Name sex agen);for(p=stu;p for(p=stu;pstu+3;p+)

26、num,p-name,p-sex,p-num,p-name,p-sex,p-p-age);age);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程242022/12/5指针移动示意图:stu0stu1stu2PPP”20FWang1010319MLi 1010218MZhang10101第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程252022/12/5注意:注意:如果如果p p的初值为的初值为stustu,即指向第一个元素,即指向第一个元素,则则p+1p+1后指向下一个元素。请区别:后指向下一个元素。请区别:(+p)-num(+p)-n

27、um 和和 (p+)-num(p+)-num 指针指针p p已定义为指向已定义为指向structstruct student student类型的数据,类型的数据,它只能指向该结构体类型数据,而不能指向一元素它只能指向该结构体类型数据,而不能指向一元素的某一成员(的某一成员(即即p p的地址不能是成员的地址)。如下的地址不能是成员的地址)。如下面的赋值是错误的:面的赋值是错误的:p=&p=&stu.numstu.num编译时将给出编译时将给出“警告警告”信息,表示地信息,表示地址的类型不匹配。不要认为反正址的类型不匹配。不要认为反正p p是存放地址的,可是存放地址的,可以将任何地址赋给它。以将

28、任何地址赋给它。2020FFWangWang10103101031919MMLi Li 10102101021818MM ZhangZhang1010110101第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程262022/12/5 将一个结构体变量的值传递给另一个函数,可以采用以下将一个结构体变量的值传递给另一个函数,可以采用以下两种方式:两种方式:v 用结构体变量的成员作参数。用法和普通变量作实参是一样用结构体变量的成员作参数。用法和普通变量作实参是一样的,属的,属“值传递值传递”方式。方式。v形参与实参都用结构体变量形参与实参都用结构体变量 直接将实参结构体变量

29、的各个成员的值全部传递给形参直接将实参结构体变量的各个成员的值全部传递给形参的结构体变量。注意:实参和形参类型应当完全一致。的结构体变量。注意:实参和形参类型应当完全一致。9.5.1 9.5.1 结构体变量作函数参数结构体变量作函数参数9.5 9.5 结构体与函数结构体与函数第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程272022/12/5structstruct stud stud int int num;num;char name20;char name20;int int score3;score3;main()main()void print(struct

30、 void print(struct stud p);stud p);struct stud stu struct stud stu;int int j;j;scanf(“%d”,&stu.num scanf(“%d”,&stu.num););scanf(“%s”,stu.name scanf(“%s”,stu.name););for(j=0;j3;j+)for(j=0;j3;j+)scanf(“%d”,&stu.scorej scanf(“%d”,&stu.scorej););print(stu print(stu););例例9.4 9.4 有一个结构有一个结构体变量体变量stustu,内含

31、学,内含学生学号、姓名和三生学号、姓名和三门课的成绩。要求门课的成绩。要求在在mainmain函数中赋值,函数中赋值,在另一函数在另一函数printprint中中将它们打印输出,将它们打印输出,程序如下。程序如下。第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程282022/12/5 值得指出的是,把一个完整的结构体变量作为参数传递,值得指出的是,把一个完整的结构体变量作为参数传递,虽然合法,但要将全部成员值一个一个传递,既费时间又虽然合法,但要将全部成员值一个一个传递,既费时间又费空间,开销大,因此一般不采用。费空间,开销大,因此一般不采用。注意:注意:ANSI C

32、ANSI C允许用整个结构体作为函数的参数传递,但允许用整个结构体作为函数的参数传递,但是必须保证实参与形参的类型相同。是必须保证实参与形参的类型相同。void print(structvoid print(struct stud p)stud p)intint j;j;printf(%dn%snprintf(%dn%sn”,”,p.p.num,num,p.p.namename,);,);for(j=0;j3;j+)for(j=0;j3;j+)printf(“%dn”,&stu.scorej printf(“%dn”,&stu.scorej););第第9 9章章 结构体数据类型与链表结构体数据

33、类型与链表C语言程序设计教程292022/12/5 用指向结构体变量(或数组)的指针作实参,用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的起始地址传给形参。将结构体变量(或数组)的起始地址传给形参。形参为指针变量,实参为结构体变量的地址或指形参为指针变量,实参为结构体变量的地址或指向结构体变量的指针。向结构体变量的指针。9.5.2 9.5.2 用指向结构体的指针作函数参数用指向结构体的指针作函数参数例例9.4 9.4 的的printprint函数形参改用指向结构体的指针后函数形参改用指向结构体的指针后程序如下程序如下:第第9 9章章 结构体数据类型与链表结构体数据类型与链表C

34、语言程序设计教程302022/12/5#include string.hstruct student int num;char name20;int score3;main()void print(struct student*p);struct student stu;int int j;j;scanf(“%d”,&stu.num scanf(“%d”,&stu.num););strcpy(stu.name,Li strcpy(stu.name,Li Ping);Ping);for(j=0;j3;j+)for(j=0;jp-num,num,p-p-name,);name,);for(j=0;

35、j3;j+)for(j=0;jscorej);-scorej);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程312022/12/59.5.3 返回结构体类型值的函数 ANSI CANSI C还允许函数返回结构体类型的值。设有还允许函数返回结构体类型的值。设有 structstruct student student 类型,结构体变量定义如下:类型,结构体变量定义如下:structstruct student stud;student stud;若函数若函数input()input()的功能是输入一个学生结构体数的功能是输入一个学生结构体数据,并将其返回给学生记录据

36、,并将其返回给学生记录stud,stud,即:即:#include stdio.h#include stdio.h structstruct student student int int num;num;char name10;char name10;int int score3;score3;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程322022/12/5structstruct student input()student input()intint k;k;structstruct student stud;student stud;scanf(%d,&

37、stud.numscanf(%d,&stud.num););getchargetchar();();gets(stud.name);gets(stud.name);for(k=0;k3;k+)for(k=0;k3;k+)scanf scanf(%d,&stud.scorek(%d,&stud.scorek););return stud;return stud;main()main()struct struct student stud;student stud;int int k;k;stud=input();stud=input();printf(%d%s printf(%d%s,stud.

38、num,stud.name);stud.num,stud.name);for(k=0;k3;k+)for(k=0;knum,p-name);-num,p-name);p=p-next;p=p-next;while(p!=NULL);while(p!=NULL);本例所有结点都是在程序中定义的,不是临时开辟的本例所有结点都是在程序中定义的,不是临时开辟的 第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程352022/12/5 链表结构是动态分配存储的链表结构是动态分配存储的,即在需要时才开辟一个结即在需要时才开辟一个结点的存储单元点的存储单元,怎样开辟呢怎样开辟呢?C语

39、言编译系统中提供了以下有语言编译系统中提供了以下有关的函数关的函数:1、分配存储空间函数分配存储空间函数malloc()malloc()函数的原型为:函数的原型为:void *malloc(unsigned int size);函数的作用是在内存自由空间开辟一块大小为函数的作用是在内存自由空间开辟一块大小为 size 字节的字节的空间,并将此存储空间的起始地址作为函数值带回。空间,并将此存储空间的起始地址作为函数值带回。例如,例如,malloc(10)的结果是分配了一个长度为的结果是分配了一个长度为10字节的字节的内存空间,若系统设定的此内存空间的起始地址为内存空间,若系统设定的此内存空间的起

40、始地址为1800,则,则 malloc(10)的函数返回值就为的函数返回值就为1800。9.6.2 9.6.2、内存管理库函数、内存管理库函数第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程362022/12/5例例9.6 malloc函数的使用函数的使用main()main()intint j,n,j,n,*p;p;printf(npleaseprintf(nplease input a data to n:);input a data to n:);scanf(%d,&nscanf(%d,&n););p=(int p=(int*)malloc(n)malloc(n

41、*sizeof(intsizeof(int););printf(nplease input%d datas:,nprintf(nplease input%d datas:,n););for(j=0;jn;j+)for(j=0;jn;j+)scanf(%d,p+j scanf(%d,p+j););for(j=0;jn;j+)for(j=0;jnext=NULL;head-next=NULL;printf(nplease input datds printf(nplease input datds to the list:);to the list:);scanf(%ld,&x scanf(%ld

42、,&x););while(x!=0)while(x!=0)p=(struct student p=(struct student*)malloc)malloc (sizeof(struct (sizeof(struct student);student);p-num=x;p-num=x;p-next=NULL;p-next=NULL;q-next=p;q-next=p;q=p;q=p;scanf(%ld,&x scanf(%ld,&x););return(head);return(head);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程412022/12/52 2

43、、输出链表、输出链表void print(structvoid print(struct student student*head)head)struct struct student student *p;p;p=head-next;p=head-next;printf(“nTHe printf(“nTHe list is:”);list is:”);if(p=NULL)if(p=NULL)printf(“the printf(“the list is NULL!n”);list is NULL!n”);while(p!=NULL)while(p!=NULL)printf(%6ld,p-nu

44、m);printf(%6ld,p-num);p=p-next;p=p-next;printf(“n printf(“n”);”);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程422022/12/53 3、删除链表中的一个结点、删除链表中的一个结点void del(structvoid del(struct student student*head)head)struct struct student student*p,p,*q;q;long num;long num;printf(npleaseprintf(nplease input the studentnu

45、m you want to delete:);input the studentnum you want to delete:);scanf(%ld,&num scanf(%ld,&num););p=head-next;p=head-next;while(num!=p-num&p-next!=NULL)while(num!=p-num&p-next!=NULL)q=p;p=p-next;q=p;p=p-next;if(num=p-num)if(num=p-num)q-next=p-next;free(p);q-next=p-next;free(p);else else printf(n%ld

46、printf(n%ld is not found!n,num);is not found!n,num);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程432022/12/54 4、在链表中插入一个结点、在链表中插入一个结点 void insert(structvoid insert(struct student student*head)head)struct struct student student*p,p,*q,q,*t;t;p=(struct student p=(struct student*)malloc)malloc (sizeof(struct (

47、sizeof(struct student);student);printf(nplease printf(nplease input the input the student you want to insert:);student you want to insert:);scanf(%ld,&p scanf(%ld,&p-num);-num);q=head;q=head;while(q-next!=NULL&q-next-numnum)while(q-next!=NULL&q-next-numnum)q=q-next;q=q-next;p-next=q-next;p-next=q-ne

48、xt;q-next=p;q-next=p;第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序设计教程442022/12/55、对链表的综合操作、对链表的综合操作void main()void main()structstruct student student*la;la;la=creatla=creat();();print(la);print(la);del(la);del(la);print(print(l la);a);insert(la);insert(la);print(print(l la);a);第第9 9章章 结构体数据类型与链表结构体数据类型与链表C语言程序

49、设计教程452022/12/59.6.3 链表与结构体数组的主要区别链表与结构体数组的主要区别 1 1、数组的元素个数是固定的,而组成链表的结、数组的元素个数是固定的,而组成链表的结点个数可按需要增减;点个数可按需要增减;2 2、数组中的元素顺序关系由元素在数组中的位、数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。所包含的指针来体现。3 3、对于不是固定长度的列表,用可能最大长度、对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。另外,对于的数组来描述,会浪费许多内存空间。另外,对于元素的插入、删除操作非常频繁的列表处理场合,元素的插入、删除操作非常频繁的列表处理场合,用数组表示列表也是不适宜的。若用链表实现,会用数组表示列表也是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。使程序结构清晰,处理的方法也较为简便。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!