数据结构——线性表
1.定义
“线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构
-
表中元素个数称为线性表的长度
-
线性表没有元素时,称为空表
-
表起始位置称表头,表结束位置称表尾
线性表的抽象数据类型描述
类型名称:线性表(List)
数据对象集:线性表是n(>=0)个元素构成的有序序列(a1,a2, …,an)
操作集:线性表L属于List,整数i表示位置,元素X属于ElementType
线性表基本操作主要有:
1、ListMakeEmpty():初始化一个空线性表L;
2、ElementType FindKth(int K,List L):根据位序K,返回相应元素;
3、int Find(ElementType x,List L):在线性表L中查找x的第一次出现位置;
4、void Insert(ElementType X,int i,List L):在位序i前插入一个新元素X;
5、void Delete(int i,List L):删除指定位序i的元素;
6、int Length(List L):返回线性表L的长度n。
2.线性表的顺序存储实现
利用数组的连续存储空间顺序存放线性表的各元素
typedef struct LNode* List;
struct LNode
{
ElementType Date[MAXSIZE];
int Last;
};
struct LNode L;
List Ptrl;
访问下标为i的元素:L.Data[i]或PtrL->Data[i]
线性表的长度:L.Last+1或PtrL->Last+1
主要操作的实现
1.初始化
List MakeEmpty()
{
List Ptrl;
Ptrl = (List)malloc(sizeof(struct LNode));
Ptrl->Last = -1;
return Ptrl;
}
2.查找
int Find(ElementType X, List Ptrl)
{
int i = 0;
while (i<=Ptrl->Last && Ptrl->Date[i]!=X)
i++;
if (i > Ptrl->Last) return -1;
else return i;
}
3.插入
void Insert(ElementType X, int i, List Ptrl)
{
int j;
if (Ptrl->Last==MAXSIZE-1)
{
printf("表满");
return;
}
if (i<1 || i>Ptrl->Last+2)
{
printf("位置不合法");
return;
}
for (j = Ptrl->Last; j >= i - 1; j--)
Ptrl->Date[j + 1] = Ptrl->Date[j];
Ptrl->Date[i - 1] = X;
Ptrl->Last++;
return;
}
4.删除
void Delete(int i, List Ptrl)
{
int j;
if (i<1 || i>Ptrl->Last+1)
{
printf("不存在第%d个元素", i);
return;
}
for (j = i; j <= Ptrl->Last; j++)
Ptrl->Date[j - 1] = Ptrl->Date[j];
Ptrl->Last--;
return;
}