数据结构单链表.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构单链表.ppt》由会员分享,可在线阅读,更多相关《数据结构单链表.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章 线性表链表单链表定义定义特点特点C C描述描述基本形态基本形态基本操作实现基本操作实现一组数据项的集合,其中每个数据项都是一个结点的一部分,每个结点都包含指向下一个结点的链接(即指针指针)。1.数据元素在“逻辑逻辑关系上的相邻相邻”用“指针指针”来表示。2.单链表 中访问数据元素时需从头开始“顺序访问顺序访问”。3.比顺序表的优势在于,提供高效地重排重排数据项的能力。a1a2a3a4anL单链表的C描述 typedef struct LNode ElemType data;/数据域 struct LNode *next;/指针域 LNode,*LinkList;LinkList L;/
2、L/L 为单链表的头指针为单链表的头指针头指针指向单链表中的第一个结点第一个结点用指针表示链接,用结构体表示结点,结点是由数据项和用指针表示链接,用结构体表示结点,结点是由数据项和链接组成的,链接是指向下一结点的指针。链接组成的,链接是指向下一结点的指针。单链表的基本形态空表空表非空表非空表为了操作方便,在第一个结点之前虚加一个为了操作方便,在第一个结点之前虚加一个“头结点头结点”哑元结点哑元结点LL-next=NULL;不允许删除操作不允许删除操作a1a2a3anL可以进行插入、删除操作可以进行插入、删除操作单链表基本操作1、初始化(动态分配)Stutas InitList(LinkList
3、&L)L=(LinkList)malloc(sizeof(LNode);if(!L)exit(overflow);L-next=NULL;return OK;L头结点头结点L211830754256pppj1 2 3单链表基本操作2、取单链表中指定位序的数据元素演示例子:取单链表中第3个元素值取元素的基本操作单链表是一种单链表是一种“顺序访问顺序访问”的结构,为找第的结构,为找第 i i 个数据个数据元素,必须先找到第元素,必须先找到第(i-1 i-1)个数据元素。个数据元素。1.1.指针指针p p始终指向单链表中第始终指向单链表中第j j个结点;个结点;2.2.移动指针,比较移动指针,比较
4、j j 和和 i i,相等则找到。,相等则找到。Status GetElem_L(LinkList L,int i,ElemType&e)/L是是带头结点的点的链表的表的头指指针,以,以 e 返回第返回第 i 个元素个元素/GetElem_L算法算法时间复杂度时间复杂度为为:O(ListLength(L)p=L-next;j=1;/p p指向第一个指向第一个结点,点,j j为计数器数器while(p&jnext;j+;/顺指指针向后向后查找,直到找,直到pp指向第指向第ii个元素个元素/或或pp为空空if(p&j=i)e=p-data;return OK;/取得第 i 个元素else/第 i
5、个元素不存在 return ERROR;与顺序表相比,链表不适合与顺序表相比,链表不适合于查找第于查找第i i个元素的操作。个元素的操作。单链表基本操作3、插入(在第i个元素前插入e)单链表中:ai-1 有序对有序对 改变为改变为 和和 eaiai-1在单链表中在单链表中插入结点插入结点只需要只需要修改指针修改指针。若要在第。若要在第 i i 个结点之前个结点之前插入元素,修改的是第插入元素,修改的是第(i-1)(i-1)个结点的指针。个结点的指针。Status ListInsert_L(LinkList&L,int i,ElemType e)/L 为带头结点的点的单链表的表的头指指针,本算法
6、,本算法 /在在链表中第表中第i 个个结点之前插入新的元素点之前插入新的元素 e /LinstInsert_L算法的算法的时间复杂度时间复杂度为:O(ListLength(L)else return ERROR;p=L;j=0;while(p&j next;+j;/寻找第寻找第(i-1)个结点个结点if(p&j=i-1)s=(LinkList)malloc(sizeof(LNode);/生成新结点s-data=e;s-next=p-next;p-next=s;/插入return OK;eai-1aiai-1sp有序有序对 和和改改变为 ai-1aiai+1ai-1单链表基本操作4、删除(第i个
7、元素)在单链表中在单链表中删除第删除第 i i 个结点个结点时,要找到单链表中第时,要找到单链表中第(i-1i-1)个结点,个结点,修改其指向后继的指针。修改其指向后继的指针。ai-1aiai+1ai-1q=p-next;p-next=q-next;e=q-data;free(q);pq Status ListDelete_L(LinkList&L,int i,ElemType&e)/删除以 L 为头指针(带头结点)的单链表中第 i 个结点 /ListDelete_L算法的算法的时间复杂度时间复杂度为:O(ListLength(L)p=L;j=0;while(p-next&j next;+j;
8、/寻找第 i-1 个结点,并令 p 指向它。if (p-next&j=i-1)q=p-next;p-next=q-next;/删除并释放结点e=q-data;free(q);return OK;else return ERROR;/删除位置不合理对比单链表和顺序表的基本操作插入和删除的简单性是链表存在的理由插入和删除的简单性是链表存在的理由只修改相关结点的指向保持链表特性单链表的访问方式是顺序访问单链表的访问方式是顺序访问查找第i个数据项的代价,沿着链表,一个一个结点地访问,直到找的这个数据项算法时间复杂度:O(ListLength(L)单链表基本操作5、清空while(L-next)p=L-
9、next;L-next=p-next;free(p);算法时间复杂度:O(ListLength(L)单链表基本操作6、销毁while(L)p=L-next;free(L);L=p;单链表基本操作7、判空if(L-next=NULL)return TRUE;else return FALSE;8、求表长int ListLength(LinkList L)p=L-next;i=0;while(p)i+;p=p-next;return i;单链表基本操作9、搜索(查找元素)p=L-next;i=1;while(p&p-data!=e)p=p-next;i+;if(p)return i;else re
10、turn 0;从第一个结第一个结点点开始搜索搜索成功,返回搜索成功,返回位序位序;否则,返回否则,返回0 0单链表的应用1.建立单链表链表是一个动态结构,它不需要预分配空间,因此生成链表是一个动态结构,它不需要预分配空间,因此生成链表的过程是链表的过程是一个结点一个结点“逐个插入逐个插入”的过程。的过程。逆序建立单链表逆序建立单链表顺序建立单链表顺序建立单链表新结点新结点插入在头插入在头结点的结点的后面,作为重排链表后后面,作为重排链表后的的第一个结点第一个结点新结点新结点插入在尾插入在尾结点的结点的后面,作为重排链表后后面,作为重排链表后的的最后一个结点最后一个结点逆序建立单链表操作步骤操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 单链表
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内