定义:线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列。
通常记为:(a1 , a2 , a3 , …… , an)
线性表抽象数据类型
它包括两个方面:
数据集合:{ a0, a1, … , an-1 } ai的数据类型为DataType
操作集合:(1)ListInitiate(L) 初始化线性表
(2)ListInsert(L,i,x) 插入数据元素
(3)ListLength(L) 求当前数据元素个数
(4)ListDelete(L,i,x) 删除数据元素
(5)ListGet(L,i,x) 取数据元素
……
线性表的操作:
1、初始化线性表InitList(L)
初始条件:表L不存在
操作结果:构造一个空的线性表
2、求线性表的长度LengthList(L)
初始条件:表L存在
操作结果:返回线性表中元素的个数
3、读取线性表中第i个数据元素 GetList(L , i)
初始条件:表L存在
操作结果:返回线性表L中的第i个元素的值或者地址
4、按值查找Search(L , x)
初始条件:表L存在,x是给定的元素
操作结果:返回L中首次出现的x的地址或者序号
插入、删除……
线性表的存储结构:顺序存储(顺序表)、链式存储(链表)
顺序存储:使用一组地址连续的存储单元依次存储线性表的各个数据元素。如数组
特点:
逻辑上相邻的数据元素,物理上也相邻
随机存取
用C语言描述:
typedef struct
{
DataType List[MaxSize];
int len;
}SeqList;
/* MaxSize表示数组的最大元素个数,list表示顺序表的数组名,size表示顺序表中当前存储的数据元素个数,
它必须满足size≤ MaxSize,SeqList是该结构体的名字。*/
常用基本操作:
修改、插入、删除、查找、排序
1、修改: 通过数组的下标便可访问某个特定元素并修改之。
核心语句: V[i]=x;
2、插入:在线性表(n个元素)的第i个位置前插入一个元素
步骤:
将第n至第i 位的元素向后移动一个位置;
将要插入的元素写到第i个位置;
表长加1。
注意:事先应判断: 插入位置i 是否合法?表是否已满?
核心语句:
for (j=n-1; j>=i; j--)
a[j+1]=a[ j ]; //元素后移一个位置
a[ i ]=x; //插入x
n++; //表长加1
3、删除:删除线性表的第i个位置上的元素
实现步骤:
将第i+1 至第n 位的元素向前移动一个位置;
表长减1。
注意:事先需要判断,删除位置i 是否合法?
核心语句:
for ( j=i+1; j<=n-1; j++ )
a[j-1]=a[j]; //元素前移一个位置
n--; //表长减1
顺序表总结:
线性表顺序存储结构特点:逻辑关系上相邻的两个元素在物理存储位置上也相邻;
优点:可以随机存取表中任一元素,方便快捷;
缺点:在插入或删除某一元素时,需要移动大量元素。
解决问题的思路:改用另一种线性存储方式: 链式存储