1.编写一个程序,实现顺序表的各种基本运算,本实验的顺序表元素的类型为char,在主函数中调用顺序表的基本操作完成如下操作:
(1)初始化顺序表L
(2)依次插入a、b、c、d、e
(3)输出顺序表L
(4)输出顺序表L的长度
(5)判断顺序表L是否为空
(6)输出顺序表的第3个元素
(7)输出元素a的逻辑位置
(8)在第4个元素位置上插入元素f
(9)输出顺序表L
(10)删除L的第3个元素
(11)输出顺序表L
(12)释放顺序表L
#include<stdio.h>
#include<malloc.h>
#include<stdbool.h>
#define maxsize 60
typedef char ElemType;
typedef struct {
ElemType data[maxsize];
int length;
}sqlist;
//建立
void creatlist(sqlist* L, ElemType a[], int n)
{
int i;
L = (sqlist*)malloc(sizeof(sqlist));
for (i = 0; i < n; i++)
L->data[i] = a[i];
L->length = n;
}
//初始化
sqlist* initlist()
{
sqlist* L;
L = (sqlist*)malloc(sizeof(sqlist));
L->length = 0;
return L;
}
//元素查找
void czlist(sqlist* L)
{
int i;
char e;
printf("你想要的元素:");
scanf(" %c", &e);
for (i = 0; i < L->length; i++)
{
if (L->data[i] == e)
printf("元素%c的位序为%d\n", e, i+1);
}
}
//按序号查找
void getElem(sqlist* L)
{
int i;
printf("您要的元素序号:");
scanf("%d", &i);
printf("第%d号的元素的%c\n", i, L->data[i - 1]);
}
//插入
void charulist(sqlist* L)
{
int i;
printf("请输入元素总数:");
scanf("%d", &i);
printf("你要插入的元素:");
for (int j = 0; j < i; j++)
{
scanf(" %c", &L->data[j]);
L->length++;
}
}
void charulist1(sqlist* L)
{
int i, j;
printf("你要插入元素的位序:");
scanf("%d", &j);
for (i = L->length; i >= j - 1; i--)
{
L->data[i + 1] = L->data[i];
}
printf("你要插入的元素:");
scanf(" %c", &L->data[j - 1]);
L->length = L->length + 1;
}
//删除
void shanchulist(sqlist* L)
{
int i, j;
printf("你要删除元素的位序:");
scanf("%d", &i);
for (j = (i - 1); j < L->length - 1; j++)
{
L->data[j] = L->data[j + 1];
}
L->length = L->length - 1;
}
//判空
void listEmpty(sqlist* L)
{
if (L->length == 0)
{
printf("空表\n");
}
else
{
printf("不是空表!\n");
}
}
//求长度
void listLength(sqlist* L)
{
printf("表长为%d\n", L->length);
}
//输出线性表
void listOut(sqlist* L)
{
int i;
printf("顺序表:");
for (i = 0; i < L->length; i++)
printf("%c ", L->data[i]);
printf("\n");
}
//销毁
void Destroylist(sqlist* L)
{
free(L);
}
int main()
{
sqlist* L;
L = initlist();
charulist(L);
listEmpty(L);
listLength(L);
listOut(L);
getElem(L);
czlist(L);
charulist1(L);
listOut(L);
shanchulist(L);
listOut(L);
Destroylist(L);
return 0;
}