资源描述
第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型用链表处理不定长数组。用链表处理不定长数组。用链表处理不定长数组。用链表处理不定长数组。什么是链表?什么是链表?什么是链表?什么是链表?结构定义:结构定义:结构定义:结构定义:struct struct struct struct studentstudentstudentstudent int int int int num;num;num;num;float score;float score;float score;float score;struct struct struct struct studentstudentstudentstudent *next;next;next;next;链表的分类链表的分类链表的分类链表的分类 单向链表、双向链表等。单向链表、双向链表等。单向链表、双向链表等。单向链表、双向链表等。一、链表概述一、链表概述891018910189.589.5ffcdffcdff02ff0289103891039090fffdfffdffcdffcd89107891078585NULLNULLfffdfffd第八节第八节第八节第八节 链表根底链表根底链表根底链表根底第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型动态存储分配函数动态存储分配函数原型:原型:void*void*mallocmalloc(intint size)size)头文件:头文件:stdlibstdlib.h.h。功能:功能:分配分配sizesize个字节的存储区。个字节的存储区。返回值:返回值:分配成功,所分配区域的首返回地址。分配成功,所分配区域的首返回地址。分配失败,返回分配失败,返回 0 0。例如:例如:structstruct student student*psps;pspspsps=(=(=(=(structstructstructstruct student student student student*)mallocmallocmallocmalloc(sizeofsizeofsizeofsizeof(structstructstructstruct student student student student););););第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型释放内存函数释放内存函数原型:原型:void free(void*p)void free(void*p)头文件:头文件:stdlib.h stdlib.h。功能:释放功能:释放p p所指向的内存空间。所指向的内存空间。返回值:无返回值:无 。例如:例如:前面说明结构指针前面说明结构指针ps,ps,为其分配了内存,为其分配了内存,释放内存,那么写:释放内存,那么写:free(ps);free(ps);第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型创立链表的过程:创立链表的过程:按照结构的大小分配一块内存区域。按照结构的大小分配一块内存区域。将该区域的首地址赋给一个头指针。将该区域的首地址赋给一个头指针。继续分配一块内存区域。继续分配一块内存区域。将该区域的首地址分配给前一个结点的结点指针将该区域的首地址分配给前一个结点的结点指针变量。变量。继续上述过程,直到链表的尾。继续上述过程,直到链表的尾。二、创立链表二、创立链表第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型 ps f1aa 8019189.5NULL89107 85 NULL 89103 80 NULLps=(ps=(struct studentstruct student *)mallocmalloc(sizeof(sizeof(struct studentstruct student)scanf(“%ld,%fscanf(“%ld,%f,&ps-num,&ps-score);,&ps-num,&ps-score);ps-next=NULL;ps-next=NULL;p1p1=(struct student=(struct student*)mallocmalloc(sizeof(sizeof(struct studentstruct student)p1 ffe4 ps-next=p1ps-next=p1ffe4 ff4d 例例例例C11_701C11_701C11_701C11_701第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型headheadp1p1p2p2n=0headheadp1p1p2p2n=1p1p1n=2p2p2p1p1n=3p2p2NULLNULL例例例例C11_701aC11_701aC11_701aC11_701ap1=p2p1=p2=(struct student=(struct student*)mallocmalloc(sizeof(sizeof(struct studentstruct student)head=NULLhead=NULLp2-next=p1p2-next=p1p2-next=p1p2-next=p1第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型struct student*creat()struct student*creat()struct student*creat()struct student*creat()do do do do scanf(%ld,%d,&num,&a);scanf(%ld,%d,&num,&a);scanf(%ld,%d,&num,&a);scanf(%ld,%d,&num,&a);if(num!=0)if(num!=0)if(num!=0)if(num!=0)if(if(if(if(headheadheadhead=NULL)=NULL)=NULL)=NULL)headheadheadhead=tailtailtailtail;else else else else tailtailtailtail=tailtailtailtail-next;-next;-next;-next;tail-num=num;tail-num=num;tail-num=num;tail-num=num;tail-score=a;tail-score=a;tail-score=a;tail-score=a;tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);else tail-next=NULL;else tail-next=NULL;else tail-next=NULL;else tail-next=NULL;while(num!=0);while(num!=0);while(num!=0);while(num!=0);return(head);return(head);return(head);return(head);第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型 if(head=NULL)head=tail;if(head=NULL)head=tail;if(head=NULL)head=tail;if(head=NULL)head=tail;else else else else tail=tail-next;tail=tail-next;tail=tail-next;tail=tail-next;tail-num=num;tail-score=a;tail-num=num;tail-score=a;tail-num=num;tail-score=a;tail-num=num;tail-score=a;tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);tail-next=(struct student*)malloc(LEN);headheadtailtailtailtail第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型 从头结点开始,到尾结点结束。从头结点开始,到尾结点结束。尾结点的特征:其指向为空。尾结点的特征:其指向为空。三、输出一个链表三、输出一个链表第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型l删除一个结点,删除一个结点,既让上一个结点既让上一个结点指向下一个结点。指向下一个结点。三、在链表中删除一个节点三、在链表中删除一个节点f1aa f1aa 801918019189.589.5ffe4ffe489107 89107 85 85 NULL NULL 89103 89103 80 80 ff4d ff4d头指针头指针 psps(ps-1)-next=ps-next(ps-1)-next=ps-next801918019189.589.5ffe4ffe4ff4d ff4d 第十章第十章第十章第十章 结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型结构、联合与枚举类型l插入一个结点,插入一个结点,既插入处前一个既插入处前一个结点,指向结点,指向新结新结点点,新结点新结点指向指向一个结点。一个结点。四、在链表中插入一个节点四、在链表中插入一个节点f1aa f1aa 801918019189.589.5ffe4ffe489107 89107 85 85 NULL NULL 头指针头指针ff4d ff4d 89103 89103 80 80 ff4d ff4d pspsffdd ffdd ffdd ffdd ps-next=head-next;ps-next=head-next;ps=(struct student*)malloc(sizeof(struct studet);ps=(struct student*)malloc(sizeof(struct studet);head-next=ps-next;head-next=ps-next;
展开阅读全文