数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)

本文主要参考书籍为《大话数据结构》第三章,线性表

目录

一、定义

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

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

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

1、单链表的基本原理和操作

3、单链表的整表删除

4、单链表与顺序存储结构对比

5、静态链表

6、循环链表


一、定义

元素间是有顺序的;每一个元素都只有一个前驱或后继(第一个和最后一个除外)。

n表示线性表的长度。当n=0时称为空表。

 

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

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第1张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第2张图片

 

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

三个最重要的属性是:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第3张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第4张图片

线性表的长度小于等于数组的长度。

1)顺序存储结构的插入操作

 

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第5张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第6张图片

2)顺序存储结构的删除结构 

 

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第7张图片

 

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第8张图片

3)插入、删除和存取数据的时间复杂度

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第9张图片

4)顺序存储结构的优缺点

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第10张图片

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

1、单链表的基本原理和操作

顺序存储结构最大缺点的原因:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第11张图片

链式存储结构的思路:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第12张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第13张图片

以前在顺序结构中,每个数据元素只需要存数据元素苏信息就可以了。现在链式结构中,除了要存数据元素信息外,还要存储它的后继元素的存储地址。

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第14张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第15张图片

有时我们会在链表的第一个节点前加头结点,头结点的数据域可以不存储任何信息,也可以存储如下图所示的附加信息:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第16张图片

其与头指针的区别如下:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第17张图片

空表的头节点的指针域为空:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第18张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第19张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第20张图片

(1)链表的读取

在单链表中,第i个元素到底在哪里,我们没有办法一上来就知道,必须从头开始找:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第21张图片

(2)链表的插入

这两句的顺序一定不能错:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第22张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第23张图片

(3)链表的删除

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第24张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第25张图片

(4)总结一下链表的插入和删除

都是由这两步组成的:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第26张图片

2、单链表的整表创建
数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第27张图片
整表创建思路:
1)头插法
数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第28张图片
数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第29张图片
2)尾插法

3、单链表的整表删除

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第30张图片

4、单链表与顺序存储结构对比

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第31张图片

5、静态链表

早期的编程语言没有指针,如何实现单链表?

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第32张图片

(cur为cursor游标的简写)

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第33张图片

举个例子:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第34张图片

1)静态列表的插入操作

静态列表不存在动态列表的结点申请(malloc函数)和释放(free函数)。

         数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第35张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第36张图片

2)静态列表的删除操作

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第37张图片

3)静态列表的优缺点

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第38张图片

6、循环链表

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第39张图片

空循环链表的结构:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第40张图片

非空循环链表的结构:

         数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第41张图片                 7、双向链表

双向链表是在单链表的每个结点中,再设置有一个指向其前驱结点的指针域(所以双向链表有两个 指针域)。

双向链表也可以是循环表,空表如下图:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第42张图片

非空表如下图:

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第43张图片

数据结构学习笔记(3)—— 线性表(顺序存储结构与链式存储结构)_第44张图片

 
 

你可能感兴趣的:(数据结构)