首页 > 其他分享 >第三章 线性表

第三章 线性表

时间:2022-11-11 11:37:43浏览次数:35  
标签:结点 单链 第三章 线性表 next 链表 指针


一、线性表定义

线性表:零个或多个数据元素的有限序列。(零个的时候是空表)

线性表的特性是:除了第一个元素(只有后继)和最后一个元素(只有前驱),每个元素都只有一个前驱和后继。

二、线性表的抽象数据类型

线性表的抽象数据类型定义如下:

第三章 线性表_线性表

第三章 线性表_单链表_02

三、线性表的顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

来看线性表顺序存储结构代码:

第三章 线性表_线性表_03

发现描述顺序存储结构需要三个属性:

1.储存空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。

2.线性表的最大存储容量:数组长度MaxSize。

3.线性表的当前长度:length。

下面再讨论一下地址的计算方法:

第三章 线性表_算法_04

四、顺序存储结构的插入与删除

获得元素的操作:

第三章 线性表_算法_05

第三章 线性表_线性表_06

插入操作:

第三章 线性表_线性表_07

删除操作:

第三章 线性表_线性表_08

第三章 线性表_线性表_09

线性表的顺序存储结构的优缺点:

优点:1.无需为表示表中元素之间的逻辑关系而增加额外的存储空间2.可以快速地存取表中任一位置的元素。

缺点:1.插入和删除操作需要移动大量元素2.当线性表长度变化较大时,难以确定存储空间的容量3.造成存储空间的碎片。

五、线性表的链式存储结构

n个节点链结成一个链表,即为线性表的链式存储结构,因为此链表的每一个节点中只包含一个指针域,所以叫做单链表。

第三章 线性表_链表_10

把链表中第一个节点的存储位置叫做头指针,最后一个节点指针为空。

第三章 线性表_单链表_11

一般为了方便对链表进行操作,会在单链表的第一个结点前附设一个结点,成为头结点。头结点的数据域可以不保存任何信息

 

头指针和头结点的异同:

头指针是指向头结点的指针;头指针具有标识作用,所以常用头指针冠以链表的名字;无论链表是否为空,头指针均不为空。头指针是链表的必要元素。

头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(也可以存放链表的长度);有了头结点,对在第一个元素结点前插入结点和删除第一结点,其操作与其他结点的操作就统一了;头结点不一定是链表的必须元素。

第三章 线性表_线性表_12

结点的概念:结点由存放数据元素的数据域存放后继结点的指针域组成。

假设P是指向线性表的第i个元素的指针,则该节点aI的数据域我们可以用p->data来表示,p->data的值是一个数据元素,结点aI的指针域可以用p->next来表示,p->next的值是一个指针。如果p->data=ai,那么p->next->data=aI+1。即:

第三章 线性表_线性表_13

六、单链表的读取

第三章 线性表_链表_14

第三章 线性表_单链表_15

由上面程序看出来,获取链表获取第i个元素比较麻烦。

七、单链表的插入与删除

插入结点:

第三章 线性表_线性表_16

删除结点:

第三章 线性表_数据结构_17

由算法可以看出,插入和删除对于链表来说每次只需要简单地通过赋值移动指针而已,时间复杂度都是O(1),显然,对于插入和删除数据越频繁的操作,单链表的效率优势就越是明显。

八、单链表的整表创建

头插法:

第三章 线性表_算法_18

第三章 线性表_单链表_19

尾插法:

第三章 线性表_算法_20

第三章 线性表_算法_21

九、单链表的整表删除

第三章 线性表_算法_22

十、单链表结构与顺序存储结构优缺点

第三章 线性表_单链表_23

十一、循环链表

将单链表的终端结点的指针端由空指针改为指向头结点,就使整个单链表形成了一个环,这种头尾相连的单链表称为单循环链表,简称循环链表。

第三章 线性表_算法_24

下面研究一下循环链表的合并:

第三章 线性表_数据结构_25

分成4步:

1.p=rearA->next;

2.rearA->next=rearB->next->next;

3.rearB->next=p;

4.free(p).

十二、双向链表

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

第三章 线性表_数据结构_26

双向链表插入操作:

第三章 线性表_单链表_27

同样也分成4步:

1.s->prior=p;

2.s->next=p->next;

3.p->next->prior=s;

4.p->next=s.

双向链表的删除操作:

第三章 线性表_数据结构_28

分成3步:

1.p->prior->next=p->next;

2.p->next->prior=p->prior;

3.free(p).

十三、总结

第三章 线性表_链表_29

标签:结点,单链,第三章,线性表,next,链表,指针
From: https://blog.51cto.com/u_15866446/5843747

相关文章

  • 数据结构:线性表
    线性表分类区别​顺序表一般是使用数组存储的,存储空间是连续的;​链式表一般是使用指针,将一个个结点联系起来。结点有数据域和指针域,数据域用来存储数据,指针域用......
  • 【重识云原生】第三章云存储3.2节——SPDK方案综述
     《重识云原生系列》专题索引:第一章——不谋全局不足以谋一域第二章计算第1节——计算虚拟化技术总述第二章计算第2节——主流虚拟化技术之VMareESXi第二章计算第3节......
  • 操作系统学习笔记——第二章 进程管理 和 第三章 死锁
    在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。参考书:《操作系统》谌卫军等,清华大学出版社,2012年......
  • 操作系统学习笔记——第三章 死锁和第四章 存储管理
    在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。参考书:《操作系统》谌卫军等,清华大学出版社,2012年......
  • 数据结构学习笔记——线性表
    参考书目:《王道论坛之数据结构联考复习指导》在学习数据结构部分时对线性表的结构特别困惑,所以总结了笔记,并分享出来,特别是蓝色和红色字体。转载请注明出处。 重点难点:一、......
  • 第三章、react高级
    目录七、setState详细解析和React性能优化1、setState异步更新2、setState同步更新3、setState数据的合并4、setState本身的合并5、React更新机制6、列表中keys的作用7、re......
  • 1 线性表
    1.线性表(list):零个或多个数据元素的有限序列2.线性表的顺序存储结构优点:(1)无须为表示表中元素之间的逻辑关系而增加额外存储空间;(2)可快速存取表中任一位置元素缺点:(1)......
  • 第三章:MyBatis框架Dao代理-动态代理简化代码
    第三章:MyBatis框架Dao代理内容列表◼Dao接口动态代理◼参数传递◼处理查询结果◼like和主键1Dao代理实现CURD1.1去掉Dao接口的实现类1.2getMapper......
  • API网关第三章-分治处理会话流程
    API网关第三章-分治处理会话流程一、前言这一章所做的就是让职责更加分明,Netty服务端只负责接受网络连接调用Session,Session单独拿出来去处理具体的调用逻辑。二、......
  • 【重识云原生】第三章云存储第一节——分布式云存储总述
     最新文章欢迎关注笔者公众号“畅游云海”  《重识云原生系列》专题索引:第一章——不谋全局不足以谋一域第二章计算第1节——计算虚拟化技术总述第二章计算第2节—......