实验题1:实现顺序表各种基本运算的算法
目的:编写一个sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个主程序,完成如下功能:
输出顺序表的基本运算如下:
(1)初始化顺序表L
(2)一次插入a, b, c, d, e元素
(3)输出顺序表L:
(4)输出顺序表L长度:
(4)顺序表L为
(5)输出顺序表L的第3个元素:
(6)元素a的位置 :
(7)在第4个元素位置插入f元素
(8)输出顺序表L:
(9)删除L的第三个元素
(10)输出顺序表L:
(11)释放顺序表L
对应代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
} SqList;
//整体建立顺序表
void CreateList(SqList *&L, ElemType a[], int n)
{
L = (SqList *)malloc(sizeof(SqList));
for(int i = 0; i < n; n++)
{
L -> length = 0;
}
L -> length = n;
}
//初始化线性表
void InitList(SqList *&L)
{
L = (SqList *)malloc(sizeof(SqList));
L -> length = 0;
}
//销毁线性表
void DestroyList(SqList *&L)
{
free(L);
}
//判断线性表是否为空表
bool ListEmpty(SqList *L)
{
return(L -> length == 0);
}
//求线性表的长度
int ListLength(SqList * L)
{
return(L -> length);
}
//输入线性表
void DispList(SqList * L)
{
for(int i = 0; i < L -> length; i++)
{
printf(" %c", L-> data[i]);
}
printf("\n");
}
//求线性表中第i个元素值
bool getElem(SqList * L, int i, ElemType &e)
{
if(i < 1 || i > L -> length)
{
return false;
}
e = L -> data[i-1];
return true;
}
//查找第一个只有为e的元素符号
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;
}
}
//插入第i个元素
bool ListInsert(SqList *&L, int i, ElemType e)
{
int j;
if(i < 1 || i > L -> length+1 || L -> length == MaxSize)
{
return false;
}
i--;
for(j = L -> length;j > i;j--)
{
L -> data[j] = L -> data[j-1];
}
L -> data[i] = e;
L -> length++;
return true;
}
//删除第i个元素
bool ListDelete(SqList *&L, int i, ElemType &e)
{
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 true;
}
int main()
{
SqList * L;
ElemType e;
printf("输出顺序表的基本运算如下:\n");
printf(" (1)初始化顺序表L\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:");
DispList(L);
printf(" (4)输出顺序表L长度:%d\n", ListLength(L));
printf(" (5)顺序表L为%s\n", (ListEmpty(L)? "空" : "非空"));
getElem(L, 3, e);
printf(" (6)输出顺序表L的第3个元素:%c\n", e);
printf(" (7)元素a的位置 :%d\n", LocateElem(L, 'a'));
printf(" (8)在第4个元素位置插入f元素 \n");
ListInsert(L, 4, 'f');
printf(" (9)输出顺序表L:" );
DispList(L);
printf(" (10)删除L的第三个元素\n" );
ListDelete(L, 3, e);
printf(" (11)输出顺序表L: ");
DispList(L);
printf(" (12)释放顺序表L\n");
DestroyList(L);
return 1;
}