收藏 分享(赏)

第四讲+链表(一).ppt

上传人:j35w19 文档编号:4727905 上传时间:2019-01-09 格式:PPT 页数:17 大小:82.50KB
下载 相关 举报
第四讲+链表(一).ppt_第1页
第1页 / 共17页
第四讲+链表(一).ppt_第2页
第2页 / 共17页
第四讲+链表(一).ppt_第3页
第3页 / 共17页
第四讲+链表(一).ppt_第4页
第4页 / 共17页
第四讲+链表(一).ppt_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、2、3 线性表的链式表示和实现线性表的顺序存储结构的特点是逻辑关系 上相邻的两个元素在物理位置上也相邻,还可 以随机存取任一元素。弱点是在作插入或删除 操作时,需移动大量元素。为了弥补线性表顺序存储结构带来的不 足,这一节将讨论线性表的另一种存储方式,第四讲 链 表,链式存储结构,这种存储结构不要求逻辑上 相邻的数据元素在物理位置上也相邻,仅用 指针来表示数据元素之间的逻辑关系。链式存储结构克服了顺序存储结构的弱 点,但同时也失去了顺序存储结构简单、易 于实现、节省空间、可随机存取的优点。采用链式存储结构存储的线性表简称为 链表。链表是用一组任意的存储单元来存储 线性表结点的方式。,一、单链表

2、线性表的链式存储结构是用一组任意的存 储单元来存储线性表的各个数据元素。每个元 素除需要存储自身的信息外,还需要存储一个 指示其直接后继的信息。这两部分信息组成了 一个数据元素的存储结构,称为结点。每个结点包含两个域:数据域和指针域。结 点的结构如下:,线性表的n个数据元素对应的n个结点通过 链接方式链接成一个链表,即为线性表的链式 存储结构,又称为链接表。当链接表中的每个 结点只含有一个指针域时,则称为线性单向链 接表,简称单链表。设一个线性表为 A=(a1,a2,ai,ai+1,an)用单链表表示,则对应的存储结构是 head,线性链表可以由一个称为头指针的head来 标明线性链表的首地址

3、,当链表为空时,有 head=NULL。这样线性链表可以由头指针唯 一确定。链表中任意结点的存储地址都可以从head 开始,经过对链表进行扫描得到。单链表中 最后一个结点没有直接后继,它的指针域为 空NULL。有时为了算法的需要,需在单链表第一个 结点之前附加一个结点,称为头结点。,头结点的数据域可不存储任何信息,头结 点的指针域存储指向第一个结点的指针,头指 针指向头结点。head 用线性链表表示线性表时,数据元素之间的 逻辑关系是通过结点中的指针反映出来的。即 指针是数据元素之间逻辑关系的映像,逻辑上,相邻的两个数据元素其物理位置不要求相邻, 这种存储结构称为非顺序映像或链式映像。 线性表

4、的单链表存储结构描述如下:#define LEN sizeof(struct node) struct node elemtype data;struct node *next;typedef struct node *Link;,二、单链表的基本操作1、查找操作按给定值查找元素是在单链表L中查找是 否存在和给定值 x相同的结点,若有,则返回 x在单链表L中的位序,若无,返回NULL。具体算法如下:int locate(Link head , elemtype x) int i=1;Link p;p=head;,while(p-next!=NULL,2、插入操作在 p指针所指结点之后插入 x,

5、 首先生成一个新结点 x,并修改它的指针完成插入。p ps修改指针的语句为:s-next=p-next;p-next=s;,(1) 后插操作在 p指针所指结点之后插入 x的具体算法:void insert_after(Link p,elemtype x) Link s;s=(struct node*)malloc(LEN);s-data=x;s-next=p-next;p-next=s;算法的时间复杂度为O(1)。,(2) 前插操作在 p指针所指结点之前插入 x,需确定前驱结点的位置q,可从链表头起进行查找。具体算法如下:void insert_before(Link head , elemt

6、ype x) Link s,q;s=(struct node*)malloc(LEN);s-data=x;q=head;,while (q-next!=p)q=q-next; /查找q的位置/s-next=p;q-next=s; 因前插操作的执行时间与 p的位置有关,在等概率假设下,算法的平均时间复杂度为O(n)。,3、删除操作删除 p指针所指的结点,需修改p的前驱的指针域,同时释放被删除结点。修改指针的语句为:q-next=p-next;或 q-next=q-next-nextq p q p,具体算法如下:void delete(Link head,Link p) Link q;q=head;while (q-next!=p)q=q-next;q-next=p-next;free(p);此算法的时间复杂度为O(n)。,4、建立单链表建立单链表操作是指建立一个由head指向 的长度为n的单链表,假设单链表的元素依次 存放在一维数组an中,为使次序相同,需从 数组的最后一个元素an-1开始插入,最后插 入a0。具体算法如下:void initlist() Link s;head=NULL;i=n-1;,while(i=0) s=(struct node*)malloc(LEN);s-data=ai;s-next=head;head=s; i-;此算法的时间复杂度为O(n)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报