数据结构实验报告二线性表的顺序存储.docx
《数据结构实验报告二线性表的顺序存储.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告二线性表的顺序存储.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构实验报告二线性表的顺序存储
实验报告二线性表的顺序存储
班级:
2010XXX姓名:
HoogLe学号:
2010XXXX专业:
XXXX
*****************
一、实验目的:
(1)掌握顺序表的基本操作的实现方法。
(2)应用顺序表的基本算法实现集合A=AUB算法。
(3)应用顺序表的基本算法实现两有序顺序表的归并算法。
二、实验内容:
1、线性表顺序存储结构的基本操作算法实现(要求采用类模板实现)
[实现提示](同时可参见教材p5822-p60页算法、ppt)函数、类名称等可自定义,部分变量请加上学号后3位。
库函数载和常量定义:
(代码)
#include
usingnamespacestd;
constintMaxSize=100;
(1)顺序表存储结构的定义(类的声明):
(代码)
template//定义模板类SeqList
classSeqList
{
public:
SeqList();//无参构造函数
SeqList(datatypea[],intn);//有参构造函数
~SeqList(){};//析构函数为空
intLength();//求线性表的长度
datatypeGet(inti);//按位查找,取线性表的第i个元素
intLocate(datatypeitem);//查找元素item
voidInsert(inti,datatypeitem);//在第i个位置插入元素item
datatypeDelete(inti);//删除线性表的第i个元素
voiddisplay();//遍历线性表,按序号依次输出各元素
private:
datatypedata[MaxSize];//存放数据元素的数组
intlength;//线性表的长度
};
(2)初始化顺序表算法实现(不带参数的构造函数)
/*
*输入:
无
*前置条件:
顺序表不存在
*功能:
构建一个顺序表
*输出:
无
*后置条件:
表长为0
*/
实现代码:
template
SeqList:
:
SeqList()
{
length=0;
}
(3)顺序表的建立算法(带参数的构造函数)
/*
*输入:
顺序表信息的数组形式a[],顺序表长度n
*前置条件:
顺序表不存在
*功能:
将数组a[]中元素建为长度为n的顺序表
*输出:
无
*后置条件:
构建一个顺序表
*/
实现代码:
template
SeqList:
:
SeqList(datatypea[],intn)
{
if(n>MaxSize)
{
cout<<"数组元素个数不合法"<}
for(inti=0;idata[i]=a[i];
length=n;
}(4)在顺序表的第i个位置前插入元素e算法
/*
*输入:
插入元素e,插入位置i
*前置条件:
顺序表存在,i要合法
*功能:
将元素e插入到顺序表中位置i处
*输出:
无
*后置条件:
顺序表插入新元素,表长加1
*/
实现代码:
template
voidSeqList:
:
Insert(inti,datatypeitem)
{
intj;
if(length>=MaxSize)
{
cout<<"溢出"<}
if(i<1||i>length+1)
{
cout<<"i不合法!
"<}
for(j=length;j>=i;j--)
data[j]=data[j-1];
data[i-1]=item;
length++;
}(5)删除线性表中第i个元素算法
/*
*输入:
要删除元素位置i
*前置条件:
顺序表存在,i要合法
*功能:
删除顺序表中位置为i的元素
*输出:
无
*后置条件:
顺序表册除了一个元素,表长减1
*/
实现代码:
template
datatypeSeqList:
:
Delete(inti)
{
intitem,j;
if(length==0)
{
cout<<"表为空,无法删除元素!
"<}
if(i<1||i>length)
{
cout<<"i不合法!
"<}
item=data[i-1];//获得要删除的元素值
for(j=i;jdata[j-1]=data[j];//注意数组下标从0记
length--;
returnitem;
}(6)遍历线性表元素算法
/*
*输入:
无
*前置条件:
顺序表存在
*功能:
顺序表遍历
*输出:
输出所有元素
*后置条件:
无
*/
实现代码:
template
voidSeqList:
:
display()
{
if(length==0)
{
cout<<"表为空,无法输出!
"<}
for(inti=0;i{
cout<}
}
(7)获得线性表长度算法
/*
*输入:
无
*前置条件:
顺序表存在
*功能:
输出顺序表长度
*输出:
顺序表长度
*后置条件:
无
*/
实现代码:
template
intSeqList:
:
Length()
{
returnLength;
}
(8)在顺序线性表中查找e值,返回该元素的位序算法
/*
*输入:
查询元素值e
*前置条件:
顺序表存在
*功能:
按值查找值的元素并输出位置
*输出:
查询元素的位置
*后置条件:
无
*/
实现代码:
template
intSeqList:
:
Locate(datatypeitem)
{
for(inti=0;iif(data[i]==item)
returni+1;
//下标为i的元素等于item,返回其序号i+1
return0;//查找失败
}
(9)获得顺序线性表第i个元素的值
/*
*输入:
查询元素位置i
*前置条件:
顺序表存在,i要合法
*功能:
按位查找位置为i的元素并输出值
*输出:
查询元素的值
*后置条件:
无
*/
实现代码:
template
datatypeSeqList:
:
Get(inti)
{
if(i<0||i>length)
{
cout<<"i不合法!
"<}
elsereturndata[i-1];
}
(10)判表空算法
/*
*输入:
无
*前置条件:
无
*功能:
判表是否为空
*输出:
为空返回1,不为空返回0
*后置条件:
无
*/
实现代码:
template
boolSeqList:
:
Empty()
{
if(length==0)
{
return1;
}
else
{
return0;
}
}
(11)求直接前驱结点算法
/*
*输入:
要查找的元素e,待存放前驱结点值e1
*前置条件:
无
*功能:
查找该元素的所在位置,获得其前驱所在位置。
*输出:
返回其前驱结点的位序。
*后置条件:
e1值为前驱结点的值
*/
实现代码:
template
intSeqList:
:
Pre(datatypeitem)
{
intk=Locate(item)-1;
if(k>0)
returnk;
else
{
cout<<"无前驱结点!
"<return0;
}
}
(12)求直接后继结点算法
/*
*输入:
要查找的元素e,待存放后继结点值e1
*前置条件:
无
*功能:
查找该元素的所在位置,获得其后继所在位置。
*输出:
返回其后继结点的位序。
*后置条件:
e1值为后继结点的值
*/
实现代码:
template
intSeqList:
:
Suc(datatypeitem)
{
intk=Locate(item)+1;
if(k>length)
{
cout<<"无后继结点!
"<return0;
}
else
{
returnk;
}
}
上机实现以上基本操作,写出main()程序:
voidmain()
{
SeqListSeq;//创建
if(Seq.Empty())
{
cout<<"线性表为空!
"<}
Seq.Insert(1,1);
Seq.Insert(2,2);
Seq.Insert(3,3);
Seq.Insert(4,4);
Seq.Insert(5,5);//插入元素操作
cout<<"输出插入的五个元素:
"<Seq.display();//按序号依次输出各元素
cout<cout<<"2是第"<(2)<<"个元素"<cout<<"第五个元素是:
"<cout<<"线性表的长度为:
"<Seq.Delete(3);//删除元素
cout<<"删除第三个元素后的线性表为:
"<Seq.display();//输出删除元素后的线性表
cout<cout<<"元素2前驱结点的位置为:
"<(2)<cout<<"元素2前驱结点的数值为:
"<(2))<cout<<"元素4后继结点的位置为:
"<cout<<"元素4后继结点的数值为:
"<}
要求对每个算法都加以测试,判断是否正确;并测试不同类型数据的操作。
粘贴测试数据及运行结果:
2、用以上基本操作算法,实现A=AUB算法。
(利用函数模板实现)
/*
*输入:
集合A,集合B
*前置条件:
无
*功能:
实现A=AUB
*输出:
无
*后置条件:
A中