一、线性表总述
1.1 线性表的类型定义
线性表简单的说就是n个数据元素的有限序列。
特点:1. 存在唯一的一个被称为“第一个”的数据元素;2. 存在唯一的一个被称为“最后一个”的数据元素;3. 除第一个之外,集合中的每一个数据元素均只有一个前驱;4. 除最后一个之外,集合中每个数据元素均只有一个后继。
1.2 线性表的分类
按物理存储方式分为两大类:顺序表示和链式表示
二、线性表的顺序表示和实现
2.1 顺序表概念
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
特点:以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。
由于高级语言中的数组类型也有随机存取的特性,所有通常都用数组来描述数据结构中的顺序存储结构。
2.2 物理存储方式
线性表的顺序存储结构如下图:
2.3 插入和删除操作
插入操作:在第i(1<=i<=n)个元素之前插入一个元素时,需将第n至第i(共n-i+1)个元素向后移动一个位置。
删除操作:删除第i(1<=i<=n)个元素时需将从第i+1至第n(共n-i)个元素依次向前移动一个位置
三、线性表的链式表示和实现(链表)
3.1 线性链表
3.1.1 链式表概念
每个存储单元称为结点;其中存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域;指针域中存储的信息称为指针或链;n个结点(ai(1<=i<=n)的存储映像)链结成一个链表,即为线性表的链式存储结构。
3.1.2 物理存储方式
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。
链表:(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)
表示:
3.1.3 逻辑状态
通常我们把链表画成用箭头相链接的结点的序列,结点之间的箭头表示链域中的指针。
3.1.4 插入和删除操作
带头结点的单链表:有时,我们在单链表的第一个结点之前附设一个结点,称之为头结点。头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。
空表:
非空表:
插入或删除操作:在已知链表中元素插入或删除的确切位置的情况下,在单链表中插入或删除一个结点时,仅需修改指针而不需要移动元素。
插入(插入x结点):
删除(删除b结点):
3.1.5. 静态链表
数组的一个分量表示一个结点,同时用游标代替指针指示结点在数组中的相对位置,为了和指针型描述的线性链表相区别,我们给这种用数组描述的链表起名叫静态链表。
插入操作:
删除操作:
3.2 循环链表
循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
单循环链表:
非空表:
空表:
3.3 双向链表
以上讨论的链式存储结构的结点中只有一个指向直接后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。若要寻查结点的直接前趋,则需从表头指定出发。为克服单链表这种单向性的缺点,可利用双向链表。顾名思义,在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。
四、算法
1. 集合A=(1,2,4,6,7,8)和B=(2,3,5,6)将这两者集合合并成一个(有序非递减合并)。
实现方式:
从时间和空间的角度考虑:合并到第三个集合C内 或 在其中一个集合A或B基础上合并
从存储方式的角度考虑:顺序表 或 链式表 或 静态链表
从链表角度考虑:单向链表 或 双向链表
2. 线性表的具体应用:一元多项式表示和加减法。
A(x) = 7 + 3x + 9x8 + 5x17 和 B(x) = 8x + 22x7 – 9x8