帮我用C语言编写一个顺序表(能满足基本操作且带注释)
时间: 2023-06-08 13:04:26 浏览: 97
当然,我可以帮您编写一个基本的顺序表,以下是代码和注释:
```c
#include<stdio.h>
#define MaxSize 50 // 定义顺序表的最大长度为50个元素
typedef struct{
int data[MaxSize]; // 定义顺序表的数据域
int length; // 定义顺序表的当前长度
}SqList; // 定义顺序表的结构体类型
void InitList(SqList* L); // 初始化顺序表
void ListInsert(SqList* L,int i,int e); // 在顺序表中指定位置插入元素
void ListDelete(SqList* L,int i); // 在顺序表中删除指定位置元素
int LocateElem(SqList* L,int e); // 在顺序表中查找指定元素位置
void PrintList(SqList* L); // 打印顺序表
void InitList(SqList* L)
{
for(int i=0;i<MaxSize;i++)
L->data[i]=0;
L->length=0;
}
void ListInsert(SqList* L,int i,int e)
{
if(i<1 || i>L->length+1)
printf("插入位置非法\n");
else if(L->length == MaxSize)
printf("顺序表已满\n");
else
{
for(int j=L->length;j>=i;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=e;
L->length++;
}
}
void ListDelete(SqList* L,int i)
{
if(i<1 || i>L->length)
printf("删除位置非法\n");
else
{
for(int j=i;j<L->length;j++)
L->data[j-1]=L->data[j];
L->length--;
}
}
int LocateElem(SqList* L,int e)
{
for(int i=0;i<L->length;i++)
if(L->data[i] == e)
return i+1;
return 0;
}
void PrintList(SqList* L)
{
for(int i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
int main()
{
SqList L;
InitList(&L); // 初始化顺序表
ListInsert(&L,1,10); // 在第1个位置插入10
PrintList(&L); // 打印顺序表
ListInsert(&L,2,20); // 在第2个位置插入20
PrintList(&L); // 打印顺序表
ListInsert(&L,1,30); // 在第1个位置插入30
PrintList(&L); // 打印顺序表
ListDelete(&L,2); // 删除第2个位置的元素
PrintList(&L); // 打印顺序表
int pos = LocateElem(&L,30); // 获取30在顺序表中的位置
if(pos > 0)
printf("30在顺序表中的位置为%d\n",pos);
else
printf("顺序表中不存在元素30\n");
return 0;
}
```
以上就是一个基本的顺序表实现,包含了初始化、插入、删除、查找和打印等操作。希望可以对您有所帮助。
阅读全文