- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.4 动态存储分配—链表 struct student { int num; float score; struct student *next; }; 结构体的成员中,可以含有指针型的数据。其中也可以含有指向结构体自身的指针,它与一般的结构体变量不同,它是所指类型的结构体的成员,例如: 这就定义了含有指向结构体struct student自身的指针变量成员。其中,next是成员名,它是指针类型,指向struct student类型数据。 7.4.1 链表的建立 所谓链表是指若干个 “结点”按一定的规则连接起来。规则是:前一个结点“指向”下一个结点,每个结点包含数据和指针两部分,只有通过前面一个结点才能找到下一个结点。链表中有一个头指针变量,如图7-2所示。图中以head表示,它本身不是链表中的结点。head指向第一个结点;第一个结点又指向第二个结点;......,直到最后一个结点,该结点不再指向其他结点。最后一个结点称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”)。 7.4 动态存储分配—链表 void *malloc(unsigned int size) 如果要建立链表,在链表中增加新的结点,就要申请分配存储空间;如果不再使用链表,则应释放其所占用的存储空间。实现这两个任务的操作,需要使用C语言所提供的动态分配函数。 用于动态申请空间的标准库函数有malloc( )和calloc( )函数,用于释放空间的标准库函数有free( )函数。其函数原型在stdlib.h中,引用这三个函数时,必须要包含stdlib.h文件。 (1)malloc函数。它的作用是在内存开辟指定大小的存储空间,并将此存储空间的起始地址作为函数值带回,malloc函数的模型(原型)为: 图7-2 链表 7.4 动态存储分配—链表 p=(long*)malloc(8); 它的形参size为无符号整型。函数返回值为指针(地址),这个指针是指向void类型的,也就是不规定指向任何具体的类型。如果想将这个值赋给其他类型的指针变量,应当进行显示的转换(强制类型转换)。例如,可以用malloc(8)来开辟一个长度为8字节的内存空间,如果系统分配的此段空间的起始地址为1268,则malloc(8)的函数返回值为1268。这个返回的指针值指向void型,如果想把此地址赋给一个指向long型的指针变量p,则应进行以下显示转换: 如果内存缺乏足够大的空间进行分配,则malloc函数值为“空指针”,即地址为0,表示申请失败。 (2)calloc函数。其函数模型为: void * alloc(unsigned int num,unsigned int size) 它有两个形参num和size。其作用是分配num个大小为size字节的空间。例如,用calloc(10,20)可以开辟10个(每个大小为20字节)的空间,即总长为200字节。此函数返回值为该空间的首地址。 7.4 动态存储分配—链表 void free(void *ptr) (3)free函数。其模型为: 其作用是:将指针变量ptr指向的存储空间释放,即交还给系统,系统可以另分配作它用。应当强调,ptr值不能是任意的地址,而只能是由在程序中执行过的malloc或calloc函数所返回的地址。下面这样用是可以的: p=(long * ) malloc(8); … free(p); 它把原先开辟的8字节的空间释放,虽然p是指向long型的,但可以传给指向void型的指针变量ptr,系统会自动转换的,free函数无返回值。 所谓建立链表是指从无到有地建立一个链表,即一个一个地输入各结点数据,并建立起前后相连的关系。下面通过一个例子来说明如何建立一个链表。 【例7-6】 写一函数,建立一个关于学生数据的链表。 建立链表的函数如下: 7.4 动态存储分配—链表 #include stdio.h #includestdlib.h # define NULL 0 # define LEN sizeof(struct student) struct student { long num; float score; struct student *next; }; int n; struct student *creat() /*返回一个指向链表头的指针*/ { struct student * head; struct student *p1,*p2; n=0; p1=p2=(struct studen
您可能关注的文档
- C#桌面系统开发案例教程 李建青 第四章新.ppt
- C++ Builder 6程序设计教程 陆卫忠 刘文亮 等 第一章概述新.ppt
- C++程序设计 张桦 第1章 开始学习C++新.ppt
- C++程序设计 张桦 第2章 数据类型与表达式新.ppt
- C++程序设计 张桦 第4章 程序流程控制新.ppt
- C++程序设计 张桦 第5章 函数新.ppt
- C++程序设计 张桦 第6章 类和对象新.ppt
- C++程序设计 张桦 第7章 面向对象程序设计新.ppt
- C++程序设计 张桦 第8章 RTTI与异常处理新.ppt
- C++程序设计 郑莉 第1章_程序与数据新.ppt
- C语言程序设计 何丽 余平 C语言程序设计第8章新.ppt
- C语言程序设计 何丽 余平 C语言程序设计附录新.ppt
- C语言程序设计 何丽 余平 C语言程序设计文前第1章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第1章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第2章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第3章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第5章新.ppt
- C语言程序设计 任文 孔庆彦 (第1章--第6章) 第6章新.ppt
- C语言程序设计 任文 孔庆彦 (第7章--第12章) 第7章新.ppt
- C语言程序设计 任文 孔庆彦 (第7章--第12章) 第9章新.ppt
文档评论(0)