数据结构第2章线性表单向链式存储.ppt
《数据结构第2章线性表单向链式存储.ppt》由会员分享,可在线阅读,更多相关《数据结构第2章线性表单向链式存储.ppt(39页珍藏版)》请在三一办公上搜索。
1、单链表:线性表的链接存储结构。存储思想:用一组任意的存储单元存放线性表的元素。,2.3 线性表的链接存储结构及实现,单链表,存储特点:逻辑次序和物理次序 不一定相同。2.元素之间的逻辑关系 用指针表示。,2.3 线性表的链接存储结构及实现,例:(a1,a2,a3,a4)的存储示意图,单链表,a10200,a20325,a30300,a4,2.3 线性表的链接存储结构及实现,单链表,数据域,指针域,单链表是由若干结点构成的;单链表的结点必须有一个指针域。,data:存储数据元素next:存储指向后继结点的地址,struct node ElemType data;struct node*next;
2、,2.3 线性表的链接存储结构及实现,如何申请一个结点?,s=new struct node;,s,s=new struct node;,2.3 线性表的链接存储结构及实现,s-data,如何引用数据元素?,如何引用指针域?,s-next,2.3 线性表的链接存储结构及实现,单链表,为了清楚起见,在讨论单链表的存储示意图时,通常将右图用下图表示。,2.3 线性表的链接存储结构及实现,单链表,头指针:指向第一个结点的地址。尾标志:终端结点的指针域为空。,2.3 线性表的链接存储结构及实现,单链表,空表和非空表不统一?如何将空表与非空表统一?,L中的地址值不相同,使L中的地址值相同,头结点:在单链
3、表的第一个元素结点之前附设一个类型相同的结点,以便空表和非空表处理统一,操作方便,2.3 线性表的链接存储结构及实现,带头结点的单链表,非空表,头结点,第一个结点,终端结点(尾结点),由于单链表的存储空间是动态分配的,只要记住头指针,就能对单链表操作,所以单链表的类型描述只要考虑结点类型和指向结点的指针类型。,单链表类型的描述,2.3 线性表的链接存储结构及实现,typedef struct node ElemType data;struct node*next;Node,*LinkList;其中:Node等价于struct node LinkList等价于struct node*,单链表的实
4、现按位查找,操作接口:int GetLinkList(LinkList L,int i,ElemType&x),核心操作(关键操作):工作指针后移。从第1个结点出发,通过工作指针的反复后移而将整个单链表“审视”一遍的方法称为扫描(或遍历)。,2.3 线性表的链接存储结构及实现,L,a1,a2,an,ai,1.工作指针p初始化;累加器j置1;,2.1 工作指针p后移;2.2 累加器j加1;,2.循环直到p为空或p指向第i个结点,3.若p为空,则第i个元素不存在,抛出查找位置异常;否则查找成功,返回结点p的数据元素;,2.3 线性表的链接存储结构及实现,单链表的实现按位查找,算法描述伪代码,int
5、 GetLinkList(LinkList L,int i,ElemType,2.3 线性表的链接存储结构及实现,单链表的实现按位查找,算法描述C描述,不能,错,对,int GetLinkList(LinkList L,ElemType x,LinkList,2.3 线性表的链接存储结构及实现,单链表的实现按值查找,算法描述C描述,L,a1,an,x,p,p,p,如果找到了,p指向某个存在的结点,反之p为空,单链表的实现插入,操作接口:int InsertLinkList(LinkList L,int i,ElemType x);,2.3 线性表的链接存储结构及实现,如何实现结点ai-1、x和
6、ai之间逻辑关系的变化?,算法描述:s=new Node;s-data=x;s-next=p-next;p-next=s;,插入位置的合理范围:1,n+1i=1 p指向头结点i=n+1 p指向尾结点,让p指向ai的直接前驱,注意分析边界情况表头、表尾。,单链表的实现插入,2.3 线性表的链接存储结构及实现,L,a1,an,ai,算法描述:s=new Node;s-data=x;s-next=p-next;p-next=s;,由于单链表带头结点,表头、表中、表尾三种情况的操作语句一致。,控制指针p移动的循环:while(p,j=0,j=n,当插入位置i合法,将指针变量移到第i-1个结点,j记住位
7、置i-1。移动p的条件是:p!=NULL&ji-1,算法描述伪代码,1.工作指针p初始化;累加器j清零;2.查找第i-1个结点并使工作指针p指向该结点;3.若查找不成功,说明插入位置不合理,抛出插入位置异常;否则,3.1 生成一个元素值为x的新结点s;3.2 将新结点s插入到结点p之后;,2.3 线性表的链接存储结构及实现,单链表的实现插入,int InsertLinkList(LinkList L,int i,ElemType x)p=L;j=0;while(p,2.3 线性表的链接存储结构及实现,算法描述C描述,单链表的实现插入,if(!p|ji-1)printf(“位置异常“);retu
8、rn 0;else/(p,,,基本语句?时间复杂度?,单链表的实现删除,操作接口:int DeleteLinkList(LinkList L,int i,ElemType,2.3 线性表的链接存储结构及实现,如何实现结点ai-1和ai之间逻辑关系的变化?,算法描述:q=p-next;x=q-data;p-next=q-next;delete q;,删除位置的合理范围:1,ni=1 p指向头结点i=n p指向尾结点的直接前驱,单链表的实现删除,2.3 线性表的链接存储结构及实现,算法描述:q=p-next;x=q-data;p-next=q-next;delete q;,注意分析边界情况表头、表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 线性 表单 链式 存储

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