#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
#define MAXSIZE 20
typedef int ElemType; //数据元素的类型
typedef struct
{
ElemType a[MAXSIZE];
int length;
}SqList; //顺序存储的结构体类型
SqList a, b, c;
void create_list(SqList* L);
void out_list(SqList L);
void insert_sq(SqList* L, int i, ElemType e);
ElemType delete_sq(SqList* L, int i);
int locat_sq(SqList L, ElemType e);
int main()
{
int i, k, loc;
ElemType e, x;
char ch;
do
{
printf("\n\n");
printf("\n 1.建立线性表");
printf("\n 2.插入元素");
printf("\n 3.删除元素");
printf("\n 4.查找元素");
printf("\n 0.结束程序运行");
printf("\n =====================");
printf("\n 请输入要执行的操作: ");
scanf_s("%d", &k);
switch (k)
{
case 1:
{
create_list(&a);
out_list(a);
}
break;
case 2:
{
printf("\n 请输入插入位置: ");
scanf_s("%d", &i);
printf("请输入要插入的元素值: ");
scanf_s("%d", &e);
insert_sq(&a, i, e);
out_list(a);
}
break;
case 3:
{
printf("\n请输入要删除元素的位置:%d ", a.length);
scanf_s("%d", &i);
x = delete_sq(&a, i);
out_list(a);
if (x != -1)
printf("\n删除的元素为:%d\n", x);
else printf("要删除的元素不存在!");
}
break;
case 4:
{
printf("\n请输入要查找的元素值:");
scanf_s("%d", &e);
loc = locat_sq(a, e);
if (loc == -1)
printf("\n未找到指定元素!");
else
printf("\n已找到,元素的位置是: %d ", loc);
}
break;
}/*switch*/
} while (k != 0);
printf("\n 按回车键,返回...\n");
ch = getchar();
}/*main*/
void create_list(SqList* L)
{
int i;
printf("请定义线性表长度:");
scanf_s("%d", &i);
L->length = i;
for (i = 0; i < L->length; i++)
{
printf("请输入第%d个数据:", i + 1);
scanf_s("%d", &(L->a[i]));
}
}
//输出线性表
void out_list(SqList L)
{
for (int i = 0; i < L.length; i++)
printf("%d\n", L.a[i]);
}
//在线性表的第i个位置插入元素e
void insert_sq(SqList* L, int i, ElemType e)
{
int j;
if (L->length == MAXSIZE)
printf("表满");
else if (i<1 || i>L->length + 1)
printf("位置错误");
else
{
for (j = L->length - 1; j > i - 2; j--)
L->a[j + 1] = L->a[j];
L->a[i - 1] = e;
L->length++;
}
}
//删除第i个元素,返回其值
ElemType delete_sq(SqList* L, int i)
{
int e, j;
if (L->length == 0)
{
e = -1;
printf("表空");
}
else if (i<1 || i>L->length)
{
printf("位置错误");
e = -1;
}
else
{
e = L->a[i - 1];
for (j = i; j < L->length; j++)
L->a[j - 1] = L->a[j];
L->length--;
}
return e;
}
//查找值为e的元素,返回它的位置
int locat_sq(SqList L, ElemType e)
{
int i;
for (i = 0; i < L.length; i++)
if (e == L.a[i])
break;
if (i == L.length)
return -1;
else
return i + 1;
}