线性表的链式存储结构.ppt
《线性表的链式存储结构.ppt》由会员分享,可在线阅读,更多相关《线性表的链式存储结构.ppt(47页珍藏版)》请在三一办公上搜索。
1、第5讲 线性表的 链式存储结构,主讲人:陈红丽,2.3 线性表类型的实现-链式映象,用一组地址任意的存储单元存放线性表中的数据元素。,一、单链表,以元素(数据元素的映象)+指针(指示后继元素存储位置)=结点(表示数据元素 或 数据元素的映象),以“结点的序列”表示线性表 称作链表,以线性表中第一个数据元素 的存储地址作为线性表的基地址,称作线性表的头指针,头结点,头指针,头指针,有时为了操作方便,在第一个结点之前附加一个“头结点”,令该结点中指针域的指针指向第一个元素结点,并令头指针指向头结点。通常称这类单链表为带头结点的单链表。,空指针,线性表为空表时,头结点的指针域为空,结点类型:Type
2、def struct LNode ElemType data;/数据域 struct Lnode*next;/指针域 LNode;,二、结点和单链表的 C 语言描述,单链表类型:Typedef LNode*LinkList;,若设 LNode*p,*q;LinkList H;则 p,q 和 H 均为以上定义的指针型变量。指针型变量只能作同类型的指针赋值与比较操作。指针型变量的“值”除了由同类型的指针变量赋值得到外,都必须用 C 语言中的动态分配函数得到。例如,p=new LNode;表示在运行时刻系统动态生成了一个 LNode 类型的结点,并令指针 p“指向”该结点。当指针 p 所指结点不再使
3、用,可用 delete p;释放此结点空间。,三、单链表操作的实现,GetElem(L,i,&e)/取第i个数据元素,ListInsert(&L,i,e)/插入数据元素,ListDelete(&L,i,&e)/删除数据元素,ClearList(&L)/重置线性表为空表,InitList(&L)/初始化,DestroyList(&L)/销毁线性表,操作 InitList(&L),链表是一个进行动态存储管理的结构,因此在初始化时不需要按照线性表实际所需最大容量进行预分配。,void InitList_L(LinkList&L)/创建一个带头结点的空链表,L 为指向头结点的指针/InitList,算
4、法时间复杂度:,O(1),L=new LNode;if(!L)exit(1);/存储空间分配失败L-next=NULL;,操作 DestroyList(&L)与ClearList(&L),void DestroyList_L(LinkList/DestroyList,算法时间复杂度:,O(ListLength(L),void ClearList_L(/ClearList,L所指结点的指针域内容赋值给L.即L指向L的后继结点.,p所指结点的指针域内容赋值给L的指针域。即L的指针域指向p的后继结点.,线性表的操作 GetElem(L,i,&e)在单链表中的实现:,j,1,2,3,因此,查找第 i
5、个数据元素的基本操作为:移动指针,比较指针所指元素的位序j 和 i,单链表是一种顺序存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。因此不论 i 值为多少,都必须从头结点开始起点数,直数到第 i 个为止。头结点可看成是第0个结点。,p 和 j 同步变化,始终保持指针 p 指向第j个结点,Status GetElem_L(LinkList L,int i,ElemType&e)/L是带头结点的链表的头指针,若1iLengthList(L),则用 e 带回第 i 个元素的值且返回函数值为TRUE,否则返回函数值为FALSE/GetElem_L,算法时间复杂度为:,O(List
6、Length(L),p=L-next;j=1;/p指向第一个结点,j为计数器,while(p/顺指针向后查找,直到 p 指向第 i 个元素或 p 为空,if(!p|ji)return FALSE;/第 i 个元素不存在e=p-data;/取得第 i 个元素return OK;,线性表的操作 ListInsert(&L,i,e)在单链表中的实现:,有序对 改变为 和,因此,在单链表中第 i 个结点之前进行插入的基本操作为:找到线性表中第i-1个结点,然后修改其指向后继的指针。,可见,在链表中插入结点只需要修改指针。但同时,若要在第 i 个结点之前插入元素,修改的是第 i-1 个结点的指针。,St
7、atus ListInsert_L(LinkList&L,int i,ElemType e)/L 为带头结点的单链表的头指针,本算法/在链表中第i 个结点之前插入新的元素 e/LinstInsert_L,算法的时间复杂度为:,O(ListLength(L),p=L;j=0;while(p/寻找第 i-1 个结点,if(!p|j i-1)return ERROR;/i 大于表长或者小于1,s=new LNode;/生成新结点if(s=NULL)return ERROR;s-data=e;s-next=p-next;p-next=s;/插入return OK;,s,p,线性表的操作ListDele
8、te(&L,i,&e)在单链表中的实现:,有序对 和 改变为,在单链表中删除第 i 个结点的基本操作为:找到线性表中第i-1个结点,修改其指向后继的指针。,q=p-next;p-next=q-next;e=q-data;delete(q);,p,q,Status ListDelete_L(LinkList&L,int i,ElemType&e)/删除以 L 为头指针(带头结点)的单链表中第 i 个结点/ListDelete_L,算法的时间复杂度为:,O(ListLength(L),p=L;j=0;while(p-next/寻找第 i 个结点,并令 p 指向其前趋,q=p-next;p-next
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 链式 存储 结构

链接地址:https://www.31ppt.com/p-6014161.html