线性表的顺序存储实现
引入
typedef struct LNode *List;
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
struct LNode L;
List 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;
}
查找
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;
}
- 查找成功的平均比较次数为==(n+1)/2==
- 平均时间性能为O(n)
插入
- 第i(1≤i≤n+1)个位置上插入一个值为X的新元素
- 先移动,再插入(空出位置)
- 从最后一个开始移动
- 从右往左
void Insert(ElementTypr 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){
PtrL->Data[j+1]=PtrL->Data[j];
}
PtrL->Data[i-1]=X;
PtrL->Last++;
return;
}
删除
- 删除表的第i(1≤i≤n)个位置上的元素
- 某处的元素删了=该处空了=其后的元素全部往前移动
- 从左往右
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->Data[j-1]=PtrL->Data[j];
}
PtrL->Last--;
return;
}
- 平均移动次数为==(n-1)/2==
- 平均时间性能为O(n)