1.实验性质:设计性实验
2.要求:
3.实验目的
通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,学生编写程序时,要考虑程序的健壮性,熟练掌握通过函数参数返回函数结果的办法。
4.实验内容
编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其变成一个完整的小软件。
5.参考界面
6.验收/测试用例
通过菜单调用各个操作,测试点:
using namespace std;
#include
#include
#define ok 1
#define error 0
#define overflow -2
#define maxsize 10
typedef int status;
typedef struct //定义结构体
{
int *elem;
int length;
} sqList;
sqList L;//声明变量
void InitList(sqList &L);//顺序表的初始化
void ListLength(sqList &L); //顺序表的长度
void EmptyList(sqList &L);//判断顺序表是否为空
void ClearList(sqList &L);//顺序表的清空
void Illegal(sqList &L,int i);//判断输入的数字是否非法
void PointList(sqList &L,int i); //获取指定位置的顺序表元素
void BeforPoint(sqList &L,int i);//求顺序表的前驱
void AfterPoint(sqList &L,int i);//求顺序表的后继
void InsertList(sqList &L,int i,int x);//顺序表的插入
void InsertProcess(sqList &L,int i,int x);//在指定位置插入元素的过程
void DeleteList(sqList &L,int i);//删除指定位置的元素
void Display(sqList &L);//显示顺序表的数据
void Tips();//文字提示信息
int main()
{
Tips();//文字提示信息
InitList(L);//初始化线性表
// int condition; //获取函数返回的类型
int h,k;//分别用来获取输入的指定位置和插入数据的元素
int i;//输入的数字
cout<<"输入你要进行操作的相应数字:";
cin>>i;
while(true)
{
switch(i)//判断输入的i值
{
case 1:
ClearList(L);//清空顺序表
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 2:
EmptyList(L);//判断顺序表是否为空
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 3:
ListLength(L);//求顺序表的长度
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 4:
cout<<"输入指定位置:";
cin>>h;
PointList(L,h);//获取顺序表指定位置的元素
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 5:
cout<<"输入指定位置:";
cin>>h;
BeforPoint(L,h);//求前驱
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 6:
cout<<"输入指定位置:";
cin>>h;
AfterPoint(L,h);//求后继
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 7:
cout<<"输入指定位置:";
cin>>h;
cout<<"输入插入的数值:";
cin>>k;
InsertList(L,h,k);//在顺序表指定位置插入数据
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 8:
cout<<"输入指定位置:";
cin>>h;
DeleteList(L,h);//在顺序表的指定位置删除数据
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 9:
Display(L);//显示顺序表的元素
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
case 10:
Tips();//提示信息
cout<<"输入你要进行操作的相应数字:";
cin>>i;
break;
default:
if(i <0)
return 0;
else
{
cout<<"输入数字非法,请重新输入:";
cin>>i;
}
break;
}
}
return 0;
}
void InitList(sqList &L)//顺序表的初始化
{
L.elem = new int(maxsize);
if(!L.elem)
cout<<"不能正确初始化"<L.length)
{
Illegal(L,i);
//return error;
}
else
{
cout<<"指定位置的元素为:"<L.length)
{
Illegal(L,i);
//return error;
}
else if(i == 1)
{
cout<<"不存在前驱"<L.length)
{
Illegal(L,i);
//return error;
}
else if(i == L.length)
{
cout<<"不存在后继"<L.length+1)
{
Illegal(L,i);
//return error;
}
else
{
InsertProcess(L,i,x);
}
}
void InsertProcess(sqList &L,int i,int x)//在指定位置插入元素的过程
{
/*for(int j=L.length;j>=i;j--)
{
if(j!=i)
{
int temp = L.elem[j-2];
L.elem[j-1] = temp;
}
}
L.elem[i-1] == x;
++L.length;
*/
for(int j=L.length-1; j>=i-1; j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=x;
++L.length;
cout<<"插入元素成功"<L.length)
{
Illegal(L,i);
//return error;
}
else
{
for(int j=i; j<=L.length; j++)
{
if(j==i)
{
L.elem[j-1] = NULL;
}
else
{
L.elem[j-2] = L.elem[j-1];
}
}
--L.length;
cout<<"删除元素成功"<
(1)插入数据(位置, 数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);
(2)显示顺序表中的数据,屏幕输出1, 2, 3;
(3判空,屏幕输出顺序表非空;
(4)顺序表长度,屏幕输出3;
(5)获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;定位,输入:4, 输出:不存在,输入2,输出位置为2;
(6)求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱
(7)求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;
(8)删除,要测位置在【1,3】范围之外的情况和之内的情况;
(9)清空操作后再测长度;