数据结构实验报告二线性表的顺序存储Word格式文档下载.docx
《数据结构实验报告二线性表的顺序存储Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告二线性表的顺序存储Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
//定义模板类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
*/
实现代码:
SeqList<
datatype>
:
SeqList()
length=0;
}
(3)顺序表的建立算法(带参数的构造函数)
顺序表信息的数组形式a[],顺序表长度n
将数组a[]中元素建为长度为n的顺序表
SeqList(datatypea[],intn)
if(n>
MaxSize)
{
cout<
<
"
数组元素个数不合法"
endl;
}
for(inti=0;
i<
n;
i++)
data[i]=a[i];
length=n;
}(4)在顺序表的第i个位置前插入元素e算法
插入元素e,插入位置i
顺序表存在,i要合法
将元素e插入到顺序表中位置i处
顺序表插入新元素,表长加1
voidSeqList<
Insert(inti,datatypeitem)
{
intj;
if(length>
=MaxSize)
溢出"
if(i<
1||i>
length+1)
i不合法!
for(j=length;
j>
=i;
j--)
data[j]=data[j-1];
data[i-1]=item;
length++;
}(5)删除线性表中第i个元素算法
要删除元素位置i
顺序表存在,i要合法
删除顺序表中位置为i的元素
顺序表册除了一个元素,表长减1
datatypeSeqList<
Delete(inti)
intitem,j;
if(length==0)
表为空,无法删除元素!
length)
i不合法!
item=data[i-1];
//获得要删除的元素值
for(j=i;
j<
length;
j++)
data[j-1]=data[j];
//注意数组下标从0记
length--;
returnitem;
}(6)遍历线性表元素算法
顺序表存在
顺序表遍历
输出所有元素
template<
display()
if(length==0)
表为空,无法输出!
for(inti=0;
i<
i++)
data[i]<
"
;
(7)获得线性表长度算法
输出顺序表长度
顺序表长度
intSeqList<
Length()
returnLength;
(8)在顺序线性表中查找e值,返回该元素的位序算法
查询元素值e
按值查找值的元素并输出位置
查询元素的位置
Locate(datatypeitem)
i++)
if(data[i]==item)
returni+1;
//下标为i的元素等于item,返回其序号i+1
return0;
//查找失败
(9)获得顺序线性表第i个元素的值
查询元素位置i
按位查找位置为i的元素并输出值
查询元素的值
Get(inti)
0||i>
length)
elsereturndata[i-1];
(10)判表空算法
判表是否为空
为空返回1,不为空返回0
无
boolSeqList<
Empty()
if(length==0)
return1;
}
else
return0;
(11)求直接前驱结点算法
要查找的元素e,待存放前驱结点值e1
查找该元素的所在位置,获得其前驱所在位置。
返回其前驱结点的位序。
e1值为前驱结点的值
Pre(datatypeitem)
intk=Locate(item)-1;
if(k>
0)
returnk;
无前驱结点!
(12)求直接后继结点算法
要查找的元素e,待存放后继结点值e1
查找该元素的所在位置,获得其后继所在位置。
返回其后继结点的位序。
e1值为后继结点的值
Suc(datatypeitem)
intk=Locate(item)+1;
无后继结点!
return0;
上机实现以上基本操作,写出main()程序:
voidmain()
SeqList<
int>
Seq;
//创建
if(Seq.Empty())
线性表为空!
//判断是否为空操作
Seq.Insert(1,1);
Seq.Insert(2,2);
Seq.Insert(3,3);
Seq.Insert(4,4);
Seq.Insert(5,5);
//插入元素操作
cout<
输出插入的五个元素:
Seq.display();
//按序号依次输出各元素
2是第"
Seq.Locate
(2)<
个元素"
//查找元素位置
第五个元素是:
Seq.Get(5)<
//查找第五个元素
线性表的长度为:
Seq.Length()<
//输出线性表长度
Seq.Delete(3);
//删除元素
删除第三个元素后的线性表为:
//输出删除元素后的线性表
元素2前驱结点的位置为:
Seq.Pre
(2)<
//获得前驱结点位置
元素2前驱结点的数值为:
Seq.Get(Seq.Pre
(2))<
//获得前驱结点
元素4后继结点的位置为:
Seq.Suc(4)<
//获得后继结点位置
元素4后继结点的数值为:
Seq.Get(Seq.Suc(4))<
//获得后继结点
要求对每个算法都加以测试,判断是否正确;
并测试不同类型数据的操作。
粘贴测试数据及运行结果:
2、用以上基本操作算法,实现A=AUB算法。
(利用函数模板实现)
集合A,集合B
实现A=AUB
A中