数据结构顺序表的创建输入输出插入删除查找操作
//顺序表的基本运算
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20 //注意此处没有“;”
typedef struct
{
int data[MAXSIZE]; //存储在顺序表中的元素
int len; //顺序表的表长
}SeqList; //顺序表的类型
SeqList* Init_SeqList()
{
SeqList* L;
L = (SeqList*)malloc(sizeof(SeqList)); //生成顺序表的存储空间
L->len = 0; //初始顺序表长度为0
return L; //返回指向顺序表表头的指针
}
void CreatList(SeqList* L) //建立顺序表
{
printf("请输入顺序表的长度:");
scanf("%d", &L->len);
for (int i = 1; i <= L->len; i++)
{
printf("请输入第%d个元素的值:\n", i);
scanf("%d", &L->data[i]);
}
}
void Inser_SeqList(SeqList* L, int i, int x) //在顺序表中插入元素
{
int j;
if (L->len == MAXSIZE - 1)
printf("顺序表已满\n");
else
if (i<1 || i>L->len + 1)
printf("您输入的位置非法!\n");
else
{
for (j = L->len; j >= i; j--) //将an - ai 顺序后移一个元素单位
L->data[j + 1] = L->data[j];
L->data[i] = x; //插入x到第i个位置
L->len++; //表长加一
}
}
void Delete_SeqList(SeqList* L, int i)
{
int j;
if (L->len == 0)
printf("表为空!\n");
else
if (i<1 || i>L->len + 1)
printf("您输入的位置非法!\n");
else
{
for (j = i + 1; j <= L->len; j++) //向前移动一个位置
L->data[j - 1] = L->data[j];
L->len--; //表长减1
}
}
int Location_SeqList(SeqList* L, int x) //顺序表中查找元素
{
int i = 1; //从第一个元素开始查找
while (i < L->len && L->data[i] != x) //顺序表为查完且当前元素不是要查找的元素
i++;
if (L->data[i] == x)
return i; //若找到返回其位置值
else
return 0; //若未找到返回值为0
}
int print(SeqList* L) //输出顺序表
{
int i;
for (i = 1; i <= L->len; i++)
printf("%4d", L->data[i]);
printf("\n");
}
void main()
{
SeqList* s;
int i, x;
s = Init_SeqList(); //初始化顺序表
printf("创建顺序表:\n");
CreatList(s); //以整型数据创建顺序表
printf("输出顺序表:\n");
print(s);
printf("请输入需要插入元素值及其位置:\n");
scanf("%d%d", &x, &i);
Inser_SeqList(s, i, x);
printf("输出顺序表:\n");
print(s);
printf("请输入要删除的元素及其位置:\n");
scanf("%d", &x);
i = Location_SeqList(s, x);
if (i != 0)
printf("元素%d的位置为%d\n", x, i);
else
printf("没找到!\n");
}