编写一个程序,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序完成以下功能。
(1)初始化顺序表L。
(2)依次插入a、b、c、d、e元素。
(3)输出顺序表L。
(4)输出顺序表L的长度。
(5)判断顺序表L是否为空。
(6)输出顺序表L的第3个元素。
(7)输出元素a的位置。
(8)在第4个元素位置上插人f元素。
(9)输出顺序表L。
(10)删除顺序表L的第3个元素。
(11)输出顺序表L。
(12)释放顺序表L。
#include<stdio.h>
#include <stdlib.h>
typedef char Elemtype;
typedef struct {
Elemtype data[50];
int length;
}sqlist, * List;
int IntList(sqlist*& L) //初始化线性表
{
L = (sqlist*)malloc(sizeof(sqlist));
if (!L)
exit(0);
L->length = 0;
return 1;
}
int ListEmpty(sqlist* L) //判断是否为空表
{
return (L->length == 0);
}
int ListLength(sqlist* L) //顺序表长度
{
return(L->length);
}
int ListInsert(sqlist* L, int i, Elemtype e) //插入元素
{
int n;
if (i<1 || i>L->length + 1 || L->length == 50)
return false;
i--;
for (n = L->length; n > i; n--)
L->data[n] = L->data[n - 1];
L->data[i] = e;
L->length++;
return 1;
}
int ListDelete(sqlist* L, int i, Elemtype& e) //删除第i个元素
{
int j;
if (i<1 || i>L->length)
return false;
i--;
e = L->data[i];
for (j = i; j < L->length - 1; j++)
{
L->data[j] = L->data[j + 1];
}
L->length--;
return 1;
}
int GetElem(sqlist* L, int i, Elemtype& e) //按序号求元素
{
if (i<1 || i>L->length)
return 0;
e = L->data[i - 1];
return 1;
}
int LocateElem(sqlist* L, Elemtype e) //按元素查找
{
int i = 0;
while (i < L->length && L->data[i] != e)
i++;
if (i > L->length)
return 0;
else
return (i + 1);
}
void Print(sqlist* L) //打印顺序表
{
int i;
for (i = 0; i < L->length; i++)
{
printf("%c", L->data[i]);
printf(" ");
}
printf("\n");
}
void DestroyList(sqlist* L)
{
free(L);
}
int main()
{
Elemtype m, n;
sqlist* L;
printf("(1)初始化顺序表L\n");
IntList(L);
printf("(2)依次插入元素a,b,c,d,e\n");
ListInsert(L, 1, 'a');
ListInsert(L, 2, 'b');
ListInsert(L, 3, 'c');
ListInsert(L, 4, 'd');
ListInsert(L, 5, 'e');
printf("(3)输出顺序表:");
Print(L);
printf("(4)输出顺序表长度:%d\n", ListLength(L));
printf("(5)判断顺序表是否为空:%s\n", (ListEmpty(L) ? "空" : "非空"));
GetElem(L, 3, m);
printf("(6)输出顺序表L的第3个元素:%c\n", m);
printf("(7)输出元素a的位置:%d\n", (LocateElem(L, 'a')));
ListInsert(L, 4, 'f');
printf("(8)在第4个位置插入元素f\n");
printf("(9)输出顺序表:");
Print(L);
ListDelete(L, 3, n);
printf("(10)删除顺序表L第3个元素\n");
printf("(11)输出顺序表L:");
Print(L);
printf("(12)释放顺序表L\n");
DestroyList(L);
return 0;
}
运行结果