数据结构:线性表

一、线性表的定义
线性表是零个或者多个数据元素的有限序列。
1.元素之间存在顺序,除头和尾以外的元素都有且只有一个前驱和后驱;
2.元素是有限的。

二、线性表的顺序结构
线性表的顺序结构指的是用一段地址连续的储存单元依次存储线性表的数据元素。
三个属性
1.储存空间的起始位置;
2.线性表的最大存储容量;
3.线性表的当前长度。
如下图这个数组:
在这里插入图片描述
插入操作:在线性表的第i个位置上插入新元素E,则i下标的元素变为E,E及E以后的元素下标加1,表长加一;
删除操作:在线性表的第i个位置上删除元素E,E以后的元素下标减1,表长减1;
优点:1.无需为表中的元素之间的逻辑关系而增加额外空间;2.存取表中任一元素较快。
缺点:1.插入或删除操作需要移动大量元素;2.储存容量难以确定;3.易造成储存空间的碎片化。

三、线性表的链式结构
为了解决顺序结构中插入或删除操作需要移动大量元素的缺陷,提出了链式结构。
为了表示每个数据元素与其之间后继元素之间的逻辑关系,除了储存该元素本身的信息(数据域)以外,还需要存储一个指示其直接后继结点的信息(指针域),这两部分信息组成数据元素的存储映像,称为结点。n个结点链接成一个链表,即为线性表的链式存储结构,因为此链表中的结点指包含一个指针域,所以叫单链表
链表中的第一个结点的存储位置叫做头指针,最后一个结点指针为空。为了方便操作,绘在单链表的第一个结点前附设一个结点,称为头结点,头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向第一个结点的指针。
在这里插入图片描述
读取单个元素时,从头开始依次寻找,直到找到所需要的元素。
插入操作:例如要将s结点插入到p结点后,则先让p的后继结点改成s的后继结点,再把结点s变成p的后继结点。
在这里插入图片描述
删除操作:例如要删除q结点,就是让p的后继的后继结点变成p的后继结点,释放结点q。
在这里插入图片描述
存储结构的优点可以看到在于插入和删除操作,缺陷在于读取操作。

单链表的整表创建
1.声明一个结点p和计数器变量i;
2.初始化一空链表L;
3.让L的头结点的指针指向NULL,建立一个带头结点的单链表;
4.循环:
生成一个新结点赋值给p,赋值给p的数据域,将p插入到头结点与前一新结点之间或终端结点后(尾插法)。

单链表的整表删除
1.声明一个结点p和q;
2.将第一个结点赋值给p;
3.循环:
将下一个结点赋值给q,释放p,将q赋值给p。

静态链表:在数组中的元素都由两个数据域构成,数据域data用来存放数据,数据与cur用来存放next指针,对于新增或者删除元素,不更改其在数组中的位置,只修改data与cur。

循环链表:将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,称为循环链表。

双向链表:在单链表的每个结点中,再设置一个指向其前驱结点的指针域,称为双向链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值