@[toc]
目录
#线性表
由同类型元素构成有序序列的线性结构
空表:没有元素的线性表
表头:表起始位置,表尾:表结束位置
用抽象数据类型描述线性表
抽象数据类型包含两个要素:该类型所包含的数据对象集;在该对象集上能进行什么操作
类型名称:线性表
数据对象集:线性表是n(n>=0)个元素构成的有序序列
操作集:线性表L属于List,整数t表示位置,元素A属于ElementType(可以为整型,结构...),线性表的基本操作有:
(1)List MakeEmpty():初始化空线性表 L
(2)ElementType FindKth(int K,List L):在表L中找位序为K的元素
(3)int Find(ElementType A,List L):在线性表L中查找A第一次出现的位置
(4)void Insert(ElementType A,int t,List L):在位序t前插入一个新元素A
(5)void Delete(int t,List L):删除指定位序t的元素
(6)int Length(List L):返回线性表L的长度n
#线性表的存储
#1.线性表的顺序存储实现
利用数组的连续存储空间顺序存放线性表的各元素
#(1)建立空的顺序表
List MakeEmpty()//初始化
{
List PtrL;
PtrL=(List)malloc(sizeof(struct LNode));//申请结构,建表
PtrL->Last=-1;//Last,最后一个元素,-1表示当前为空(没有元素),若0,表示有一个元素放在第一个位置
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;//退出循环原因一,i>last.原因二,找到X对应位置,所以这里帮助我们知道原因,(返回-1表示未找到)
else return i;
}
# (3)插入
在第i(i<=i<=n+1)位置上插入一个值为X的新元素
先把该挪动的元素向后移动,再插入要插入的元素
void Insert(ElmentType X,int i,List PtrL)//把X插在表PtrL的第i个位置
{
int i;
if(PtrL->Last==MAXSIZE-1)//判断表是否已满,MAXSIZE是数组的大小,数组下标从0开始
{
printf("表(空间)已满");
return;
}
if(i<1||i>PtrL->Last+2)//判断插入的位置是否在1与n+1之间
{
printf("位置不合法");
return;
}
for(j=PtrL->Last;j>=i-1;j--)
PtrL->Data[j+1]=PtrL->Data[j];//将第i个位置及其之后的元素倒序向后移动,为新元素的插入腾出位置
PtrL->Data[i-1]=X;
PtrL->Last++;
return;
}
# (4)删除
删除表的第i个位置上的元素
i位置空出,需要把i后的元素向前移
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++)//将i+1及其以后的元素向前移,从i+1开始移
PtrL->Data[j-1]=PtrL->Data[j];
PtrL->Last--;
return;
}