构造数据类型精品课件_第1页
构造数据类型精品课件_第2页
构造数据类型精品课件_第3页
构造数据类型精品课件_第4页
构造数据类型精品课件_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、构造数据类型第1页,共77页,2022年,5月20日,4点51分,星期四2022/9/2019.1 结构体数据类型 前面介绍的变量都只包含一种类型 ,但在实际问题中,常常要求把一些属于不同类型的数据作为一个整体来处理。 如:一个职员的编号、姓名、年龄、性别、身份证号码、民族、文化程度、职务、住址、联系电话等等。 由一些不同类型的数据组合而成的数据整体,C语言称之为“结构体”类型,结构体中所包含的数据元素称之为成员。第2页,共77页,2022年,5月20日,4点51分,星期四2022/9/2029.1.2 结构的概念与定义使用结构来表示通讯录信息:struct friends_list char

2、 name10; /*姓名*/ int age; /*年龄*/ char telephone13; /*联系电话*/; 结构:构造数据类型,把有内在联系的不同类型的数据统一成一个整体,使它们相互关联结构又是变量的集合,可以单独使用其成员第3页,共77页,2022年,5月20日,4点51分,星期四2022/9/203结构的定义结构类型定义的一般形式为: struct 结构名 类型名 结构成员名1; 类型名 结构成员名2; 类型名 结构成员名n; ;结构的定义以分号结束,被看作一条语句 关键字struct和它后面的结构名一起组成一个新的数据类型名 第4页,共77页,2022年,5月20日,4点51

3、分,星期四2022/9/204结构体类型的特点: 结构体名为任何合法的标识符,建议用具有一定意义的单词或组合作为结构体名。 虽然成员的类型定义形式同简单变量,但不能直接使用。 定义结构体类型只是定义类型而不是定义变量。第5页,共77页,2022年,5月20日,4点51分,星期四2022/9/205结构定义示例定义平面坐标结构:struct point double x; double y; 虽然x、y的类型相同,也可以用数组的方式表示,但采用结构体描述整体性更强,增加了程序的可读性,使程序更清晰。第6页,共77页,2022年,5月20日,4点51分,星期四2022/9/2069.1.3 结构的

4、嵌套定义在实际生活中,一个较大的实体可能由多个成员构成,而这些成员中有些又有可能是由一些更小的成员构成的实体。在手机通讯录中,增加“通信地址”姓名性别年龄 通信地址联系电话电子邮箱城市街道门牌号邮编第7页,共77页,2022年,5月20日,4点51分,星期四2022/9/207结构的嵌套定义struct address char city10; char street20; int code; int zip;struct nest_friendslist char name10; int age; struct address addr; char telephone13; nest_fri

5、end;在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。 姓名性别年龄 通信地址联系电话电子邮箱城市街道门牌号邮编第8页,共77页,2022年,5月20日,4点51分,星期四2022/9/2089.2 结构变量 9.2.1 结构变量的定义和初始化9.2.2 结构变量的使用第9页,共77页,2022年,5月20日,4点51分,星期四2022/9/209结构变量的定义和初始化三种定义结构变量的方式: 1.单独定义先定义结构类型,再定义具有这种结构类型的变量 struct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ c

6、har telephone13; /* 联系电话 */; struct friends_list friend1, friend2;第10页,共77页,2022年,5月20日,4点51分,星期四2022/9/2010结构变量的定义2. 混合定义在定义结构体类型的同时定义结构体变量 struct friends_listchar name10; int age; char telephone13; friend1, friend2; 3. 无类型名定义在定义结构体变量时省略结构体名struct char name10; int age; char telephone13; friend1, fr

7、iend2; 第11页,共77页,2022年,5月20日,4点51分,星期四2022/9/2011结构变量的初始化 struct friends_list friend1 = Zhang, 26,;name age telephone Zhang260571-85271880第12页,共77页,2022年,5月20日,4点51分,星期四2022/9/20129.2.2 结构变量的使用1. 结构变量成员的引用结构变量名 .结构成员名friend1 . age = 26;strcpy(, Zhang San); nest_friend.addr

8、.zip第13页,共77页,2022年,5月20日,4点51分,星期四2022/9/20132、将结构体变量作为一个整体来使用。 可以将一个结构体变量作为一个整体赋给另一个结构体变量,条件是这两个变量必须具有相同的结构体类型。 例如:struct friend_list doctor=“Li Ming”,24, 88753540; struct friend_list teacher; teacher=doctor; /*将结构体变量doctor的值赋给teacher */这样,变量teacher中各成员的值均与doctor 的成员的值相同。第14页,共77页,2022年,5月20日,4点51

9、分,星期四2022/9/2014【例9-1】阅读下面的程序,了解结构体成员的使用/*exam9_1.c 结构体成员的使用*/#include #include struct scoreint math;int eng;int comp;struct stu char name12; char sex; long StuClass; struct score sub;第15页,共77页,2022年,5月20日,4点51分,星期四2022/9/2015main() struct stu student1=Li Ming,M,990324,88,80,90; struct stu student2;

10、 student2=student1; 0=H; 1=u; student2.StuClass=990325; student2.sub.math=83; printf(Record1-%s,%c,%ld,%d,%d,%dn, student1.sex,student1.StuClass,student1.sub.math, student1.sub.eng,p); printf(Record2-%s,%c,%ld,%d,%d,%dn, student2.sex,student2.StuClass,student2.sub.math, student2.sub.eng,p);程序运行结果:Re

11、cord1-Li Ming,M,990324,88,80,90Record1-Hu Ming,M,990325,83,80,90 第16页,共77页,2022年,5月20日,4点51分,星期四2022/9/20169.1.5 结构型变量成员的输入/输出 对变量的成员进行输入/输出,如下所示:scanf(“%s%s%ld”, , stud.addr, &stud.zip);printf(“%s, %s, %ldn”, , stud.addr, stud.zip); 也可以用gets函数和puts函数输入和输出一个结构变量中字符数组成员。如: gets(); /* 输入一个字符串给 */ puts

12、(); /*将数组中的字符串输出到显示器*/第17页,共77页,2022年,5月20日,4点51分,星期四2022/9/20179.2 结构体数组 结构体数组,亦即数组中每一个元素都是一个结构体变量。 9.2.1 结构体数组的定义 结构体数组的定义方法与结构体变量的定义方法相同。 一、先定义结构体,再定义结构体数组:struct ;struct ;第18页,共77页,2022年,5月20日,4点51分,星期四2022/9/2018二、在定义结构体的同时,定义结构体数组:struct ;三、直接定义结构体变量而不定义结构体名;struct ;第19页,共77页,2022年,5月20日,4点51分

13、,星期四2022/9/20199.2.2 结构体数组成员的初始化和引用 结构体数组成员的值也可以初始化,初始化的形式与二维数组的初始化形式类似。 例如: struct student stu30=“LiFei”, “DongFeng Road 14”, 430038, “LiMing”, “zhongshan Road 378”, 430082, “LiYong”, “Xiao Shan Road 25”, 430001;第20页,共77页,2022年,5月20日,4点51分,星期四2022/9/2020 结构体数组的引用完全类似于结构体变量的引用,只是用结构体数组元素来代替结构体变量,其他规

14、则不变,如下面所示: */引用某一元素的成员 */stu0.agestu0=stu2; */将结构体数组元素作为一个整体来使用 */第21页,共77页,2022年,5月20日,4点51分,星期四2022/9/20219.3 结构体变量与函数 一、函数的形参与实参为结构型 【例9-2】下面的程序是计算四种书的购书情况,并输出统计结果。分析,定义一个结构体类型BookLib,用来描述购书的信息,还定义了一个函数list,它的参数为结构型变量,函数的作用是计算购书的总费用并输出所有信息。 在主程序中,定义了一个临时字符数组变量temp15,用于将用户输入的两个数值:一个是书的数目n

15、um,另一个是书的价格price作为字符串来接收,然后通过atoi()函数和atof()函数将temp转成整型值和实型值。 第22页,共77页,2022年,5月20日,4点51分,星期四2022/9/2022/*exam9_2.c 函数的参数为结构类型*/#include #include #include struct BookLib char name12; int num; float price; float SumMoney;第23页,共77页,2022年,5月20日,4点51分,星期四2022/9/2023main() void list(struct BookLib StuBoo

16、k); struct BookLib Book4; int i; char temp15; for(i=0;i4;i+) printf(Please input data of book(%d): Name Number Pricen,i+1); gets(B); gets(temp); Booki.num=atoi(temp); gets(temp); Booki.price=atof(temp);第24页,共77页,2022年,5月20日,4点51分,星期四2022/9/2024printf(-n);printf(name num price SumMoneyn); fo

17、r(i=0;i4;i+) list(Booki);void list(struct BookLib StuBook) StuBook.SumMoney=StuBook.num*StuBook.price; printf(%-12s %5d %6.2f %9.2fn,StuB, StuBook.num,StuBook.price,StuBook.SumMoney);第25页,共77页,2022年,5月20日,4点51分,星期四2022/9/2025程序运行结果: Please input data of book: Name Number PriceComputer30018.6Please i

18、nput data of book: Name Number PriceMathematics60015.5Please input data of book: Name Number PriceEnglish36022.8Please imput data of book: Name Number PriceChemistry15014.2第26页,共77页,2022年,5月20日,4点51分,星期四2022/9/2026-name num price SumMoneyComputer 300 18.60 5580.00Mathematics 600 15.50 9300.00English

19、 360 22.80 8208.00Chemistry 150 14.20 2130.00第27页,共77页,2022年,5月20日,4点51分,星期四2022/9/2027二、函数的返回值类型为结构型 C标准中还允许函数的返回值为结构体类型的值。 【例9-3】把上面这个程序例子稍作修改,将数据输入用一个函数NewBook()来实现。/*exam9_3.c 函数的返回值为结构类型*/#include #include #include 第28页,共77页,2022年,5月20日,4点51分,星期四2022/9/2028struct BookLibchar name12;int num;floa

20、t price; float SumMoney;void list(struct BookLib StuBook) StuBook.SumMoney=StuBook.num*StuBook.price; printf(%-12s %5d %6.2f %9.2fn,StuB, StuBook.num,StuBook.price,StuBook.SumMoney);第29页,共77页,2022年,5月20日,4点51分,星期四2022/9/2029struct BookLib NewBook()struct BookLib book;char temp15;printf(Please input

21、data of book: Name Number Pricen);gets();gets(temp);book.num=atoi(temp);gets(temp);book.price=atof(temp);return(book);第30页,共77页,2022年,5月20日,4点51分,星期四2022/9/2030main()struct BookLib Book4;int i;for(i=0;i4;i+)Booki=NewBook();printf(-n);printf(name num price SumMoneyn);for(i=0;i4;i+)list(Booki);程序中定义了两

22、个函数:无返回值的函数list(),返回值为结构体类型变量的函数NewBook()用来给结构体变量数组赋值。 第31页,共77页,2022年,5月20日,4点51分,星期四2022/9/2031例9-4 构建简单的手机通讯录联系人的基本信息:姓名、年龄和联系电话最多容纳50名联系人的信息 具有新建和查询功能第32页,共77页,2022年,5月20日,4点51分,星期四2022/9/2032程序解析程序结构程序结构主函数main:程序的总体控制函数new_friend:新建联系人功能函数search_friend:查询联系人功能 main()new_friend()search_friend()

23、第33页,共77页,2022年,5月20日,4点51分,星期四2022/9/2033程序解析数据类型/变量数据类型/变量结构类型struct friends_list:在程序首部定义,其中的成员分别代表联系人的基本信息struct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ char telephone13; /* 联系电话 */; 结构数组friends:每个元素就是一个结构变量,对应一个联系人struct friends_list friends50; 第34页,共77页,2022年,5月20日,4点51分,星期四2022/9/

24、2034程序解析全局变量/函数参数全局变量Count:记录当前的联系人总数 函数new_friend和search_friend的参数之一是结构数组:void new_friend(struct friends_list friends );void search_friend(struct friends_list friends , char *name); 结构数组名作为函数实参与普通数组名作函数参数一样,将数组首地址传递给函数形参第35页,共77页,2022年,5月20日,4点51分,星期四2022/9/2035程序解析源程序#include#include/*手机通讯录结构定义*/s

25、truct friends_list char name10; /* 姓名 */ int age; /* 年龄 */ char telephone13; /* 联系电话 */; int Count = 0; /* 全局变量记录当前联系人总数 */void new_friend(struct friends_list friends );void search_friend(struct friends_list friends , char *name);第36页,共77页,2022年,5月20日,4点51分,星期四2022/9/2036源程序int main(void) int choice

26、; char name10; struct friends_list friends50; /* 包含50个人的通讯录 */ do printf(手机通讯录功能选项:1:新建 2:查询 0:退出n); printf(请选择功能:); scanf(%d, &choice); switch(choice) case 1: new_friend(friends); break; case 2: printf(请输入要查找的联系人名:); scanf(%s, name); search_friend(friends, name); break; case 0: break; while(choice

27、!= 0); printf(谢谢使用通讯录功能!n); return 0;第37页,共77页,2022年,5月20日,4点51分,星期四2022/9/2037源程序/*新建联系人*/void new_friend(struct friends_list friends ) struct friends_list f; if(Count = 50) printf(通讯录已满!n); return; printf(请输入新联系人的姓名:); scanf(%s, ); printf(请输入新联系人的年龄:); scanf(%d, &f.age); printf(请输入新联系人的联系电话:); sca

28、nf(%s, f.telephone); friendsCount = f; Count+;第38页,共77页,2022年,5月20日,4点51分,星期四2022/9/2038源程序/*查询联系人*/void search_friend(struct friends_list friends , char *name) int i, flag = 0; if(Count = 0) printf(通讯录是空的!n); return; for(i = 0; i Count; i+) if(strcmp(name, ) = 0) /* 找到联系人*/ flag=1; bre

29、ak; if(flag) printf(姓名: %st, ); printf(年龄: %dt, friendsi.age); printf(电话: %sn, friendsi.telephone); else printf(无此联系人!);第39页,共77页,2022年,5月20日,4点51分,星期四2022/9/2039 9.4 共用体(联合体)一、 共用体的概念 二个以上不同类型的变量采用“覆盖技术”占用同一段内存单元的结构称为共用体。共用体类型变量的定义形式如下:union 共用体名 分量表 变量表;第40页,共77页,2022年,5月20日,4点51分,星期四

30、2022/9/2040说明:虽然“共用体”与“结构体”的定义形式相似,但是: 一个结构体变量所需的存储容量为每个分量所需存储容量之和。而一个共用体变量所需的存储容量为各个分量中占用存储容量最多的分量所需的存储容量。 一个结构体变量的各个分量在任何时刻都同时存在,且可同时引用。而一个共用体变量的各个分量在同一时刻只存在其中一个,也只能引用其中的一个分量。即起作用的只是最后一次存放的分量,在存入一个新的分量后,原有分量的值被覆盖而失去作用。 一个结构体变量的各个分量的(起始)地址各不相同, 分别拥有各自的存储空间。而一个共用体变量的各个分量的地址(起始)相同,共同拥有同一存储空间。第41页,共77

31、页,2022年,5月20日,4点51分,星期四2022/9/2041 共用体类型可以出现在结构体类型定义中,也可以定义共用体类型数组,数组也可以作为共用体的分量。同样,结构体类型也可以出现在共用体类型定义中。 不能在定义共用体变量时对其初始化,也不能对共用体变量名赋值,更不能企图引用共用体变量名去得到分量的值。 共用体变量可作为参数传递给函数,也可以作函数的返回值。同样,可以使用地址传送方式将共用体变量的地址作为参数或返回值在函数间传递。第42页,共77页,2022年,5月20日,4点51分,星期四2022/9/20429.4A,共用体变量的存储形式struct memb float v;in

32、t n;char c; stag; stag占内存7个字节的空间union memb float v;int n;char c; ustag; ustag占的内存空间为4个字节100110051007vnc2001vnc200220032004 共用体类型变量每次只能存放一个成员的值第43页,共77页,2022年,5月20日,4点51分,星期四2022/9/2043二、 共用体变量的引用 不能引用共用体变量,只能采用分量运算符 “ ” 引用共用体变量的分量。与引用结构体变量的方法是一致的。 第44页,共77页,2022年,5月20日,4点51分,星期四2022/9/2044例9.4a下述程序的

33、输出结果是(9)。(演示9-4a.c) #include void main( ) union char c ; unsigned int i4; z ; z.i0=0 x39 ; z.i1=0 x36; printf(“%c”,z.c); c ; i0底8位0 x39 i0高8位0 x00 i1 0 x36 0 x00 i2 i4第45页,共77页,2022年,5月20日,4点51分,星期四2022/9/2045 所谓“枚举”是指变量的取值只限于所列举出来的值的范围内。枚举的定义枚举类型定义的一般形式为: enum 枚举名 枚举值表 ; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。

34、 如: enum weekday sun,mon,tue,wed,thu,fri,sat; 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。9.5 枚举类型第46页,共77页,2022年,5月20日,4点51分,星期四2022/9/2046枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:enum weekday sun,mou,tue,wed,thu,fri,sat ;enum weekday a,

35、b,c;或者为:enum weekday sun,mou,tue,wed,thu,fri,sat a,b,c;或者为:enum sun,mou,tue,wed,thu,fri,sat a,b,c;第47页,共77页,2022年,5月20日,4点51分,星期四2022/9/2047 1、枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2。如在weekday中,sun值为0,mon值为1,,sat值为6。2、只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: a=sum; b=mon;是正确的。而: a=0; b=1;是错误的。如一定要把数值赋予枚举变量,则必须

36、用强制类型转换。如: a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: a=tue;第48页,共77页,2022年,5月20日,4点51分,星期四2022/9/2048 3、 可用如下定义改变枚举元素中的序号值: enum weekday sun,mon,tue,wed,thu=7,fri,sat;则枚举元素的序号值依次为:0、1、2、3、7、8、9。4、还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。第49页,共77页,2022年,5月20日,4点51分,星期四2022/9/2049/* 9_7.c 枚举类型的用法*/#i

37、nclude enum monthsJAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;main() enum months month; char *monthName=,January,February,March,April, May,June,July,Auguest,September, October,November,Dcember; for(month=JAN;month=DEC;month+) printf(%2d - %-10sn,month,monthNamemonth);第50页,共77页,2022年,5月20日,4点51

38、分,星期四2022/9/20509.6 动态数据结构 静态数据结构(例如数组)占据内存空间的位置和大小是在它们被说明的同时由系统分配的, 在程序运行期间是不变的, 因此可以有效地访问它们的任何一个元素。但要删除和插入一个元素则比较困难, 往往要引起大量的数据移动。 而且数据量的扩充更受到它们所占用的有限内存空间的限制。C中的动态数据结构有效地解决了这一问题。动态数据结构中的每个组成数据在逻辑上是连续排列的,但在物理上即在内存中存储时并不占用连续的内存空间,它们可以根据需要随机地增加或减少其元素, 相应地占用或释放内存空间。 动态数据结构中最基本的形式是链表和二叉树, 它们在数据处理中起着十分重

39、要的作用。第51页,共77页,2022年,5月20日,4点51分,星期四2022/9/2051一、 动态存储分配C语言实现动态存储分配的函数: (类型说明符*)malloc(size)功能:在内存的动态存储区中分配一块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。“类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *)malloc(100);表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。第52页,共77页,2

40、022年,5月20日,4点51分,星期四2022/9/2052 (类型说明符*)calloc(n,size) 在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*)calloc(2,sizeof(struct stu); free(ptr) 释放由指针ptr所指向的存储空间。ptr是最近一次调用malloc或calloc函数或链表指针返回的值。ptr为字符型指针。第53页,共77页,2022年,5月20日,4点51分,星期四2022/9/2053二、

41、 链表 链表概念 链表是一种常见的动态地进行存储分配的数据结构。链表有 “单向链表”、“双向链表”、“循环链表”、“双向循环链表”之分。下图是一个“单向链表”的示例。 单向链表是按照输入数据的顺序建立的。它有一个“头指针”(图中为head),指向第一个元素;每一个元素称为“结点”,每个结点包括两个域:数据域和指向下一个结点的指针域;最后一个元素的指针域为 “NULL”(“空地址”),表示链表的结束,称为“表尾”。第54页,共77页,2022年,5月20日,4点51分,星期四2022/9/2054a1a2ana3L.线性表的链式存储结构可用C语言中的“结构指针”来描述单向链表存储结构带头结点的线

42、性链表datanextstruct jd int data; Struct jd *next; ;第55页,共77页,2022年,5月20日,4点51分,星期四2022/9/2055步骤:1、定义链表接点数据类型;2、建立表头(亦即建立一个空表);3、利用malloc()申请分配一个节点空间;4、将新节点的指针成员的值赋为空,若是空表,将新节点连接到表头;若非空,将新节点连接到表尾;5、若有后续节点要接入链表,则转3,否则结束!第56页,共77页,2022年,5月20日,4点51分,星期四2022/9/2056 建立链表例9.3建立一个三个结点的链表,存放学生数据。为简单起见, 我们假定学生数

43、据结构中只有学号和年龄两项。head123pbpb0pbpfpf #define NULL 0 #define LEN sizeof (struct stu) struct stu int num; int age; struct stu *next; ;pf第57页,共77页,2022年,5月20日,4点51分,星期四2022/9/2057struct stu *creat(int n) struct stu *head,*pf,*pb;定义链表接点数据类型指针*/ int i; for(i=0;inum,&pb-age); if(i=0) pf=head=pb; /* head为链表头指针

44、, pb为表尾指针*/ else pf-next=pb; /*连接两节点*/pb-next=NULL;/*表尾指针置为空*/ pf=pb; return head;/*通过结构体指针访问结构体成员时,使用-*/ 第58页,共77页,2022年,5月20日,4点51分,星期四2022/9/2058打印链表函数void list(struct stu *head) struct stu *p;p=head;printf(node address num agen);printf(_n);while(p!=NULL) printf( %lu %3d %3dn, p,p-num,p-age); p=p

45、-next;main()struct stu *head; int num=10; head=creat(num); list(head);第59页,共77页,2022年,5月20日,4点51分,星期四2022/9/2059babaxPP单链表的插入运算S在P所指向的结点之后插入新的结点第60页,共77页,2022年,5月20日,4点51分,星期四2022/9/2060babaxanaia1a2PPai-1xL单链表的插入运算S第61页,共77页,2022年,5月20日,4点51分,星期四2022/9/2061单链表的插入运算void lbcr (stuct stu *p) / * 在P所指向

46、的结点之后插入新的结点 */ struct stu *s; /* 定义指向结点类型的指针 */ s=(struct stu *)malloc(len ); /* 生成新结点 */ printf(input Number and Agen); scanf(%d%d,&pb-num,&pb-age); s-next=p-next; p-next=s; return ; 第62页,共77页,2022年,5月20日,4点51分,星期四2022/9/2062anaia1a2Pai-1L单链表的插入运算 void lbcr (stu *p) / * 在P所指向的结点之后插入新的结点 */ struct s

47、tu *s; /* 定义指向结点类型的指针 */ s=(struct stu *)malloc(len ); /* 生成新结点 */ scanf(%d%d,&pb-num,&pb-age); s-next=p-next; p-next=s; return OK;第63页,共77页,2022年,5月20日,4点51分,星期四2022/9/2063anaia1a2Pai-1L单链表的插入运算void lbcr (struct stu *p) / * 在P所指向的结点之后插入新的结点 */ struct stu *s; /* 定义指向结点类型的指针 */ s=(struct stu*)malloc(

48、len); /* 生成新结点 */ scanf(%d%d,&pb-num,&pb-age); s-next=p-next; p-next=s; return OK; S第64页,共77页,2022年,5月20日,4点51分,星期四2022/9/2064anaia1a2Pai-1xL单链表的插入运算void lbcr (struct stu *p) / * 在P所指向的结点之后插入新的结点 */ struct stu *s; /* 定义指向结点类型的指针 */ s=(struct stu *)malloc(len); /* 生成新结点 */ scanf(%d%d,&pb-num,&pb-age)

49、; s-next=p-next; p-next=s; return OK;S第65页,共77页,2022年,5月20日,4点51分,星期四2022/9/2065anaia1a2Pai-1xL单链表的插入运算void lbcr (JD *p, int x) / * 在P所指向的结点之后插入新的结点 */ JD *s; /* 定义指向结点类型的指针 */ s=(JD *)malloc(sizeof(JD ); /* 生成新结点 */ scanf(%d%d,&pb-num,&pb-age); s-next=p-next; p-next=s; return OK;S第66页,共77页,2022年,5月

50、20日,4点51分,星期四2022/9/2066anaia1a2Pai-1xL单链表的插入运算void lbcr (struct stu *p) / * 在P所指向的结点之后插入新的结点 */ struct stu *s; /* 定义指向结点类型的指针 */ s=(struct stu *)malloc(len); /* 生成新结点 */ scanf(%d%d,&pb-num,&pb-age); s-next=p-next; p-next=s; return OK;第67页,共77页,2022年,5月20日,4点51分,星期四2022/9/2067void lbsc(struct stu *p

51、) /* 删除p指针指向结点的后一个结点 */struct stu *q; if(p-next !=NULL) q=p-next ; / * q指向p的后继结点 */ p-next=q-next; /* 修改p结点的指针域 */ free(q); /* 删除并释放结点 */ 单链表的删除运算第68页,共77页,2022年,5月20日,4点51分,星期四2022/9/2068ai-1a1aiai+1Lpvoid lbsc(struct stu *p) /* 删除p指针指向结点的后一个结点 */struct stu *q; if(p-next !=NULL) q=p-next ; / * q指向p的后继结点 */ p-next=q-next; /* 修改p结点的指针域 */ free(q); /* 删除并释放结点 */ 单链表的删除运算第69页,共77页,2022年,5月20日,4点51分,星期四2022/9/2069ai-1a1aiai+1Lpvoid lbsc(struct stu *p) /*

温馨提示

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

评论

0/150

提交评论