实验目的:领会顺序表存储结构并掌握顺序表中的各种基本运算算法设计
实验内容:编写一个程序sqlist.cpp,实现顺序表中的各种基本运算和整体建表算法(假设顺序表元素类型ElemType为char),并在此基础上设计一个程序exp1.cpp,并完成如下功能。
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
希望对大家有帮助
代码如下,
sqlist.cpp`
,//顺序表基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int 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;i++)
L->data[i]=a[i];
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");
}
bool GetElem(SqList *L,int i,ElemType &e)
{
if (i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
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;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (i<1 || i>L->length+1)
return false;
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 true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if (i<1 || i>L->length)
return false;
i--; //将顺序表位序转化为elem下标
e=L->data[i];
for (j=i;j<L->length-1;j++) //将data[i]之后的元素前移一个位置
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return true;
}
exp1.cpp
#include "sqlist.cpp"
main()
{
SqList *L;
ElemType e;
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\n");
DispList(L); //输出顺序表
printf("《4》输出顺序表L长度为: %d\n", ListLength(L));
printf("《5》顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L,3,e);
printf("《6》输出顺序表L的第三个元素为: %c\n",e);
printf("《7》元素a的位置是; %d\n",LocateElem(L,'a'));
printf("《8》在第四个位置插入f\n");
ListInsert(L,4,'f');
printf("《9》输出顺序表L\n");
DispList(L);
ListDelete(L,3,e);//e是返回的值
printf("《10》删除顺序表L的第三个元素为: %c\n",e);//e是L里面第三个元素返回的值
printf("《11》输出顺序表L\n");
DispList(L);
printf("《12》释放顺序表L\n");
DestroyList(L);
}