实验一链式结构实现线性表Word文档格式.docx
《实验一链式结构实现线性表Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一链式结构实现线性表Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
线性表的基本功能:
●构造:
使用头插法、尾插法两种方法
1、插入:
要求建立的链表按照关键字从小到大有序
2、删除
3、查找
4、获取链表长度
5、销毁
6、其他:
可自行定义
编写测试main()函数测试线性表的正确性。
2.程序分析
2.1存储结构
存储结构:
顺序表
2.2关键算法分析
头插法示意图:
算法步骤:
1堆中建立新结点
2S->
next指向front->
next
3front->
next指向s
Node<
T>
*s=newNode<
;
s->
data=a[i];
next=front->
next;
front->
next=s;
时间复杂度:
O(n)
尾插法
1堆中建立新结点Node<
2将新结点加入到链表中r->
3修改尾指针r=s
按值查找结点示意图:
定位计数和定位指针
inti=1;
Node<
*p;
p=front->
比较P指向的元素是否与检索值相同
if(p)
while(p)
{
if(p->
data==n)
cout<
<
"
元素序号:
i<
endl;
p=p->
i++;
}
else
throw"
空链表!
时间复杂度:
插入操作:
2将新结点插入到要插入位置后一节点p的后面,将后一结点数据写入s
3P指向s,在p中写入新的值
s->
data=p->
data;
next=p->
p->
data=x;
O
(1)
删除结点示意图:
删除结点示意图
①从第一个结点开始,查找第i-1个元素,设为p指向该结点;
②设q指向第i个元素:
q=p->
③摘链,即将q元素从链表中摘除:
p->
next=q->
④保存q元素的数据:
x=q->
⑤释放q元素:
deleteq;
说明:
如果算法比较复杂,可以将多句代码合成一个步骤进行说明。
比如也可以这样写:
data
deleteq;
2.3其他
程序代码:
#include<
iostream>
usingnamespacestd;
template<
classT>
structNode
{
Tdata;
structNode<
*next;
};
classLinkList
public:
LinkList(){front=newNode<
front->
next=NULL;
}
LinkList(Ta[],intn);
~LinkList();
*Get(inti);
*Locate(intn,Node<
*s);
voidInsert(inti,Tx);
TDelete(inti);
intGetLength();
voidPrint();
private:
*front;
LinkList<
:
LinkList(Ta[],intn)//头插法
front=newNode<
front->
for(inti=n-1;
i>
=0;
i--)
{
Node<
/*template<
LinkList(Ta[],intn)//尾插法
*r=front;
for(inti=0;
n;
i++)
*s=newNode<
r->
r=s;
r->
}*/
~LinkList()//析构函数
*p=front;
front=p;
deletefront;
*LinkList<
Get(inti)
*p=front->
intj=1;
while(p&
&
j!
=i)
j++;
returnp;
Locate(intn,Node<
*s)
inti=1;
/*while(p&
data!
=n)
t=0;
if(p->
next)//
Locate(n,p->
next);
returnNULL;
*/
voidLinkList<
Insert(inti,Tx)
*p=Get(i);
{Node<
s->
//
输入有误"
TLinkList<
Delete(inti)
*p=front;
if(i!
=1)
p=Get(i-1);
*q=p->
next=q->
Tx=q->
returnx;
intLinkList<
GetLength()
inti=0;
i++;
p=p->
returni;
Print()
if(front->
next)
while(p)
cout<
data<
"
cout<
该表没有元素"
voidmain()
intx,y;
inta[6]={1,2,3,4,5,6};
LinkList<
int>
L(a,6);
L.Print();
请输入要插入的位置和数值:
cin>
>
x>
y;
L.Insert(x,y);
请输入要删除的元素序号:
x;
L.Delete(x);
请输入需要查找的元素序号:
L.Get(x)->
请输入需要查找的元素:
L.Locate(x,NULL);
L.GetLength();
3.程序运行结果
测试主函数流程:
流程图如图所示
输入插入的位置和数值
打印修改后序列
输入删除的位置
输入查找的关键值
打印查找关键值的位置
1、测试条件:
初始序列为123456
插入位置1数值6
是删除元素序号3
查找元素序号2
查找元素6
2、测试结论
插入位置1数值6后序列:
6123456
是删除元素序号3后序列:
613456
查找元素序号2后查找到序号2所对应元素为:
1
查找元素6查找到所对应元素序号为1和6
4.总结
本次实验我掌握了线性表的操作的实现方法,实现了线性表的基本功能:
使用头插法、尾插法两种方法构造了线性表,成功的插入了元素到指定位置,删除了指定元素,分别进行了按关键值查找和按序号查找,最后计算了链表的长度。
在程序调试过程中,主要的问题是总会有丢分号之类的小错误,整体来说,本次实验较为顺利。