线性表(Linear List):由同类型数据元素构成有序序列的线性结构
表中元素个数称为线性表的长度,线性表没有元素时称为空表,表起始位置称为表头,表结束位置称表尾
线性表的抽象数据类型描述
类型名称:线性表(list)
数据 对象集:线性表时n(>=0)个元素构成的有序序列(a1,a2,....an)
操作集:线性表L属于LIST,整数i表示位置,元素X属于ElemetTYpe,线性表基本炒作主要有:、
1、List MakeEmpty():初始化一个空线性表L;
2、ElementType FindKth (int K,List l):根据位序K,返回相应元素;
3、int Find(ElementType X,List L);在线性表L中查找X的第一个出现位置;
4、void inset(ElementTyoe X,int i,List L):在为序i前插入一个新元素X;
5、void Delete(int i,List L);删除指定位序i的元素;
6,int Lengh(List l);返回线性表L的长度n
线性表的顺序存储实现:利用数组的连续存储空间顺序存放线性表的各元素
1、初始化(建立空的顺序表)
List MakeEmty()
{
List Ptrl;
prtl=(list)malloc(sizeof(struct LNode)); /*malloc在内存中找一片指定大小的空间*/
Ptrl->Last=-1
return PtrL;
}
2、查找
int Find(ElementType X,List Ptrl)
{
int i=0;
while(i<=Ptrl->Last&&Ptrl->Data[i]!=X)
i++;
if(i>Ptrl->Last) return -1; /*如果没有找到,返回-1*、
else retun i; /*找到后返回的时存储位置*/
}
3、插入(第i(1<i<n+1)个位置上插入一个值为X的新元素)
void Insert(Elementype X,int i,List Ptrl)
{
int j;
if(Ptrl->Last==MAXSIZE-1) /*表空间已满,不能插入*/
{
print("表满");
retrun;
}
if(i<1&&i>Ptrl->Last+2) /*检查插入位置的合法性*/
{
print("位置不合法");
return;
}
for(j=Ptrl->Last;j>=i-1;j--)
Ptrl->Data[j+1]=Ptrl->Data[j]; /*将ai-an倒序向后移动*/
Ptrl->Data[i-1]=X; /*新元素插入*/
Ptrl->Last++; /*Last仍指向最后元素*/
return;
}
4、删除 (删除表的第i(1<i<n)个位置上的元素)
void Delet(int i,List Ptrl)
{
int j;
if(i<1||i>Ptrl->Last+1) /*检查空表及删除位置的合法性*/
{
print("不存在第%d个元素",i);
return;
}
for(j=i;j<=Ptrl->Last;j++)
Ptrl->Data[j-1]=Ptrl->Data[j]; /*将ai+1~an顺序向前移动*/
Ptrl->Last--; /*Last仍指向最后元素*/
return;
}