结构体数据类型与链表

上传人:re****.1 文档编号:570140260 上传时间:2024-08-02 格式:PPT 页数:45 大小:238.50KB
返回 下载 相关 举报
结构体数据类型与链表_第1页
第1页 / 共45页
结构体数据类型与链表_第2页
第2页 / 共45页
结构体数据类型与链表_第3页
第3页 / 共45页
结构体数据类型与链表_第4页
第4页 / 共45页
结构体数据类型与链表_第5页
第5页 / 共45页
点击查看更多>>
资源描述

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

1、第第9 9章章 结构体数据类型与链表结构体数据类型与链表结构体数据类型与链表Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.1 9.1 结构体类型的定义结构体类型的定义1.结构体类型的定义结构体类型的定义struct 结构体名 类型标识符1 成员名1; 类型标识符2 成员名2; 类型标识符n 成员名n; ;struct结构体名结构体名结构体类型名结构体类型名 结构体是由结构体是由C语言中的基本数据类型构成的、并用一个标识符语

2、言中的基本数据类型构成的、并用一个标识符来命名的各种变量的组合来命名的各种变量的组合,其中可以使用不同的数据类型。其中可以使用不同的数据类型。2024/8/22C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表2、关于结构体类型的说明:、关于结构体类型的说明:“struct结构体名结构体名”是一个类型名,它和是一个类型名,它和int、float等作用一样可以用来定义变量。等作用一样可以用来定义变量。结构体名结构体名是结构体的标识符不是变量名,也不是类是结构体的标识符不是变量名,也不是类型名。型名。构成结构体的每一个类型变量称为构成结构体的每一个类型变量称为结构体成员结构

3、体成员,它它象数组的元素一样象数组的元素一样,但数组中元素以下标来访问的但数组中元素以下标来访问的,而结而结构体是按结构体变量名来访问成员的。构体是按结构体变量名来访问成员的。结构体中的各成员既可以属于不同的类型,也可以结构体中的各成员既可以属于不同的类型,也可以属于相同的类型,而数组中的元素是属于同一类型的。属于相同的类型,而数组中的元素是属于同一类型的。成员也可以是一个结构体类型成员也可以是一个结构体类型,如:,如:2024/8/23C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表struct datestruct date int month;int month

4、;int day;int day;int year;int year;structpersonfloatnum;charname20;charsex;intage;structdatebirthday;charaddress10;2024/8/24C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.2 9.2 结构体类型变量结构体类型变量9.2.1 9.2.1 结构体类型变量的定义结构体类型变量的定义1.1.先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量 形式:形式:struct结构体名结构体名类型标识符类型标识符1成员名成员名1;类型标识符类型

5、标识符2成员名成员名2;类型标识符类型标识符n成员名成员名n;struct结构体名结构体名变量名表变量名表;例如:例如:struct studentstruct student char name20; char name20; char sex; char sex; int age; int age; float score; float score; ;struct student struct student stu1,stu2;stu1,stu2;2024/8/25C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表2.2.在定义结构体类型的同时定义变量在定义结构

6、体类型的同时定义变量形式:形式:struct struct 结构体名结构体名 类型标识符类型标识符 1 1 成员成员名名1 1; 类型标识符类型标识符2 2 成员成员名名2 2; 类型标识符类型标识符n n 成员成员名名n n; 变量名表变量名表; ;例如:例如:struct studentstruct student char name20; char name20; char sex; char sex; int age; int age; float score; float score; stu1,stu2;stu1,stu2;2024/8/26C语言程序设计教程第第9 9章章 结构体

7、数据类型与链表结构体数据类型与链表 3.用匿名形式直接定义结构体类型变量用匿名形式直接定义结构体类型变量形式:形式:struct struct 结构体名结构体名 类型标识符类型标识符 1 1 成员成员名名1 1; 类型标识符类型标识符2 2 成员成员名名2 2; 类型标识符类型标识符n n 成员成员名名n n; 变量名表变量名表; ;例如:例如:struct struct char name20; char name20; char sex; char sex; int age; int age; float score; float score; stu1,stu2;stu1,stu2;20

8、24/8/27C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.2.2 9.2.2 结构体变量的使用结构体变量的使用 结结构构体体是是一一种种新新的的数数据据类类型型,因因此此结结构构体体变变量量也也可可以以象象其其它它类类型型的的变变量量一一样样赋赋值值、运运算算,不不同同的的是是结结构构体变量以成员作为基本变量。体变量以成员作为基本变量。结结构构体体成成员员的的表表示示方方式式为为:结结构构体体变变量量名名.成成员名员名其中的圆点运算符称为其中的圆点运算符称为成员运算符成员运算符,它的运算级,它的运算级别最高。别最高。 如果将如果将 结构体变量名结构体变量名.

9、.成员名成员名 看成一个整体看成一个整体, ,则则这个整体的数据类型与结构体中该成员的数据类型相这个整体的数据类型与结构体中该成员的数据类型相同同, , 这样就可象前面所讲的变量那样使用这样就可象前面所讲的变量那样使用, ,但应遵循但应遵循以下规则:以下规则:2024/8/28C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表 (1)不能将一个结构体变量作为一个整体进行输入不能将一个结构体变量作为一个整体进行输入和输出和输出,而只能对结构体变量中的各个成员分别进行而只能对结构体变量中的各个成员分别进行输入和输出输入和输出。struct datestruct date i

10、nt month;int month;int day;int day;int year;int year;day;day;scanf(scanf(“%d%d%d%d%d%d”,day); ,day); ( (错误) )scanf(scanf(“%d%d%d%d%d%d”,&day.year, &day.month, &day.day);,&day.year, &day.month, &day.day);( (正确正确) )printf(printf(“%d%d%d%d%d%d”, day); , day); ( (错误) )printf(“%d%d%d”,day.year,day.month,

11、day.day);(正确正确)2024/8/29C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表(2)如果成员本身又属一个结构体类型如果成员本身又属一个结构体类型,则要用若干个则要用若干个成员运算符(成员运算符(.),一级一级地找到最底的一级的成一级一级地找到最底的一级的成员员,只能对最底级的成员进行赋值或存取运算只能对最底级的成员进行赋值或存取运算. struct datestruct date int month;int month;int day;int day;int year;int year; struct studentstruct student lo

12、ng num;long num;char name20;char name20;char sex;char sex;int age;int age;struct date birthday;struct 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)对结构体构体变量的成量的成员可以像同可以像同类型普通型普通变量一量一样进行各种运

13、算行各种运算。2024/8/210C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.2.3 结构体变量的初始化与存储1.1.结构体变量的初始化:在定义结构体变量的同时结构体变量的初始化:在定义结构体变量的同时 给它赋以初值。给它赋以初值。structstudentcharname20;charsex;intage;floatscore;stu1,stu2=“Wangwu”,m,20,88.5;2024/8/211C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表stu110001020102110231027name20sexagescore

14、2.2.结构体变量存储分配示意图结构体变量存储分配示意图2024/8/212C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.3 9.3 结构体数组结构体数组9.3.1 结构体数组的定义 结构体是一种新的数据类型结构体是一种新的数据类型,同样可以有结构体数组。同样可以有结构体数组。1、结构体数组的定义、结构体数组的定义结构体数组就是具有相同结构体类型的变量集合。结构体数组就是具有相同结构体类型的变量集合。 假如要定义一个班级假如要定义一个班级105105个同学的学号、姓名、性别、年个同学的学号、姓名、性别、年龄龄, , 可以定义成一个结构体数组。如下所示可以定义成一

15、个结构体数组。如下所示: : struct struct longnum;charname20;charsex;intage;stu105;2024/8/213C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表structstudentlongnum;charname20;charsex;intage;floatscore;charadd5;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 结构体数组变量的初始化一般形式是在定义的数组后面加上=初值表

16、列;2024/8/214C语言程序设计教程数组各元素在内存中连续存放数组各元素在内存中连续存放numnamesexagescoreaddstu0101WGJM2888.5CSstu1102DYHF2688.0CSstu2103DYCM2478.5CS101”WGJ”M2888.5”CS”102”DYH”F2688.0”CS”103”DYC”M2478.5”CS”stu0stu1stu22024/8/215C语言程序设计教程结构体数组成员的访问是以结构体数组成员的访问是以数组元素为结构体变量数组元素为结构体变量的的, , 其其形式为形式为: :结构体数组元素名结构体数组元素名.成员名成员名 如:

17、如:stu2.agestu2.age 结构体数组的成员也可以是数组。结构体数组的成员也可以是数组。 structstudentlongnum;charname20;charsex;intage;floatscore3;charadd5;stu5;9.3.3结构体数组的使用例9.1候选人得票的统计。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。2024/8/216C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表struct personstruct person char name20; char name20; int count; int

18、 count; leader3=Zhang,0,Li,0,Wang,0; leader3=Zhang,0,Li,0,Wang,0;main()main() int i,j; int 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)=0) if (strcmp

19、(leader_name,leaderj.name)=0) leaderj.count+; leaderj.count+; printf(n); printf(n); for (i=0;i3;i+) for (i=0;i-成员名成员名-为指向运算符为指向运算符如:上面示例用指针变量引用其成员的方式为:如:上面示例用指针变量引用其成员的方式为: (*pstu).num ,(*pstu).name*pstu).num ,(*pstu).name (*pstu).sex *pstu).sex ,(*pstu).score,(*pstu).score可以等价表示为:可以等价表示为: pstu-num,

20、 pstu-namepstu-num, pstu-name,pstu-sex, pstu-scorepstu-sex, pstu-scorestruct student *pstu, stu; struct student *pstu, stu; pstu=&stu; pstu=&stu; /*/*不要认为结构体变量名代表起始地址不要认为结构体变量名代表起始地址*/*/2024/8/219C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表例例9.2比较结构体成员的几种引用方式比较结构体成员的几种引用方式#include string.h#include string.h

21、main()main() struct student struct student long int long int num;num; char char name20;name20; char sex; char sex; float float score;score; ; ; struct student stu_1; struct student stu_1; struct student *p;struct student *p;2024/8/220C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表p=&stu_1; p=&stu_1; stu_1.num

22、=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; printf(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.se

23、x,stu_1.score); printf(nNo.:%ldnname:%snsex:%cnscore:%fn, printf(nNo.:%ldnname:%snsex:%cnscore:%fn, (*p).num,(*p).name,(*p).sex,(*p).score);(*p).num,(*p).name,(*p).sex,(*p).score); printf(nNo.:%ldnname:%snsex:%cnscore:%fn, printf(nNo.:%ldnname:%snsex:%cnscore:%fn, p-num,p-name,p-sex,p-score);p-num,p

24、-name,p-sex,p-score); 2024/8/221C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表9.4.2 指向结构体数组元素的指针一一个个指指针针变变量量可可以以指指向向一一个个结结构构体体数数组组元元素素(将将该该结结构体数组的数组元素地址赋给此指针变量构体数组的数组元素地址赋给此指针变量)。例如:。例如:structinta;floatb;arr3,*p;p=arr;此此时时使使p指指向向arr数数组组的的第第一一个个元元素素,“p=arr;”等等价价于于“p=&arr0;”。若若执执行行“p+;”则则此此时时指指针针变变量量p此此时指向时指向a

25、rr1。2024/8/222C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表例例9.3 9.3 输出数组中各元输出数组中各元素中各成员的值。素中各成员的值。struct studentstruct student int num; int num; char name20; char name20; char sex; char sex; int age; int age; ; ; struct student stu3= struct student stu3= 10101,Zhang,M,18,10101,Zhang,M,18,10102,Li,M,19, 101

26、02,Li,M,19, 10103,Wang,F,2010103,Wang,F,20;main() main() struct student *p; struct student *p; printf( No. Name sex printf( No. Name sex agen);agen); for (p=stu;pstu+3;p+) for (p=stu;pnum,p-name,p-sex, p-num,p-name,p-sex, p-age);p-age); 2024/8/223C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表指针移动示意图:stu0stu1

27、stu2PPP”20FWang1010319MLi1010218MZhang101012024/8/224C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表注意:注意:如果如果p p的初值为的初值为stustu,即指向第一个元素,则,即指向第一个元素,则p+1p+1后后指向下一个元素。请区别:指向下一个元素。请区别:(+p)-num (+p)-num 和和 (p+)-num (p+)-num 指针指针p p已定义为指向已定义为指向struct studentstruct student类型的数据,类型的数据,它只能指向该结构体类型数据,而不能指向一元素它只能指向该结构体

28、类型数据,而不能指向一元素的某一成员(即的某一成员(即p p的地址不能是成员的地址)。如下的地址不能是成员的地址)。如下面的赋值是错误的:面的赋值是错误的:p=&stu.nump=&stu.num编译时将给出编译时将给出“警告警告”信息,表示地址信息,表示地址的类型不匹配。不要认为反正的类型不匹配。不要认为反正p p是存放地址的,可以是存放地址的,可以将任何地址赋给它。将任何地址赋给它。 2020FFWangWang10103101031919MMLi Li 10102101021818MMZhangZhang10101101012024/8/225C语言程序设计教程第第9 9章章 结构体数据

29、类型与链表结构体数据类型与链表将一个结构体变量的值传递给另一个函数,可以采用以下将一个结构体变量的值传递给另一个函数,可以采用以下两种方式:两种方式:v 用结构体变量的成员作参数。用法和普通变量作实参是一样用结构体变量的成员作参数。用法和普通变量作实参是一样的,属的,属“值传递值传递”方式。方式。v形参与实参都用结构体变量形参与实参都用结构体变量 直直接接将将实实参参结结构构体体变变量量的的各各个个成成员员的的值值全全部部传传递递给给形形参参的结构体变量。注意:实参和形参类型应当完全一致。的结构体变量。注意:实参和形参类型应当完全一致。9.5.1 9.5.1 结构体变量作函数参数结构体变量作函

30、数参数9.5 9.5 结构体与函数结构体与函数2024/8/226C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表struct studstruct stud int num; int num; char name20; char name20; int score3; int score3; ; ;main( )main( ) void print(struct stud p); void print(struct stud p); struct stud stu; struct stud stu; int j; int j; scanf(“%d”,&stu.num

31、); 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,内含学,内含学生学号、姓名和三生学号、姓名和三门课的成绩。要求门课的成绩。要求在在mainmain函数中赋值,函数中赋值,在另一函数在另一函数printprint中中将它们打印输出,将它们

32、打印输出,程序如下。程序如下。2024/8/227C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表值得指出的是,把一个完整的结构体变量作为参数传递,值得指出的是,把一个完整的结构体变量作为参数传递,虽然合法,但要将全部成员值一个一个传递,既费时间又虽然合法,但要将全部成员值一个一个传递,既费时间又费空间,开销大,因此一般不采用。费空间,开销大,因此一般不采用。注意:注意:ANSI CANSI C允许用整个结构体作为函数的参数传递,但允许用整个结构体作为函数的参数传递,但是必须保证实参与形参的类型相同。是必须保证实参与形参的类型相同。void print(struct

33、stud p)void print(struct stud p) int j; int j; printf(%dn%sn”, printf(%dn%sn”, p.p.num,num,p.p.name,);name,);for(j=0;j3;j+)for(j=0;j3;j+) printf(“%dn”,&stu.scorej); printf(“%dn”,&stu.scorej); 2024/8/228C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表用指向结构体变量(或数组)的指针作实参,用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的起始地址传给形参。

34、将结构体变量(或数组)的起始地址传给形参。 形参为指针变量,实参为结构体变量的地址或形参为指针变量,实参为结构体变量的地址或指向结构体变量的指针。指向结构体变量的指针。 9.5.2 9.5.2 用指向结构体的指针作函数参数用指向结构体的指针作函数参数例例9.4 9.4 的的printprint函数形参改用指向结构体的指针后函数形参改用指向结构体的指针后程序如下程序如下: :2024/8/229C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表#includestring.hstructstudentintnum;charname20;intscore3;main()vo

35、idprint(structstudent*p);structstudentstu; int j; int j; scanf(“%d”,&stu.num); scanf(“%d”,&stu.num); strcpy(stu.name,Li Ping); strcpy(stu.name,Li Ping); for(j=0;j3;j+) for(j=0;jp-num,num,p-p-name,);name,);for(j=0;j3;j+)for(j=0;jscorej); printf(“%dn”,p-scorej); 2024/8/230C语言程序设计教程第第9 9章章 结构体数据类型与链表结构

36、体数据类型与链表9.5.3 返回结构体类型值的函数ANSI CANSI C还允许函数返回结构体类型的值。设有还允许函数返回结构体类型的值。设有 struct student struct student 类型,结构体变量定义如下:类型,结构体变量定义如下: struct student stud; struct student stud; 若若函函数数input()input()的的功功能能是是输输入入一一个个学学生生结结构构体体数据,并将其返回给学生记录数据,并将其返回给学生记录stud,stud,即:即: #include stdio.h#include stdio.hstruct stu

37、dentstruct student int num; int num; char name10; char name10; int score3; int score3;2024/8/231C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表struct student input()struct student input() int k;int k;struct student stud;struct student stud;scanf(%d,&stud.num);scanf(%d,&stud.num);getchar();getchar();gets(stud.

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

39、k+) for(k=0;knum,p-name);,p-num,p-name); p=p-next; p=p-next; while(p!=NULL); while(p!=NULL); 本例所有结点都是在程序中定义的,不是临时开辟的本例所有结点都是在程序中定义的,不是临时开辟的2024/8/234C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表 链表结构是动态分配存储的链表结构是动态分配存储的,即在需要时才开辟一个结即在需要时才开辟一个结点的存储单元点的存储单元,怎样开辟呢怎样开辟呢?C语言编译系统中提供了以下有语言编译系统中提供了以下有关的函数关的函数:1、分配存储

40、空间函数分配存储空间函数malloc()malloc()函数的原型为:函数的原型为:void*malloc(unsignedintsize);函函数数的的作作用用是是在在内内存存自自由由空空间间开开辟辟一一块块大大小小为为size字字节节的的空间,并将此存储空间的起始地址作为函数值带回。空间,并将此存储空间的起始地址作为函数值带回。例例如如,malloc(10)的的结结果果是是分分配配了了一一个个长长度度为为10字字节节的的内内存存空空间间,若若系系统统设设定定的的此此内内存存空空间间的的起起始始地地址址为为1800,则则malloc(10)的函数返回值就为的函数返回值就为1800。 9.6.

41、2 9.6.2、内存管理库函数、内存管理库函数2024/8/235C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表例例9.6malloc函数的使用函数的使用main()main() int j,n,*p;int j,n,*p;printf(nplease input a data to n:);printf(nplease input a data to n:);scanf(%d,&n);scanf(%d,&n);p=(int *)malloc(n*sizeof(int);p=(int *)malloc(n*sizeof(int);printf(nplease inp

42、ut %d datas:,n);printf(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 to the list:); printf(nplease input datds to the list:); scanf(%ld,&x); scanf(%ld,&x); while(x!=0) while(x!=0) p=(s

43、truct student *)malloc p=(struct student *)malloc (sizeof(struct student); (sizeof(struct 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);2024/8/240C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表2 2、输出出链表表void print(s

44、truct student *head)void print(struct student *head) struct student *p; struct student *p; p=head-next; p=head-next; printf( printf(“nTHe list is:nTHe list is:”);); if(p=NULL) if(p=NULL) printf( printf(“the list is NULL!nthe list is NULL!n”);); while(p!=NULL) while(p!=NULL) printf(%6ld,p-num); print

45、f(%6ld,p-num); p=p-next; p=p-next; printf( printf(“nn”););2024/8/241C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表3 3、删除除链表中的一个表中的一个结点点void del(struct student *head)void del(struct student *head) struct student *p,*q; struct student *p,*q; long num; long num; printf(nplease input the studentprintf(nplease in

46、put the studentnum you want to delete:);num 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); els

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

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

49、=q-next; q=q-next; p-next=q-next;p-next=q-next; q-next=p; q-next=p;2024/8/243C语言程序设计教程第第9 9章章 结构体数据类型与链表结构体数据类型与链表5、对链表的综合操作、对链表的综合操作void main()void main() struct student *la;struct student *la;la=creat();la=creat();print(la);print(la);del(la);del(la);print(print(l la);a);insert(la);insert(la);print

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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号