实验一;顺序表验证实验
班级:___计算机13-2__ 学号:____[1**********]_________ 姓名:___ 陈志盛 ____ 成绩:_________
实验一 顺序表操作验证
1. 实验目的
⑴ 掌握线性表的顺序存储结构;
⑵ 验证顺序表及其基本操作的实现;
⑶ 掌握数据结构及算法的程序实现的基本方法。
2. 实验内容
⑴ 建立含有若干个元素的顺序表;
⑵ 对已建立的顺序表实现插入、删除、查找等基本操作。
3. 设计与编码
实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切
相关。
a) 算法设计
对本次实验内容设计c++类定义,设计算法完成每个成员函数。
b) 编码
将算法转化为c++程序,设计主函数完成对各成员函数的调用。
#include
using namespace std;
const int MaxSize=100;
template
class SeqList
{
public:
SeqList(){length=0;}
SeqList(T a[],int n);
~SeqList(){}
int Length(){return length;}
T Get(int i);
int Locate(T x);
void Insert(int i,T x);
T Delete(int i);
void PrintList();
private:
T data[MaxSize];
int length;
};
//顺序表有参构造函数SeqList===============================================
template
SeqList::SeqList(T a[],int n)
{
if(n>MaxSize)throw"参数非法";
for(int i=0;i
data[i]=a[i];
length=n;
};
//顺序表安位查找算Get====================================================
template
T SeqList::Get(int i)
{
if(ilength)throw"查找位置非法";
else return data[i-1];
};
//顺序表按值查找算Locate==================================================
template
int SeqList::Locate(T x)
{
for(int i=0;i
if(data[i]==x)return i+1;
return 0;
};
//顺序表插入算
Insert=======================================================
template
void SeqList::Insert(int i,T x)
{
if(length>=MaxSize)throw"上溢";
if(ilength+1)throw"位置";
for(int j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=x;
length++;
};
//顺序表删除算
Delete========================================================= template
T SeqList::Delete(int i)
{
if(length==0)throw"下溢";
if(ilength)throw"位置";
T x=data[i-1];
for(int j=i;j
data[j-1]=data[j];
length--;
return x;
};
//顺序表遍历算法PrintList======================================================== template
void SeqList::PrintList()
{
for(int i=0;i
cout
};
//菜单====================================================================== void menu(){
cout
cout
cout
cout
cout
cout
cout
cout
//主函数
int main() {
int a[10]={0,1,2,3,4,5,6,7,8,9};
int i,j,x,l;
SeqLists1(a,10);
int flag=1;
menu();
while(flag){
cout
cin>>j;
switch(j){
case 1:{cout
cin>>i>>x; s1.Insert(i,x); break; }
case 2: {cout>i;
s1.Delete(i); cout
s1.PrintList(); break;}
case 3: {cout>x;l=s1.Locate(x);
cout
case 4: {s1.PrintList(); break;}
case 5: {flag=0; break;}
default: {cout
}
}
return 0;}
二、运行与调试
a) 在调试程序的过程中遇到什么问题,是如何解决的?
答:调试过程中总是遇到一些小问题,漏掉分号 打错特殊符号等,还有一些代码不是很清楚怎么写菜单不知道怎么弄等等的,通过看书和上网翻阅资料最终得到解决~ b) 设计了哪些设计数据?测试结果是什么?
答:我设计了十组数据,通过调试时不断输入不同的数据,观看运行结果是否运行正常。测试结果基本正常
c) 程序运行的结果如何?
d)
三、 实验小结
顺序线性表是用一段地址连续的存储单元依次存储线性表的数据元素,通常用一组数组来实现顺序表,是一种相对简单易懂的线性数据结构,了解线性表中数据被插入删除位置后的移动方式及最后的操作,程序基本就完成了,编写比较容易且寻值比链式快捷,但若是线性表中数据过多,插入删除操作后的数据移动将耗大量的时间,而且空间利用率较差,这是顺序表的缺陷