什么是线性表
“线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构
- 表中元素个数称为线性表的长度
- 线性表没有元素时,称为空表
- 表启始位置称表头,表结束位置称表尾
线性表的抽象数据类型描述
- 类型名称:线性表(List)
- 数据对象集:线性表是n(>=0)个元素构成的有序序列(a1,a2,...,an)
- 操作集:线性表L∈List,整数i表示位置,元素X∈ElementType,
- ListMakeEmpty():初始化一个空线性表L;
- ElementType FindKth(int K,List L):根据位序K,返回相应元素;
- int Find(ElementType X,List L)在线性表L中查找X的第一次出现位置;
- void Insert(ElementType X,int i,List L):在位序i前插入一个新元素X;
- void Delete(int i,List L):删除指定位序i的元素;
- int Length(List L):返回线性表L的长度n;
线性表的顺序存储实现
- 利用数组的连续存储空间顺序存放线性表的各元素
-
typedef struct LNode *List; // 将结构体的指针类型定义为List struct LNode{ ElementType Data[MAXSIZE]; int Last; }; struct LNode L; // 定义结构体,名为L List PtrL; // 定义结构体的指针变量Ptrl
-
访问小标为i的元素:L.Data[i]或Ptrl->Data[i]
-
线性表的长度:L.Last+1或Ptrl->Last+1
- 主要操作的实现
- 初始化(建立空的顺序表)
List MakeEmpty()
{
List Ptrl;
Ptrl = (List)malloc(sizeof(struct LNode));
Ptrl->Last = -1;
return Ptrl;
}
2.查找(查找成功的平均比较次数为(n+1)/2,平均时间性能为O(n))
int Find(ElementType X, List Ptrl)
{
int i=0;
while (i<=Ptrl->Last && Ptrl->Data[i]!=X)
i++;
if (i>Ptrl->Last)
return -1;
else
return i;
}