一、顺序表的定义
#define DataType int
#define MaxSize 100
typedef struct List
{
DataType data[MaxSize];
int Length;
}SeqList, * PSeqList;
二、基本操作的实现
//初始化线性表
PSeqList Init_List() {
PSeqList PL;
PL = (PSeqList)malloc(sizeof(SeqList));
if (PL) {
PL->Length = 0;
printf("初始化成功\n");
}
return PL;
}
//销毁线性表
int Destroy_List(PSeqList L) {
if (L) {
free(L);
L = NULL;
printf("销毁成功\n");
return 1;
}
return 0;
}
//求线性表的长度
int Length_List(PSeqList L) {
if (!L) {
printf("线性表不存在\n");
return 0;
}
return L->Length;
}
//查找值为x的元素,返回首次出现的下标
int Locate_List(PSeqList L, DataType x) {
int i = 0;
if (!L) {
printf("线性表不存在\n");
return -1;
}
for (i = 0; i < L->Length; i++) {
if (L->data[i] == x)
return i;
}
if (i == L->Length) {
printf("该元素不存在\n");
return -2;
}
}
//在下标为i的位置插入值为x的元素
void Insert_List(PSeqList L, int i, DataType x) {
int j = 0;
if (!L) {
printf("线性表不存在\n");
return;
}
if (i < 0 || i > L->Length || L->Length == MaxSize) {
printf("无法插入\n");
return;
}
for (j = L->Length - 1; j >= i + 1; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i] = x;
L->Length++;
printf("插入成功\n");
}
//在线性表中删除下标为i的元素
void Delet_Lint(PSeqList L, int i) {
int j = 0;
if (!L) {
printf("线性表不存在\n");
return;
}
if (i < 0 || i > L->Length - 1) {
printf("删除位置错误\n");
return;
}
for (j = i; j < L->Length - 1; j++) {
L->data[j] = L->data[j + 1];
}
L->Length--;
printf("删除成功\n");
}
//打印顺序表中所有元素
void Show_List(PSeqList L) {
int i = 0;
for (i = 0; i < L->Length; i++)
printf("%d ", L->data[i]);
printf("\n");
}
三、测试代码
int main() {
PSeqList PL = Init_List();
for (int i = 0; i < 5; i++) {
Insert_List(PL, i, i);
}
Show_List(PL);
printf("%d \n", Locate_List(PL, 2));
Delet_Lint(PL, 2);
Show_List(PL);
Destroy_List(PL);
return 0;
}
四、测试结果