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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验一线性表应用.docx

1、实验一线性表应用实验报告学院(系)名称:计算机与通信工程学院*学号*专业计算机科学与技术班级2015级*班实验项目实验一:线性表应用课程名称数据结构与算法课程代码0661013实验时间2017年3月9日第一节实验地点7-219考核标准实验过程25分程序运行20分回答问题15分实验报告30分特色功能5分考勤违纪情况5分成绩成绩栏其它批改意见:教师签字:考核容评价在实验课堂中的表现,包括实验态度、编写程序过程等容等。功能完善, 功能不全有小错无法运行正确基本正确有提示无法回答完整较完整一般容极少无报告有无有无一、实验目的实验目的:理解线性表的逻辑特点;掌握顺序表、链表存储结构,以及线性表的基本操作

2、,如插入、删除、查找,以及线性表合并等操作在顺序存储结构和链式存储结构上的实现算法,并能够在实际问题背景下的灵活运用线性表来解决问题,实现相应算法。二、实验题目与要求1一元稀疏多项式简单的计算器1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器2)要求: (1)采用单链表存储结构一元稀疏多项式(2)输入并建立多项式(3)输出多项式(4)实现多项式加、减运算 3)分析算法时间复杂度2. 约瑟夫环问题 1)问题描述:有编号为 1, 2n 的 n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数 m,从第一个人按顺时针方向自 1 开始报数,报到 m 者出列,不再参

3、加报数,这时将出列者的密码作为 m,从出列者顺时针方向的下一人开始重新自 1 开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。 2)要求: 采用顺序和链式两种存储结构实现3)分析算法时间复杂度3单链表基本操作练习1)问题描述:在主程序中提供下列菜单:1建立链表2连接链表3输出链表0结束2)实验要求:算法中包含下列过程,分别完成相应的功能:CreateLinklist(): 从键盘输入数据,创建单链表ContLinklist():将前面建立的两个单链表首尾相连OutputLinklist():输出显示单链表3)分析算法时间复杂度4单链表基本操作练习1)问题描述:已知单链表 L

4、(带头节点)是一个递增有序表,试编写算法,删除表中值大于 min 且小于 max 的节点(若表中有这样的节点),同时释放被删节点的空间。2)实验要求:min 和 max 是两个给定参数。3)分析算法时间复杂三、 实验过程与实验结果应包括如下主要容: 数据结构定义 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 算法设计思路简介 通过建立包含数据和指针的节点来保存数据,然后将一系列节点

5、通过指针插入到链表中去,实现建立链表,插入、删除节点,进而组合各种基本功能,编写符合题目要求的算法。 算法描述:可以用自然语言、伪代码或流程图等方式 1、 (1)将多项式各项的系数和指数分别存在A、B两个链表的中。 (2)用指针Pa、Pb分别指向连个链表的首元素。 (3)遍历两个链表,比较各元素的指数,若相同则相加减,将结果插入新表中,若不相等则将指数较小的插入新表中,继续向后遍历,直到其中一个链表到达表尾。 (4)将另一表中的剩余元素按指数大小顺序全部插入到新表中。 (5)新表中的元素按规定格式输出既为相加或相减后的多项式。 3、 (1)通过构造函数创建单链表 (2)通过循环变量temp找到

6、第一个链表的尾部设为p。 (3)使p的next指向第二个链表的第一个元素 (4)将连接后的两链表输出 4、 (1)用两个变量minZ,maxZ分别存储输入的最小值和最大值 (2)遍历整个单链表,将小于minZ和大于maxZ的节点删除 (3)输出操作后的单链表 算法的实现和测试结果:包括算法运行时的输入、输出,实验中出现的问题及解决办法等 出现问题 无法返回操作后的单链表 解决办法 经老师直到后,在相关函数前面加*成功返回操作后的单链表 1、3、 4、 算法时间复杂度分析 1、O(1表长度+2表长度)-可视为O(n) 3、O(1表长度+2表长度)-可视为O(n) 4、O(n) 四、收获与体会线性

7、表分为顺序表和链表,其中顺序表已相当熟悉,主要练了新接触的链表,感觉现在才真正体会到指针的魅力之处。同时也明白了顺序表和链表的优缺点,在老师的知道下,更增进了对C+的理解。算法相对来说还是比较简单的,很容易理解,关键在如何把算法变成你想要的计算机程序,在实验课以及平时的训练中,自己对代码的理解、控制能力都有所提高。五、源代码清单采取分文件方式编写源代码1、节点文件Node.hclass Node /元素节点public: Node(int iCoef = 0,int iExp = 0); void printNode();/打印函数 int coef;/系数 int exp;/指数 Node

8、*next;Node.cpp#includeNode.h#includeusingnamespace std;Node:Node(int iCoef,int iExp) coef = iCoef; exp = iExp;void Node:printNode() if(exp = 0) cout coef x; else cout coef x exp; 链表文件List1.h#includeNode.hclass List public: List();/建立链表 List();/销毁链表 void ClearList();/清空链表 bool ListInsert(int i,Node *

9、pNode);/从指定位置将元素插入链表 bool ListInsertTail(Node *pNode);/从尾部将元素插入链表 List *ListAdd(List *pList1,List *pList2);/多项式相加函数 List *ListMinus(List *pList1,List *pList2);/多项式相减函数 void ListTraverse();/遍历输出函数private: int m_iLength;/链表长度 Node *m_pList;/头指针;List1.cpp#include#includeList1.husingnamespace std;List:L

10、ist() m_pList = new Node; m_pList-coef = 0; m_pList-exp = 0; m_pList-next = NULL; m_iLength = 0;void List:ClearList() Node *CurrentNode = m_pList-next; while(CurrentNode != NULL) Node *temp = CurrentNode-next; delete CurrentNode; CurrentNode = temp; m_pList-next = NULL;List:List() ClearList(); delet

11、e m_pList; m_pList = NULL;bool List:ListInsert(int i,Node *pNode) Node *NewNode = new Node(); if(i m_iLength + 1) cout 插入位置不合法. endl; returnfalse; elseif(NewNode = NULL) cout 申请存失败. endl; returnfalse; else Node *temp = m_pList; for(int k = 0;k next; NewNode-coef = pNode-coef; NewNode-exp = pNode-exp

12、; NewNode-next = temp-next; temp-next = NewNode; m_iLength+; returntrue; bool List:ListInsertTail(Node *pNode) Node *NewNode = new Node(); if(NewNode = NULL) cout 申请存失败.next != NULL) temp = temp-next; NewNode-coef = pNode-coef; NewNode-exp = pNode-exp; temp-next = NewNode; NewNode-next = NULL; m_iLe

13、ngth+; returntrue; List *List:ListAdd(List *pList1,List *pList2) Node *Pa,*Pb; int x; List *pList3 = new List(); Pa = pList1-m_pList-next; Pb = pList2-m_pList-next; while(Pa & Pb) if(Pa-exp = Pb-exp) x = Pa-coef + Pb-coef; if(x != 0) Node *n = new Node(); n-coef = x; n-exp = Pa-exp; pList3-ListInser

14、tTail(n); Pa = Pa-next; Pb = Pb-next; elseif(Pa-exp exp) Node *n = new Node(); n-coef = Pa-coef; n-exp = Pa-exp; pList3-ListInsertTail(n); Pa = Pa-next; elseif(Pa-exp Pb-exp) Node *n = new Node(); n-coef = Pb-coef; n-exp = Pb-exp; pList3-ListInsertTail(n); Pb = Pb-next; while(Pa) Node *n = new Node(

15、); n-coef = Pa-coef; n-exp = Pa-exp; pList3-ListInsertTail(n); Pa = Pa-next; while(Pb) Node *n = new Node(); n-coef = Pb-coef; n-exp = Pb-exp; pList3-ListInsertTail(n); Pb = Pb-next; return pList3; List *List:ListMinus(List *pList1,List *pList2) Node *Pa,*Pb; int x; List *pList3 = new List(); Pa = p

16、List1-m_pList-next; Pb = pList2-m_pList-next; while(Pa & Pb) if(Pa-exp = Pb-exp) x = Pa-coef - Pb-coef; if(x != 0) Node *n = new Node(); n-coef = x; n-exp = Pa-exp; pList3-ListInsertTail(n); Pa = Pa-next; Pb = Pb-next; elseif(Pa-exp exp) Node *n = new Node(); n-coef = Pa-coef; n-exp = Pa-exp; pList3

17、-ListInsertTail(n); Pa = Pa-next; elseif(Pa-exp Pb-exp) Node *n = new Node(); n-coef = Pb-coef; n-exp = Pb-exp; pList3-ListInsertTail(n); Pb = Pb-next; while(Pa) Node *n = new Node(); n-coef = Pa-coef; n-exp = Pa-exp; pList3-ListInsertTail(n); Pa = Pa-next; while(Pb) Node *n = new Node(); n-coef = P

18、b-coef; n-exp = Pb-exp; pList3-ListInsertTail(n); Pb = Pb-next; return pList3; void List:ListTraverse() Node *temp = m_pList-next; cout printNode(); if(temp-next != NULL) if(temp-next-coef 0) cout next-coef = 0) continue; else cout next; cout endl;主文件Demo.cpp#includeList1.h#includeusingnamespace std

19、;int main() Node *n0 = new Node(20,0); Node *n1 = new Node(4,2); Node *n2 = new Node(2,5); Node *n3 = new Node(7,9); Node *n4 = new Node(5,12); Node *n5 = new Node(-11,18); List *pList1 = new List(); pList1-ListInsert(1,n0); pList1-ListInsert(2,n1); pList1-ListInsert(3,n2); pList1-ListInsert(4,n3);

20、pList1-ListInsert(5,n4); pList1-ListInsertTail(n5); pList1-ListTraverse(); Node *m1 = new Node(12,3); Node *m2 = new Node(2,5); Node *m3 = new Node(9,8); Node *m4 = new Node(20,9); Node *m5 = new Node(11,18); List *pList2 = new List(); pList2-ListInsert(1,m1); pList2-ListInsert(2,m2); pList2-ListIns

21、ert(3,m3); pList2-ListInsert(4,m4); pList2-ListInsert(5,m5); pList2-ListTraverse(); List *pList4 = new List(); pList4 = pList4-ListAdd(pList1,pList2); pList4-ListTraverse(); pList4 = pList4-ListMinus(pList1,pList2); pList4-ListTraverse(); return 0;3、节点文件Node.hclass Node public: int data; Node *next;

22、 Node(int iData = 0); void printNode();Node.cpp#includeNode.h#includeusing namespace std;Node:Node(int iData) data = iData;void Node:printNode() cout data ;链表文件List.h#includeNode.hclass List public: List();/建立链表 List();/销毁链表 void ClearList();/清空链表 bool ListInsertTail(Node *pNode);/从尾部插入元素 List *Cont

23、Linklist(List *pList1,List *pList2);/连接链表 void OutputLinklist();/输出链表private: Node *m_pList; int m_iLength;List.cpp#includeList.h#includeusing namespace std;List:List() m_pList = new Node(); m_pList-data = 0; m_pList-next = NULL; m_iLength = 0;List *List:ContLinklist(List *pList1,List *pList2) List

24、*pList3 = pList1; Node *temp = pList3-m_pList; while(temp-next != NULL) temp = temp-next; temp-next = pList2-m_pList-next; return pList3;void List:OutputLinklist() Node *temp = m_pList; while(temp-next != NULL) temp = temp-next; temp-printNode(); bool List:ListInsertTail(Node *pNode) Node *NewNode =

25、 new Node(); if(NewNode = NULL) cout申请存失败.next != NULL) temp = temp-next; NewNode-data = pNode-data; temp-next = NewNode; NewNode-next = NULL; m_iLength+; return true; void List:ClearList() Node *CurrentNode = m_pList-next; while(CurrentNode != NULL) Node *temp = CurrentNode-next; delete CurrentNode; CurrentNode = temp; m_pList-next = NULL;List:List() ClearList(); delete m_pList; m_pList = NULL;主文件Demo.cpp#includeList.h#includeusing namespace std;int main() Node *n1 = new Node(3); Node *n2 = new Node(7); Node *n3 = new Node(5); Node *n4 = new Node(6); Node *n5 =

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

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