线性表
2022-04-04-16:59:28
什么是线性表????
多项式表示问题启示:
1.同一个问题可以有不同的表示形式
2.有一类共性问题:有序线性序列的组织和管理
线性表:由同类型数据元素构成有序序列的线性结构
表中元素个数为线性表的长度
线性表没有元素时,为空表
表起始位置为表头,结束位置为表尾
/*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->Data[i] != X)
i++;
if(i > PtrL->Last) return -1;/*如果没有找到,返回-1*/
else return i;/*找到后返回的是存储位置*/
}
/*3.插入(第i(1<i<n+1)个位置上插入一个值X的新元素)*/
/*先移动,在插入*/
void Insert(ElementType X,int i,List PtrL)
{ int j;
if(PtrL->Last == MAXSIZE-1)
{
/*表空间已满,不能插入*/
printf("表满");
return;
}
if(i<1||i>PtrL->Last+2)
{
/*检查插入位置的合法性*/
print("位置不合法");
return:
}
for ( j=PtrL->Last;j>=i+1;j--)
PtrL->Data[j+1] = PtrL->Data[j];/*将i到n倒序向后移动*/
PtrL->Data[i-1] = X;/*新元素插入*/
PtrL->Last++;/*Last任指向最后元素*/
return:
}
/*4.删除元素*/
viid 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->Data[j-1]=PtrL->Data[j];/**将i+1到n顺序向前移/
PtrL->Last--;/**PtrL任指向最后元素/
return;
}
线性表的链式存储及实现:
不要求逻辑上相邻的两个元素物理上也相邻
插入删除不需要移动数据元素
/*1.求表长*/
int Length(List PtrL)
{ List p = PtrL;/*p指向表的第一个结点*/
int j = 0;
while(p){
p = p->Next;
j++;/*当前p指向的是第j个结点*/
}
return j;
}