C语言线性链表.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言线性链表.ppt》由用户(hwpkd79526)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 线性
- 资源描述:
-
1、1线性表的链式存储结构线性表的链式存储结构 每个元素由结点每个元素由结点(NodeNode)构成构成;结点间的结点间的是线性的,即线性表是线性的,即线性表;结点在计算机中可以结点在计算机中可以不连续存储不连续存储;链表可以扩充,只受存储介质大小的限制链表可以扩充,只受存储介质大小的限制;Node:链表分类链表分类按照链式存储的原则,可以有多种形式的链表按照链式存储的原则,可以有多种形式的链表线性链表(单链表)线性链表(单链表)循环链表循环链表双向链表双向链表a1ana3a2H3 typedef int ElemType;typedef struct LNode ElemType data;/结
2、点的数据域结点的数据域 struct LNode*next;/结点的指针域结点的指针域 LNode,*LinkList;单链表的定义单链表的定义4单链表的存储映像单链表的存储映像Phead初始化:初始化:InitList(&L)销毁:销毁:DestroyList(&L)清空:清空:ClearList(&L)判表空:判表空:ListEmpty(L)求表长:求表长:ListLength(L)取元素值:取元素值:GetElem(L,i,&e)查找某元素:查找某元素:LocateElem(L,e)求前驱:求前驱:PriorElem(L,cur_e,&pre_e)求后继:求后继:NextElem(L,c
3、ur_e,&next_e)插入:插入:ListInsert(&L,i,e)删除:删除:ListDelete(&L,i,&e)遍历:遍历:ListTraverse(L,Visit()单链表的单链表的基本操作基本操作6单链表的插入操作单链表的插入操作当当!当当!当当!万无一失吗万无一失吗?有没有问题呢有没有问题呢?7单链表插入操作的特殊情况(单链表插入操作的特殊情况(1)Xss-nextbahead核心语句:核心语句:;在第一个结点前插入在第一个结点前插入 原语句:原语句:;p8单链表插入操作的特殊情况(单链表插入操作的特殊情况(2)在末尾插入在末尾插入 Xss-next核心语句:核心语句:s-n
4、ext=NULL;p-next=s;pbahead 原语句:原语句:;9单链表插入操作的特殊情况(单链表插入操作的特殊情况(3)空表插入空表插入 核心语句:核心语句:s-next=NULL;head=s;head=NULLXhead s原语句:原语句:;太麻烦了!太麻烦了!赶快想个办法吧!赶快想个办法吧!10解决之道:带解决之道:带的单链表的单链表头指针头指针表头结点表头结点head 空空表:表:头指针头指针表头结点表头结点head首结点:存储第一个数据元素11Xss-next带表头节点单链表的插入操作带表头节点单链表的插入操作abheadp(1)表头插入:表头插入:(2)空表插入:空表插入:
5、headpXs欧耶!欧耶!太给力了太给力了!单链表插入操作的算法描述单链表插入操作的算法描述status ListInsert_L(LinkList&L,int i,ElemType e)/在带头结点的链表中的第在带头结点的链表中的第i个结点前插入元素个结点前插入元素ep=L;j=0;while(p&jnext;+j;/查找第查找第i-1个结点个结点if(!p|ji-1)return-1;/i值不合法值不合法 s=(LNode*)malloc(sizeof(LNode);/申请新结点的空间申请新结点的空间 s-data=e;s-next=p-next;p-next=s;/插入操作插入操作ret
6、urn OK;/ListInsert_L P29 算法算法2.913小结:带表头结点的单链表小结:带表头结点的单链表表头结点位于表的最前端,本身不带数据,仅表头结点位于表的最前端,本身不带数据,仅做标志。有时可用来存储附加信息。做标志。有时可用来存储附加信息。设置表头结点的设置表头结点的:统一了链表第一位置和其他位置的操作;统一了链表第一位置和其他位置的操作;统一了空表和非空表的操作;统一了空表和非空表的操作;以空间赢得时间以空间赢得时间使得各种链表(单向链表、双向链表、单向循使得各种链表(单向链表、双向链表、单向循环链表和双向循环链表)的空链表状态得到区环链表和双向循环链表)的空链表状态得到
7、区分;亦表明各种空链表结构是不同的。分;亦表明各种空链表结构是不同的。14课后作业课后作业对照不带头结点和带头结点两种单链表对照不带头结点和带头结点两种单链表的插入操作,自行分析两种单链表对于的插入操作,自行分析两种单链表对于删除删除操作的不同。(操作的不同。(书面作业书面作业)说明:说明:必须要做!必须要做!虽然不讲,但是是考试内容!虽然不讲,但是是考试内容!2.3.3 链表基本算法实现链表基本算法实现(1)初始化初始化生成一个带头结点的生成一个带头结点的空链表空链表头指针头指针表头结点表头结点headStatus InitList_L(LinkList&L)L=(LinkList)mall
8、oc(sizeof(LNode);L-next=NULL;/创建头结点创建头结点 return OK;/InitList_L;16链表基本算法实现链表基本算法实现(2)建立单链表建立单链表建立链表的过程是一个动态生成的过程:建立链表的过程是一个动态生成的过程:从空表状态,依次建立各元素结点,并逐个插入从空表状态,依次建立各元素结点,并逐个插入head步骤:步骤:(1)找到单链表的末尾;)找到单链表的末尾;(2)将新结点插入。)将新结点插入。方法方法1:调用基本算法调用基本算法 建立链表;建立链表;使用基本算法使用基本算法:void InitList(&L);void ListInsert(&L
展开阅读全文