定义:线性表是指具有相同数据类型的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

顺序表总结:

线性表顺序存储结构特点:逻辑关系上相邻的两个元素在物理存储位置上也相邻;

优点:可以随机存取表中任一元素,方便快捷;

缺点:在插入或删除某一元素时,需要移动大量元素。

解决问题的思路:改用另一种线性存储方式: 链式存储