编写一个程序sqlist.h,实现顺序表的各种基本运算(假设顺序表的元素类型ElemType为char),并在此基础上设计一个程序exp2-1.c完成以下功能:
- 初始化顺序表L。
- 依次插入a,b,c,d,e元素,字符类型
- 输出顺序表L
- 输出顺序表L的长度
- 判断顺序表L是否为空
- 输出顺序表L的第3个元素
- 输出元素a的位置
- 在第4个元素位置上插入f元素
- 输出顺序表L
- 删除顺序表L的第3个元素
- 输出顺序表L
代码如下
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct {
ElemType data[MaxSize];
int length;
} SqList;
void InitList(SqList *&L) {
L = (SqList *) malloc(sizeof(SqList));
L->length = 0;
}//初始化顺序表
bool ListEmpty(SqList *L) {
return (L->length == 0);
}//判断表是否为空
int ListLength(SqList *L) {
return (L->length);
}//求顺序表长度
void DispList(SqList *L) {
int i;
if (ListEmpty(L)) return;
for (i = 0; i < L->length; i++)
printf("%c", L->data[i]);
printf("\n");
}//输出顺序表
bool GetElem(SqList *L, int i, ElemType &e)
{
if (i < 1 || i > L->length)
return 0;
e = L->data[i]; // 通过给e赋值来获取指定的元素
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;
}//按元素值查找
int ListInsert(SqList *L, int i, ElemType e) {
int j;
if (i < 1 || i > L->length + 1) {
return 0;
}
i--; //将顺序表位序转化为elem下标
for (j = L->length; j > i; j--) //将data[i]及后面元素后移一个位置
L->data[j] = L->data[j - 1]; // 元素后移
L->data[i] = e; //新元素赋值
L->length++; //顺序表长度增1
return 1;
}
int ListDelete(SqList *L, int i, ElemType &e) {
int j;
if (i < 1 || i > L->length)
return 0;
i--; //将顺序表位序转化为elem下标
e = L->data[i];
for (j = i; j < L->length - 1; j++)
L->data[j] = L->data[j + 1]; // 元素前移
L->length--;
return 1;
}
int main()
{
SqList *L;
ElemType elemType;
printf("(1) 初始化顺序表\n");
InitList(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)L长度=%d\n", ListLength(L));
printf("(4)顺序表位%s\n", (ListEmpty(L) ? "空" : "非空"));
GetElem(L, 3, elemType);
printf("(5)顺序表L的第3个元素=%c\n", elemType);
printf("(6)元素b的位置=%d\n", LocateElem(L, 'b'));
printf("(7)在第4个元素上插入f元素\n");
ListInsert(L, 4, 'f');
printf("输出顺序表L:");
DispList(L);
printf("(8)删除L的第3个元素\n");
ListDelete(L, 3, elemType);
printf("(9)输出顺序表L:");
DispList(L);
return 0;
}