实验一链式结构实现线性表Word文档格式.docx

上传人:b****2 文档编号:15241139 上传时间:2022-10-28 格式:DOCX 页数:13 大小:127.13KB
下载 相关 举报
实验一链式结构实现线性表Word文档格式.docx_第1页
第1页 / 共13页
实验一链式结构实现线性表Word文档格式.docx_第2页
第2页 / 共13页
实验一链式结构实现线性表Word文档格式.docx_第3页
第3页 / 共13页
实验一链式结构实现线性表Word文档格式.docx_第4页
第4页 / 共13页
实验一链式结构实现线性表Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

实验一链式结构实现线性表Word文档格式.docx

《实验一链式结构实现线性表Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一链式结构实现线性表Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

实验一链式结构实现线性表Word文档格式.docx

线性表的基本功能:

●构造:

使用头插法、尾插法两种方法

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.总结

本次实验我掌握了线性表的操作的实现方法,实现了线性表的基本功能:

使用头插法、尾插法两种方法构造了线性表,成功的插入了元素到指定位置,删除了指定元素,分别进行了按关键值查找和按序号查找,最后计算了链表的长度。

在程序调试过程中,主要的问题是总会有丢分号之类的小错误,整体来说,本次实验较为顺利。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1