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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构与算法》课程设计.docx

1、数据结构与算法课程设计数据结构与算法课程设计实习一需求规格说明1、单链表的输出要求:使用“递归”算法实现单链表中数据的顺序和逆序输出,但不允许引入额外的空间复杂度。总体分析与设计利用链表的存储结构,并采用递归的思想;主函数 void OpSeqOutput(int n) void SeqOutput() 利用主函数调用void OpSeqOutput(int n)和void SeqOutput()实现数序列逆序和顺序输出;编码void SeqOutput()利用递归的方法,输出头结点后,删除该节点;void OpSeqOutput(int n)利用递归的方法,为尾节点计数,并依次逆序输出;程序

2、及算法分析输入n个数进行测试,输出结果:List is: 5 4 9 8 7 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4 3 2 1 5 4 9 8 7 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4 3 2 1 5 4 9 8 7 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4 3 2 1List sequence reverse output:1 2 3 4 5 2 8 9

3、 2 4 6 2 4 5 6 7 8 9 3 5 7 6 5 4 6 8 6 9 8 7 6 5 4 7 8 9 4 5 1 23 4 5 2 8 9 2 4 6 2 4 5 6 7 8 9 3 5 7 6 5 4 6 8 6 9 8 7 6 5 4 7 8 9 4 5 1 2 3 45 2 8 9 2 4 6 2 4 5 6 7 8 9 3 5 7 6 5 4 6 8 6 9 8 7 6 5 4 7 8 9 4 5List sequence output:5 4 9 8 7 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4

4、 3 2 1 5 49 8 7 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4 3 2 1 5 4 9 87 4 5 6 7 8 9 6 8 6 4 5 6 7 5 3 9 8 7 6 5 4 2 6 4 2 9 8 2 5 4 3 2 1请按任意键继续. . .采用递归的方法,如果数序列较大,则时间复杂度较大;小结利用递归的方法空间复杂度较小;附录void Chain:SeqOutput() ChainNode *current=first; if(current) int i=0; T x; coutdata ; i+

5、; Delete(i,x); SeqOutput(); else coutendl; /*coutList sequence sequence output over!endl;*/逆序输出template void Chain:OpSeqOutput(int n) ChainNode *current=first; ChainNode *trail; if(first & n0) for(int i=0;current&ilink; coutdata ; OpSeqOutput(n-1); /*coutList sequence reverse output over!endl;*/ 实习二

6、需求规格说明2、二值图像的像元分组算法简介:二值图像中每个元素的值只能为1或0,其中1表示有效像元,0表示图像的背景。如果一个元素在另外一个元素的上、下、左、右四个方向,称两个元素为相邻元素。“像元分组”算法是将二值图像中处于相邻的元素进行分组标号,使得属于同一个分组的像元集合,其编号都相同。如下图所示:110000110000000100001101001001000001110000110000000200002203002003000003 分组前 分组后 要求:使用“队列”来实现二值图像的像元分组,图像数据采用TXT文件形式给出,把分组结果图像输出到另外一个文件总体分析与设计利用队列的

7、存储结构;数字化图像是一个m*n的像素矩阵。识别图元就是对元像素进行标记,当且仅当两个像素属于同一图元时,它们的标号相同;在识别图元的过程中,图像的周围包上一圈空白像素(即0像素);采用数组0offset来确定与一个给定像素相邻的像素。通过逐行扫描像素来识别图元。当遇到一个没有标号的图元的像素时,就给它指定一个图元编号(使用数字2、3、等为图元编号),该像素就为一个新图元种子,通过识别和标记与种子相邻的所有图元像素,可以确定图元中的其它像素。编码先在图像外围包上一圈背景像素,并对offset进行初始化,接下来的两个for循环通过扫描图像寻找下一个图元的种子。再图元标号设置为种子标号,接下来借助

8、于链表队列的帮助,可以识别出该图元的其余像素。程序及算法分析1091 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 3 3 3 3 3 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 3 3 3 0 0 1 1 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 5 5 5 0 0 1 1 1 0 0 0 0

9、 0 0 6 6 6 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 7 7 7 0 8 0 对于任一个图元来说,识别标记该图元的的每个像素(种子除外)所需时间为O(cnum),识别并标记所有非种子图元像素所需要的总时间为()。小结其存储方式可以用公式化队列,链表堆栈,或公式化堆栈。附录#include stdafx.h#include Disgra.h#include #include using namespace std;#define max 40int _tmain(int argc, _TC

10、HAR* argv) ifstream f1(data.txt,ios:_Nocreate); Disgra D; /创建Disgra的对象D D.pixel; int rows(0),cols(0); f1rowscols; /读入行数和列数 int n(0); for(int i=0;irows;i+) for(int j=0;jn; /读入像元数据,并存入pixel数组 D.pixelij=n; f1.close(); D.Lable(rows,cols); /调用函数Lable ofstream f2(data2.txt,ios:out); int l(0); /计数 for(int

11、i=0;irows;i+) for(int j=0;jcols;j+) l+; f2D.pixelij ; /输出被标记的像元 if(l=9) f2endl; l=0; f2.close(); return 0;#ifndef Disgra_#define Disgra_#include positoin.h#include lqueue.h#define MAXSIZE 50struct Disgra int pixelMAXSIZEMAXSIZE; /存储数据的二维数组 void Lable(int rows,int cols);/标记函数;void Disgra:Lable(int ro

12、ws,int cols) /*int pixelMAXSIZEMAXSIZE;*/ /*int rows(0),cols(0);*/ for(int i=0;i=cols;i+) pixel0i=pixelrows+1i=0; for(int i=0;irows;i+) pixeli0=pixelicols+1=0; Position offset4; offset0.row=0;offset0.col=1; offset1.row=1;offset1.col=0; offset2.row=0;offset2.col=-1; offset3.row=-1;offset3.col=0; int

13、NumOfNbrs=4; LinkedQueue Q; int id=1; Position here,nbr; for(int r=1;r=rows;r+) for(int c=1;c=cols;c+) if(pixelrc=1) pixelrc=+id; here.row=r;here.col=c; do for(int i=0;iNumOfNbrs;i+) nbr.row=here.row+offseti.row; nbr.col=here.col+offseti.col; if(pixelnbr.rownbr.col=1) pixelnbr.rownbr.col=id; Q.Add(n

14、br); if(Q.IsEmpty()break; Q.Delete(here); while(true); #endif实习三需求规格说明3、课程安排问题一套好的课程体系有如下要求:各个课程之间有着严格的先后顺序关系;两个相邻课程之间的跨度为一个时间段(具体就是一个学期)。课程安排问题,是为了验证专业课程安排方案是否合理,并提供多种选课方案供学生进行选择。现有软件工程专业课程表(采用TXT文件格式),格式如下:课程代号 课程名称 先修课程代号11049 高等代数C25003 计算机高级语言22222 计算机导论33333 计算机结构与组成 25003,22222要求:使用“拓扑排序”算法,设

15、计一个程序:(1)验证软件工程专业课程表是否合理?若不合理,指出并修改不合理的课程安排,产生新的软件工程专业课程表;(2)对软件工程专业课程表,输出多种选课方案,以供学生进行选择。总体分析与设计利用图和栈存储结构;并利用贪婪算法来求解问题;有向图的顶点代表任务,有向边(,)表示先后关系,任务开始前任务必须完成。利用数组来描述课程,用一个栈来保存可加入的候选点,并用一维数组,表示与顶点相连的节点数目,其中顶点不是中的成员,它们之间有向图得边为(,),当变为时,表示成为一个候选点。序列初始时为空。为顶点的入度。每次向中加入一个顶点时,所有与新加入顶点临接的顶点,其减主函数bool Topologi

16、cal(int v)S.Add(i)Begin(w)S.Delete(w)NextVertex(w)编码每一步,从栈中去出一个顶点将其加入,同时减去与其邻接的顶点的值。程序及算法分析测试数据:课程代号 课程名称 先修课程代号11049 高等代数C25003 计算机高级语言22222 计算机导论33333 计算机结构与组成 25003,2222244444 软件工程概论 2222255555 面向对象程序设计 2500311016 离散数学 11049,2500325057 数据结构与算法 11016,2500366666 操作系统 33333,2505770000 计算机网络 25057700

17、10 统一建模语言 44444,5555570020 软件需求 4444470030 软件测试 4444470040 软件过程与管理 70020,7003070050 软件项目管理 7004070060 软件能力成熟度模型 70050运行结果:软公选课课程推荐表:课程代号 课程名称22222 计算机导论25003 计算机高级语言33333 计算机结构与组成11049 高等代数C11016 离散数学55555 面向对象程序设计25057 数据结构与算法66666 操作系统44444 软件工程概论70010 统一建模语言70020 软件需求70030 软件测试70040 软件过程与管理70050

18、软件项目管理70060 软件能力成熟度模型70000 计算机网络第一和第三个循环的时间开销为(),利用邻接矩阵,改程序的时间复杂度为()小结当算法失败时,有向图没有拓扑序列,若算法没有失败,则为一个拓扑序列。附录bool Network:Topological(int v)/ Compute topological ordering of digraph vertices. / Return true if a topological order is found. / In this case return the order in v0:n-1. / Return false if the

19、re is no topological order. int n = Vertices(); / Compute in-degrees int *InDegree = new int n+1; InitializePos(); / graph iterator array for (int i = 1; i = n; i+) / initialize InDegreei = 0; for (int i = 1; i = n; i+) / edges out of i int u = Begin(i); while (u) InDegreeu+; u = NextVertex(i); / St

20、ack vertices with zero in-degree LinkedStack S; for (int i = 1; i = n; i+) if (!InDegreei) S.Add(i); / Generate topological order int i = 0; / cursor for array v while (!S.IsEmpty() / select from stack int w; / next vertex S.Delete(w); vi+ = w; int u = Begin(w); while (u) / update in-degrees InDegre

21、eu-; if (!InDegreeu) S.Add(u); u = NextVertex(w); DeactivatePos(); delete InDegree; return (i = n);/ CourseSequence.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include course.h#include #include using namespace std;#include ldigraph.hint _tmain(int argc, _TCHAR* argv) ifstream f1(data.txt,ios:_Nocreate);

22、int n=0; /读取文件 f1n; int *T=new intn+1; /*for(int i=0;in;i+) Ti=0; */ course* Mycou=new coursen+1; /*course* T_Mycou=new couresn+1;*/ for(int i=0;iMycoui.vMycoui.numMycoui.nameMycoui.fnum1; else if(i=0|i=1|i=2) f1Mycoui.vMycoui.numMycoui.name; else f1Mycoui.vMycoui.numMycoui.nameMycoui.fnum1Mycoui.fn

23、um2; f1.close(); /初始化图 LinkedDigraph DG(n); for(int i=0;in;i+) if(Mycoui.v=10|Mycoui.v=12|Mycoui.v=13|Mycoui.v=15|Mycoui.v=16) DG.Add(Mycoui.fnum1,Mycoui.v); else if(Mycoui.v=1|Mycoui.v=2|Mycoui.v=3) continue; else DG.Add(Mycoui.fnum1,Mycoui.v); DG.Add(Mycoui.fnum2,Mycoui.v); /*cout The graph is end

24、l; DG.Output();*/ DG.Topological(T);/拓扑排序 ofstream f2(data1.txt,ios:out); f2软公选课课程推荐表:endl; f2课程代号 课程名称endl; /输出排序后课表 for(int i=0;in;i+) f2MycouTi-1.num MycouTi-1.nameendl; f2.close(); return 0; 实习四需求规格说明电话簿软件的实现(动态查找表算法的应用)【问题描述】 在很多实际应用中,动态索引结构在文件创建或初始装入记录时生成,在系统运行过程中插入或删除记录时,为了保持较好的检索性能,索引结构本身将随之

25、发生改变。教材上已经介绍的动态查找数据结构包括:二叉搜索树(BST)、平衡二叉树(AVL)、红黑树(RBT)、B-树。本题要求选取一种已经学过的动态搜索树结构,设计并实现一个手机电话薄软件。【基本要求】一个完整的电话簿软件应具有以下功能:(1)支持复式电话簿数据的存储,数据条目不少于500条。每个人名下可保存的信息包括:姓名、手机号码、住宅电话号码、办公电话号码、电子邮件地址、所属群组、备忘录等。(2)支持电话簿记录的添加、删除、编辑等操作。(3)将不同类型的人群按照同事、朋友、家人、商务伙伴等分组,支持群组记录的添加、删除、编辑等操作。(4)支持所有电话簿记录的导入、导出操作,外部数据采用T

26、XT格式。(5)支持电话簿记录的各种查询操作,具体包括: 逐条翻看能显示所有的电话簿记录,支持分屏查看。 电话号码查找输入一个电话号码(手机、住宅、办公),能将包含该号码的电话簿记录显示出来。 人名查找 输入一个人名(全名或者部分名),能将包含该姓名的电话簿记录显示出来。 群组查找 选择一种群组类型,能将属于该群组的所有电话簿记录显示出来。(6)要求使用BST或者AVL实现动态索引结构。【提高要求】(1)系统支持铃声库和图片库的数据存储,提供添加、删除、修改、播放等操作。铃声库和图片库可直接使用文件目录进行管理;铃声格式可使用WAV、MP3或者WMA格式;图片格式可使用BMP、JPG等格式。(2)电话簿记录信息支持:来电铃声、来电图片等信息,用户可通过界面编辑或者浏览某条电话簿记录的来电铃声、来电图片。(3)人名查询支持:输入姓名的首字母查找。(4)使用红黑树或者B-树的数据结构,来实现动态索引结构。【测试数据】自行随机生成5001000条电话簿数据记录。【实现提示】(1)设计合适的电话簿数据文件格式;(2)设计合适的索引文件格式。 总体分析与设计利用二叉搜索数为存储结构进

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

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