#include <stdio.h>
#define MAX_SIZE 100
// 定义顺序表的元素类型
typedef int ElementType;
// 定义顺序表结构体
typedef struct {
ElementType data[MAX_SIZE];
int length;
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->length = 0;
}
// 插入操作
int ListInsert(SeqList *L, int position, ElementType e) {
if (position < 1 || position > L->length + 1) {
// 插入位置不合法
return 0;
}
if (L->length >= MAX_SIZE) {
// 顺序表已满
return 0;
}
// 将插入位置后的元素依次后移
for (int i = L->length - 1; i >= position - 1; i--) {
L->data[i + 1] = L->data[i];
}
// 插入新元素并更新顺序表长度
L->data[position - 1] = e;
L->length++;
return 1; // 插入成功
}
// 删除操作
int ListDelete(SeqList *L, int position) {
if (position < 1 || position > L->length) {
// 删除位置不合法
return 0;
}
// 将删除位置后的元素依次前移
for (int i = position; i < L->length; i++) {
L->data[i - 1] = L->data[i];
}
// 更新顺序表长度
L->length--;
return 1; // 删除成功
}
// 查找操作
ElementType GetElem(SeqList L, int position) {
if (position < 1 || position > L.length) {
// 查找位置不合法
return -1; // 可以根据实际情况返回一个特殊值或处理错误
}
return L.data[position - 1];
}
// 按值查找操作
int LocateElem(SeqList L, ElementType e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
// 找到元素,返回位置(从1开始)
return i + 1;
}
}
// 未找到元素
return 0;
}
// 打印顺序表
void PrintList(SeqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
int main() {
SeqList myList;
InitList(&myList);
ListInsert(&myList, 1, 10);
ListInsert(&myList, 2, 20);
ListInsert(&myList, 1, 30);
printf("顺序表元素:");
PrintList(myList);
ListDelete(&myList, 2);
printf("删除第2个元素后:");
PrintList(myList);
printf("第1个元素是:%d\n", GetElem(myList, 1));
int position = LocateElem(myList, 20);
if (position != 0) {
printf("元素20的位置是:%d\n", position);
} else {
printf("元素20未找到\n");
}
return 0;
}