#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
// 注意:顺序表不存在头节点下标0要插入。有MaxSize定义最大长度,有Length定义当前长度,有data存放数据。
// 静态分配
typedef struct{
int data[MaxSize]; // 该顺序表是固定元素的组数。也可以构造一个其它结构体类型数组,对应于书上-ElemType
int Length; // 插入一个元素记一个
}SqList;
void InitList(SqList *L){
L->Length=0;
}
// 插入一个元素需要移动节点平均数为n/2
int ListInsert(SqList *L,int loc,int e){
int j;
if(loc<1||loc>L->Length+1) return 0; // 判空判满-预留1个空位以备往后移动
if(L->Length>=MaxSize) return 0;
for(j=L->Length;j>=loc;j--) // 定位到当前长度的最后一个,依次往后移动
L->data[j]=L->data[j-1];
L->data[loc-1]=e; // 插入元素
L->Length++; // 记得更新长度
return 1;
}
int ListDelete(SqList *L,int loc,int *e){
int i;
if(loc<1||loc>L->Length)
return 0;
*e=L->data[loc];
for(i=loc;i<L->Length;i++){ // 注意是小于
L->data[i]=L->data[i+1];
}
L->Length--;
return 1;
}
void displayList(SqList *L){
int i;
for(i=0;i<10;i++)
printf("%d\n",L->data[i]);
}
int main(){
int i,j;
SqList L;
InitList(&L);
for(i=0;i<10;i++){
ListInsert(&L,i,i);
}
displayList(&L);
int e=0;
ListDelete(&L,4,&e); // 4号位置存放数字5
printf("已成功删除元素%d\n",e);
}