顺序表结构如上
#include <stdbool.h>
typedef int Position;
typedef int ElementType;
#define MAXSIZE 1000
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last;
};
//初始化
List MakeEmpty() {
List L;
L = (List)malloc(sizeof(struct LNode));
L->Last = -1;
return L;
}
#define ERROR -1
Position Find(List L, ElementType X) {
Position i = 0;
while (i <= L->Last&&L->Data[i] != X)
i++;
if (i > L->Last) return ERROR;
else return i; //找到后返回储存位置
}
bool Insert(List L, ElementType X, Position P) {
//在L的指定位置P前插入一个新元素X
Position i;
if (L->Last == MAXSIZE - 1) {
printf("表满");
return false;
}
if (P<0 || P>L->Last + 1) { //检查插入位置合法性
printf("位置不合法");
return false;
}
for (i = L->Last; i >= P; i--)
L->Data[i + 1] = L->Data[i]; //将位置P及以后的元素顺序向后移动
L->Data[P] = X;
L->Last++;
return true;
}
bool Delete(List L, Position P) { //从L中删除指定位置P的元素
Position i;
if (P<0 || P>L->Last) {
printf("位置%d不存在元素", P);
return false;
}
for (i = P + 1; i <= L->Last; i++)
L->Data[i-1] = L->Data[i];
L->Last--;
return true;
}