数据结构实验一题目一线性表实验报告Word下载.docx
- 文档编号:21703748
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:13
- 大小:92KB
数据结构实验一题目一线性表实验报告Word下载.docx
《数据结构实验一题目一线性表实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验一题目一线性表实验报告Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
要求建立链表根据关键字从小到大有序
3、删除
4、查找
5、获取链表长度
6、销毁
7、其她:
可自行定义
编写测试main()函数测试线性表正确性。
2.程序分析
2.1存放结构
带头结点单链表
2.2关键算法分析
1.头插法
a、伪代码实现:
在堆中建立新结点
将x写入到新结点数据域
修改新结点指针域
修改头结点指针域,将新结点加入链表中
b、代码实现:
Linklist:
:
Linklist(inta[],intn)//头插法
{front=newNode;
front->
next=NULL;
for(inti=n-1;
i>
=0;
i--)
{Node*s=newNode;
s->
data=a[i];
next=front->
next;
next=s;
}
2、尾插法
a.在堆中建立新结点
b.将a[i]写入到新结点数据域
c.将新结点加入到链表中
d.修改修改尾指针
Linklist:
Linklist(inta[],intn,intm)//尾插法
Node*r=front;
for(inti=0;
i<
n;
i++)
r->
r=s;
时间复杂度:
O(n)
3、按位查找
初始化工作指针p和计数器j,p指向第一个结点,j=1
循环以下操作,直到p为空或者j等于1
b1:
p指向下一个结点
b2:
j加1
若p为空,说明第i个元素不存在,抛出异常
不然,说明p指向元素就是所查找元素,返回元素地址
b、代码实现
Node*Linklist:
Get(inti)//得到指向第i个数指针
{Node*p=front->
intj=1;
while(p&
&
j!
=i)//p非空且j不等于i,指针后移
{p=p->
j++;
returnp;
4、插入操作
假如链表为空,直接插入
判定p下一个结点值大于x且p值小于x
在堆中建立新结点
将要插入结点数据写入到新结点数据域
修改新结点指针域
修改前一个指针指针域,使其指向新插入结点位置
voidLinklist:
Insert(intx)//将x按次序插入
if(!
p)//假如链表为空,直接插入
data=x;
else
while(!
((p->
next->
data>
x)&
(p->
data<
x)))//判定p下一个结点值大于x且p值小于x
Node*s=newNode;
//将x插入到p以后
next=p->
p->
5、删除操作
从第一个结点开始,查找要删除位数i前一个位置i-1结点
设q指向第i个元素
将q元素从链表中删除
保留q元素数据
释放q元素
intLinklist:
Delete(inti)//删除第i个位置结点
{Node*p=front;
if(i!
=1)
p=Get(i-1);
//得到第i-1个位置指针
Node*q=p->
next=q->
intx=q->
data;
deleteq;
returnx;
6遍历打印函数
判定该链表是否为空链表,假如是,报错
假如不是空链表,新建立一个temp指针
将temp指针指向头结点
打印temp指针data域
逐一往后移动temp指针,直到temp指针指向指针next域为空
show()//打印数组元素
while(p)
{
cout<
<
"
"
;
p=p->
7.获取链表长度函数
判定该链表是否为空链表,假如是,输出长度0
假如不是空链表,新建立一个temp指针,初始化整形数n为0
将temp指针指向头结点
判定temp指针指向结点next域是否为空,假如不是,n加一,不然returnn
使temp指针逐一后移,反复d操作,直到temp指针指向结点next域为0,返回n
b、代码实现
Getlength()//得到数组长度
intj=0;
j;
2.3其她
源代码
#include<
iostream>
usingnamespacestd;
structNode
{intdata;
structNode*next;
};
classLinklist
{public:
Linklist(inta[],intn);
Linklist(inta[],intn,intm);
Node*Get(inti);
voidInsert(intx);
intDelete(inti);
intLocate(intx);
voidGetlength();
voidshow();
~Linklist();
private:
Node*front;
Locate(intx)//得到值为x位置
{if(p->
data==x)
returnj;
return-1;
~Linklist()//析构
{front=p;
deletefront;
voidmain()//主函数
{inta[10]={1,2,3,4,5,6,7,8,9,11};
LinklistA(a,10);
LinklistB(a,10,1);
原数组为:
A.show();
endl;
A.Insert(10);
插入操作后数组变为:
A.Delete(7);
删除操作后数组为:
A.Locate
(1);
数组长度为:
A.Getlength();
A.~Linklist();
}
3.程序运行结果
1.测试主函数步骤:
2、运行结果
4.总结
调试时出现问题及处理方法:
在设计将x按次序插入函数时,没有分清p->
data和p->
data区分,经过认真查阅和了解书本知识处理。
心得体会:
了解了单链表基础操作函数实现,对链式存放结构有了很好认识
下一步改善:
增加程序可读性,注意注释添加。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 题目 线性 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)