帮我用C语言写一个顺序表(能实现基本操作并且附带详细注释)
时间: 2023-06-08 13:04:14 浏览: 49
好的,下面是针对您的问题的代码和注释:
#include <stdio.h> // 包含标准输入输出库
#define MAXSIZE 100 // 定义顺序表最大长度
typedef struct
{
int data[MAXSIZE]; // 存储顺序表元素的数组
int length; // 记录顺序表当前长度
} SeqList; // 定义顺序表结构体
// 初始化顺序表
void InitSeqList(SeqList *L)
{
L->length = 0; // 初始长度为0
}
// 插入元素
int Insert(SeqList *L, int i, int x)
{
if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) // 判断插入位置是否合法以及顺序表是否已满
return 0; // 插入失败,返回0
// 将插入位置及之后的元素后移一位
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j - 1];
L->data[i - 1] = x; // 插入元素
L->length++; // 长度加1
return 1; // 插入成功,返回1
}
// 删除元素
int Delete(SeqList *L, int i)
{
if (i < 1 || i > L->length) // 判断删除位置是否合法
return 0; // 删除失败,返回0
// 将删除位置及之后的元素前移一位
for (int j = i; j < L->length; j++)
L->data[j - 1] = L->data[j];
L->length--; // 长度减1
return 1; // 删除成功,返回1
}
// 查找元素
int Find(SeqList *L, int x)
{
for (int i = 0; i < L->length; i++)
if (L->data[i] == x)
return i + 1; // 返回元素在顺序表中的位置
return 0; // 没有找到,返回0
}
int main()
{
SeqList L; // 定义顺序表变量
int n; // 定义元素个数
int x; // 定义要插入或查找的元素
int pos; // 定义要插入或删除的位置
InitSeqList(&L); // 初始化顺序表
printf("请输入元素个数:");
scanf("%d", &n); // 输入元素个数
printf("请输入%d个整数:", n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &x); // 输入元素值
Insert(&L, i, x); // 插入元素
}
printf("顺序表中的元素为:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
printf("请输入要查找的元素:");
scanf("%d", &x); // 输入要查找的元素
pos = Find(&L, x); // 查找元素
if (pos)
printf("%d在顺序表中的位置为%d\n", x, pos);
else
printf("顺序表中没有%d这个元素\n", x);
printf("请输入要插入的元素和插入位置(以空格分隔):");
scanf("%d %d", &x, &pos); // 输入要插入的元素和插入位置
if (Insert(&L, pos, x))
{
printf("插入成功,插入后的顺序表为:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
else
printf("插入失败,插入位置不合法或顺序表已满\n");
printf("请输入要删除的元素位置:");
scanf("%d", &pos); // 输入要删除的元素位置
if (Delete(&L, pos))
{
printf("删除成功,删除后的顺序表为:");
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
}
else
printf("删除失败,删除位置不合法\n");
return 0;
}