- 2
- 0
- 约1.87千字
- 约 10页
- 2019-11-23 发布于广东
- 举报
Basic of Basic 动态数据结构 链式存储结构 顺序存储结构 数据连续存放、随机存取 逻辑上相邻,物理上也相邻 存储结构简单、易实现 插入、删除操作不便 存储密度大,空间利用率高 需要预先分配空间,不管这些空间能否最大限度地利用 结论:顺序存储结构适合于表中元素变动较少的情况; 链表存储结构在两个方面是优点: 容易插入、删除操作 不需要预分空间。 链表的定义 链表(Link)中每一个元素的称为节点。 起始结点(首节点) 第一个节点。 头指针(head) 指向链表中第1个节点的指针。 链表结构的C语言描述为: struct Link { int data; struct Link *next; } 链表分为单向链表和双向链表,本课程讲解单向链表(单链表) 单链表在存储区的物理状态 链表与指针 设指针变量p、q的定义为: struct Link *p,*q; 对链表的操作实际上是对指针的操作。例如,要删除结点ai,首先要使指针p指向ai,即: 链表与指针 p=( struct Link *)malloc(sizeof( struct Link )) 申请一个结点空间,并将地址送入p中. free(p) 释放p指针所指结点的空间 p=q 指针p指向指针q所指的结点 p=q-next 指针p指向指针q所指结点的后继 p=p-next 指针p向后移动一个结点 p-next=NULL 将指针p所指结点与后继结点断开 指针操作的举例 p=q-next p指向q所指结点的后继 链表的删除操作 链表的删除操作就是将一个待删除的节点从链表中分离出来。 需要考虑以下4种情况 (1)如果链表为空表,则无需删除节点,直接退出程序即可。 (2)如果找到的待删除节点是首节点,则将head指向该节点的下一个节点。 (3)如果找到的待删除节点不是首节点,则将前一节点的指针指向当前节点的下一个节点。 (4)如果已经搜索到链表的末尾仍未找到待删除节点,则显示“未找到”的提示信息。 链表的插入操作 链表的插入操作就是将一个待插入的节点插入到已经建立好的链表中适当的位置。 需要考虑以下4种情况 (1)如果链表为空表,则新节点为首节点,让head指向新节点,且置新节点的指针域为空。 (2)如果按节点数据的排序结果应该在首节点前插入新节点,则让head指向新节点,而新节点的指针域指向原来链表的首节点。 (3)如果按节点数据的排序结果应该在链表的中间插入新节点,则将新节点的指针域指向下一个节点,而前一个节点的指针域指向新节点。 (4)如果按节点数据的排序结果应该在链表的末尾插入新节点,则将链表的最后一个节点的指针域指向新节点,而将新节点的指针域置为NULL。 动态链表的建立 以向链表中添加节点的方式建立一个链表 需要考虑以下两种情况: (1)若原链表为空表,则将新建节点置为首节点。 (2)若原链表为非空,则将新建节点添加到表尾。 见教材336页图8-13 * * * * 数据域 指针域 data next head data next data next data NULL 链表原理图 说明: 结构体声明时不能包含自我,但可以包含指向本结构体类型的指针变量 见教材334页 78 1060 56 1061 49 1013 89 1001 90 NULL 80 1012 存储地址 数据域(data) 指针域(next) 1001 1011 1012 1013 1060 1061 1011 头指针 head a1 ... ... head ai an NULL p ai ai-1 ai+1 ai ai-1 ai+1 q q p p 操作前状态 操作后状态 ai-1 ai ai+1 pr p 见教材339页 ai-1 ai p x pr 见教材341页
您可能关注的文档
最近下载
- ISO9001 质量管理体系全套(质量手册+程序文件+表格记录全套).doc VIP
- 深度解析(2026)SYT 5794-2010《钻井液用沥青类评价方法》:从标准解读到未来油田化学智能化应用的战略前瞻.pptx VIP
- 2025-2030中国化学镀镍行业市场发展趋势与前景展望战略研究报告.docx
- 深度解析(2026)《SYT 7377-2017钻井液设计规范》.pptx VIP
- 《船体振动学》教学课件.pdf
- 操作系统Windows操作系统模型.pptx VIP
- 2025年山东省选调公务员考试真题汇编附答案解析(夺冠).docx VIP
- Windows操作系统翻译词汇.pdf
- 基于灰色关联理论的广西农产品供应链影响因素分析.docx
- 关于绑架的小故事-绑架关起来的故事.docx VIP
原创力文档

文档评论(0)