ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:78.97KB ,
资源ID:28090515      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28090515.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮数据结构实验 第一次实验 线性表.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮数据结构实验 第一次实验 线性表.docx

1、北邮数据结构实验 第一次实验 线性表1实验要求(1) 实验目的通过选择下面题目进行实现,掌握如下内容: 熟悉C+语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力(2) 实验内容根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。线性表存储结构(五选一):1、 带头结点的单链表2、 不带头结点的单链表3、 循环链表4、 双链表5、 静态链表线性表的基本功能:1、 构造:使用头插法、尾插法两种方法2、 插入:要求建立的链表按照关键字从小到大有序3、 删除4、 查找:按

2、位置查找和按值查找5、 获取链表长度6、 销毁7、 其他:可自行定义编写测试main()函数测试线性表的正确性。2. 程序分析2.1 存储结构 储存结构: 单链表a3 1080Ha110C0Ha4a21000H地址 内存单元结点 1000H 结点头指针 1020H结点 1080H 10C0H结点2.2 关键算法分析一、关键算法:1头插法 自然语言描述:a:在堆中建立新结点b:将ai写入新结点的数据域c:修改新结点的指针域d:修改头结点的指针域。将新结点加入链表中。 2.尾插法 伪代码描述: a: Node *s=new Node b:s-data=ai; c:r-next=s; d:r=s;

3、3.析构/删除函数 a:Node*p=front b:while(p) c:front=p d:p=p-next e:delete front 4.按位查找函数 a:Node*p=front-next;j=1; b:while(p&j!=1) b1:p=p-next; b2:j+: c:if(!p) throw”end” d:return p; 5.按值查找函数 a:Node *p=front-next;j=1; b:while(p) b1: if(p-next=x) return j p=p-next; j+ c:return “error” 6.插入函数 a:Node *s=new Nod

4、e ; b:s-data=p-data c:s-next=p-next; d:p-next=s e:p-data=x 7.删除函数 a:q=p-next; b:p-next=q-next c:x=q-data d:delete q 8.遍历打印函数 If front-next=NULL Throw “an empty list” Node*temp=front-next; While(temp-next) coutdatanext; 9.获取链表长度函数 Int n=0; If front-next=NULL n=0; else Node*temp=front-next; While(temp

5、-next) n+; temp=temp-next; Return n; 二、代码详细分析 1.删除算法:图1 删除结点示意图算法步骤:从第一个结点开始,查找第i-1个元素,设为p指向该a结点;设q指向第i个元素:q = p-next;摘链,即将q元素从链表中摘除:p-next = q-next;保存q元素的数据:x = q-data;释放q元素:delete q; 2.头插法 关键代码: a:在堆中建立新结点: Node *s=new Node; b:将ai写入到新结点的数据域 s-data=ai; c:修改新结点的指针域 s-next=front-next; d:修改头结点的指针域 fro

6、nt-next=s; front s front 3.尾插法 关键代码: a:在堆中建立新结点 Node*s=new Node ; b:将数据写入结点的数据域 s-data=ai; c将新结点加入到链表中:r-next=s; d 修改尾指针 r=s; r Front Front S 4.查找算法 关键代码: a Node*p=front-next;int j=1; b while(p&j!=1) p=p-next; j+; front P(j=1) P(j=2) P(j=i) P(j=n)三、计算关键算法的时间、空间复杂度 头插法/尾插法 O(n); 按位/按值查找 O(n); 插入操作 O(

7、n);3. 程序运行结果 运行结果:流程图:开始初始化一个对象初始化一个整数数组,作为赋值准备 分别利用头插法和尾插法初始化,并用遍历打印函数来显示数值执行删除函数,之后用遍历打印函数测试是否真的删除执行插入函数,之后用遍历打印函数测试是否真的插入执行按位查找和按值查找结束问题规模的数量级为10,插入元素位置为第10个,删除第3个4. 总结 1.调试时出现的问题及解决方法: 按位查找时,返回值与计数器j的关系没有找对,导致返回值不在链表中,解决:重新计算两者关系。2.心得体会通过这次实验,我熟悉了链表的储存结构以及各种操作3.改进:适当简化某些过程,使程序更精简。 源文件:#includeus

8、ing namespace std;template struct Node T data; struct Node*next; ; template class LinkList public: LinkList()front=new Node;front-next=NULL; void hLinkList(T a,int n);/头插法 void rLinkList(T a,int n);/尾插法 LinkList();/析构/删除 int GetLength();/获取长度 Node *Get(int i); int Locate(T x); void Insert(int i,T x)

9、; T Delete(int i); void PrintList(); private: Node*front; ; template void LinkList:hLinkList(T a,int n) front=new Node; front-next=NULL; for(int i=n-1;i0;i-) Node *s=new Node; s-data=ai; s-next=front-next; front-next=s; ; template void LinkList:rLinkList(T a,int n) front=new Node; Node*r=front; for(

10、int i=0;i=n-1;i+) Node *s=new Node ; s-data=ai; r-next=s; r=s; r-next=NULL; ; template LinkList:LinkList() Node*temp=front; while(temp) front=temp; temp=temp-next; delete front; ; template Node*LinkList:Get(int i) Node*p=front-next; int j=1; while(p&j!=i) p=p-next; j+; if(!p) throw查找位置非法; else retur

11、n p; ; template int LinkList:Locate(T x) Node*p=front-next; int j=1; while(p) if(p-data=x)return 4*j; p=p-next; j+; ; return -1; /对查找位置异常的处理,返回-1 ; template void LinkList:Insert(int i,T x) Node*p=front; if(i!=1)p=Get(i-1); if(p) Node*s=new Node; s-data=x; s-next=p-next; p-next=s; else throw插入位置错误; ;

12、 template T LinkList:Delete(int i) Node*p=front; if(i!=1)p=Get(i-1); Node*q=p-next; p-next=q-next; T x=q-data; delete q; return x; ; template void LinkList:PrintList() /遍历打印链表元素 if(front-next=NULL) cout该链表为空链表endl; Node*temp=front-next; while(temp-next) coutdatanext; ; template int LinkList:GetLengt

13、h() int n=0; if(front-next=NULL) n=0; else Node*temp=front-next; while(temp-next) n+; temp=temp-next; return n; ; void main() LinkList linklist1; int all100; for(int i=0;i100;i+) alli=2*i; ; linklist1.hLinkList(all,50); cout利用遍历函数打印输出所有的数值:endl; linklist1.PrintList(); coutendl; int m=linklist1.GetLength(); cout利用获取长度获取该链表的长度为:endlm; coutendl; cout利用查找函数查找20所在的地址为:endllinklist1.Get(20)endl; cout利用按位查找函数查找第30个数据为:endllinklist1.Locate(30)endl; cout插入函数,插入后遍历打印结果为:endl; linklist1.Insert(10,3445); linklist1.PrintList(); coutendl; cout删除某一位后的结果为:endl; linklist1.Delete(3); linklist1.PrintList();

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

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