- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 链表的概念 一个链表就是由这样一系列的结点所“链接”而成。 head : 头指针 * 链表示意图 链表的概念 一个结点至少包含两个内容:数据和指针。因此可以定义如下。 struct Node /* 结点的结构体类型定义 */ { int data; /* 结点的数据部分 */ struct Node *next; /* 结点的指针部分 */ }; data成员用于存放数据,这里假定存放的是int型数据(可根据实际需要修改) next成员用于存放结点的地址,所以其类型是struct Node *。 * 例10.7 * #includestdio.h struct Node { int data; struct Node *next; }; int main( ) { struct Node n1, n2, n3, *head, *p; head = n1; n1.data = 3; n1.next = n2; n2.data = 4; n2.next = n3; n3.data = 6; n3.next = 0; p = head; while ( p != \0 ) { printf(%d , p-data); p=p-next; } printf(\n); return 0; } 例10.7说明 本例主要展示了两个功能:建立链表和打印链表 本例是链表建立的一个简单演示,只包含三个结点。在实际中,有可能要处理的是大批量的数据,并且数据的数量也可能在运行时动态发生变化,因此不可能采取本例中的方式,即事先为每个数据定义一个结点,再将它们链接起来。而是在需要存储数据的时候向系统动态申请内存。每增加一个数据,程序就申请一个结点大小的内存空间,将数据存放进去,并将其添至链表中 * 例10.7说明 在打印链表中的数据时,首先从head指针开始找到链表的第一个结点,打印其中的数据(“printf(%d , p-data);”),并从这个结点中找到下一个结点的地址(“p = p-next;”),再重复这个过程,直至最后一个结点(p值变成\0)。在后续学习中,我们也将发现,存储链表首地址的head指针极为重要,它是整个链表的入口,我们对链表进行的绝大部分操作,都是从head指针开始入手的,并且在操作的过程中,也要时刻注意head指针的维护。 * 链表的基本操作 链表的基本操作 建立(批量存入数据) 打印(输出所有数据) 删除(在批量数据中删除指定数据) 插入(在批量数据中添加一个数据) * 例10.8 例10.8代码见课本。 说明 本例除main函数外,还包括Create、Print、Release这3个函数,功能分别是创建链表、打印链表和释放链表。 在建立链表(Create函数)时,本例使用了“尾插法”,即向链表中添加新结点时,新结点总是添加在链表的末尾。 * 例10.8 * 图10.5 链表建立过程 例10.8 说明 链表打印(Print函数)的基本思想与例10.7相同,主要是增加了链表是否为空的判断。 链表释放(Release函数)的作用是,当程序运行结束时,释放建立链表时所申请的内存空间。它的基本思想是:从第一个结点开始,首先保存该结点下一个结点的地址,再将该结点的内存空间释放。重复上述过程,直至链表结尾。 * 例10.8的思考题:修改Create函数,要求建立链表时,总是把新结点添加在链表的最前面。 例10.9 在例10.8的基础上,增加一个函数Delete,实现数据的删除,代码见课本。 * 例10.9 * 图10.6 结点删除过程 (a) 待删除结点为链表首结点 (b) 待删除结点非链表首结点 例10.10 假定链表中的数据是从小到大存放的,现要求在例10.8的基础上,增加一个函数Insert,实现向链表中插入数据的功能,并保持从小到大的次序不变。 代码见课本。 * 例10.10 说明:往链表中插入数据,一般需经三个步骤:生成结点、确定位置、插入结点。 生成结点:为待插入数据申请一块结点大小的存储空间p,将数据存入结点的数据域,结点的指针域则赋以初值NULL。 确定位置:确定新结点在链表中的插入位置,在函数中通过while循环实现。 插入结点:将新结点插入到合适的位置,在函数中通过if~else语句及后续的“p-next = p1;”共同完成。 * 例10.10 * (a)插入位置在第一个结点之前 例10.10 * (b)插入位置在两个结点之间 (c)插入位置在末尾结点之后 图10.7 结点插入过程示意 联合 联合(共同体)类型定义的方式与结构体类型类似 union 联合名 { 类型1 成员1; 类
您可能关注的文档
最近下载
- 无机非金属材料工艺学课件.pptx VIP
- 6SR550 NXGPRO+ 中压变频器通讯手册A5E50226719J_NXGpro+ Communication Manual_Chinese.pdf VIP
- 无机非金属材料工艺学课件.pptx VIP
- 2024年高中数学同步高分突破讲义(人教A版2019)1.1空间向量及其运算-(选择性必修第一册)(学生版+解析).docx VIP
- 上海证券交易所上市公司业务操作手册.pdf
- 2025年高考语文备考古诗鉴赏之韩琦《次韵答致政杜公以迁职惠诗》.docx VIP
- 军队文职思维导图:公共科目基础知识-非法.pdf VIP
- 冬季施工混凝土施工方案编制依据.docx VIP
- 儿童财商启蒙课课件.pptx
- 最新民宿劳务合同模板.docx VIP
文档评论(0)