数据结构实习报告共8篇.docx
《数据结构实习报告共8篇.docx》由会员分享,可在线阅读,更多相关《数据结构实习报告共8篇.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构实习报告共8篇
数据结构实习报告(共8篇)
数据结构实习报告(共8篇)
第1篇:
数据结构实_报告附件:
实_报告格式,如下:
数据结构实_报告班级:
姓名:
xxx(1514)xxx(1514)xxx(1514)指导教师:
日期:
题目
一、问题描述(把你所选的题目及要求说一下)二、概要设计(抽象数据类型定义)三、详细设计(主要算法和函数间的调用关系)四、调试分析(调式过程中出现的问题及如何改正)五、心得体会(组内成员的分工及实_期间的体会)六、用户手册(系统的使用方法介绍)可参照_题集上的实_报告格式。
第2篇:
数据结构实_报告数据结构实_报告班级:
13软件二班姓名:
殷健学号:
1345536225子集和数问题1:
问题描述子集和数问题1:
子集和问题的为W,c。
其中,W=w1,w2,.,wn是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得W1=cW(02:
问题分析程序中设计了函数voidputeSumofSub(ints,intk,intr),其意义是从
第k项开始,如果s(已经决策的和数)和wk(当前元素)之和为和数,就把结果输出来,否则如果s与,wk,wk+1之和小于和数,则调用puteSumofsub(s+wk,k+1,r-wk),意为选择此结点的左分支,再判断s和后面所有元素之和是否不小于M(所有的加起来都小,必定无解),并且s+wk+1M,也是无解),若条件符合即调用puteSumofSub(s,k+1,r-wk),即选择当前结点的右分支。
算法展示:
#includeusingnamespacestd;#include#include#defineM50claSumOfSubprivate:
intwM;intm;intxM;public:
SumOfSub(inta,intb,intn)for(inti=0;i=mvoidmain()intsum=0;intwM;srand(unsigned)time(NULL);for(inti=0;icoutcoutcoutm;sum=m*sum;cout复杂性分析:
对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2n。
尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。
其它说明:
按书中所讲的约束条件,程序中所有变量都是整型,输入的各元素要从小到大输入,而且不能有重复的元素。
若是想要无序输入,可以程序中加入程序1.c的归并排序算法,对输入的数组排序即可。
拓展一问题描述:
子集和数问题拓展一:
子集和问题的为W,c,p。
其中,W=w1,w2,.,wn是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得W1=cW(0问题分析:
增加一个数组p,使得p的每个元素与w对应元素关系为pi=Wi+10;最后结果W子集中元素个数越多,则p和最大,但也可以将每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。
算法演示#includeusingnamespacestd;#include#include#defineM50claSumOfSubprivate:
intwM;intpM;intm;intxM;intNM;intmax;intj;public:
SumOfSub(inta,intb,intn)max=0;j=0;for(inti=0;iwi=ai;pi=ai+10;m=b;x0=n;voidputeSumOfSub(ints,intk,intr)xk=1;if(s+wk=m)printResult(k);coutelseif(s+wk+wk+1=minti;coutfor(i=0;iS=S+pi;coutcoutcoutif(Smax)max=S;intJ=0;for(i=0;iif(xi=1)NJ=wi;J+;j=J;voidspecial()coutfor(inti=0;icoutcoutfor(inti=0;iwi=rand();if(wi=0)wi=rand();sum=sum+wi;coutcoutm;sum=m*sum;coutr+=wi;sumOfSputeSumOfSub(0,0,r);sumOfSub.special();运行结果复杂性分析对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2n。
尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。
拓展二问题描述子集和数问题拓展一:
子集和问题的为W,c,P。
其中,W=w1,w2,.,wn是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得W1=cW(0问题分析增加一个数组随机数组P,每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。
算法演示#includeusingnamespacestd;#include#include#defineM50claSumOfSubprivate:
intwM;intpM;intm;intxM;intNM;intmax;intj;public:
SumOfSub(inta,intb,intn)max=0;j=0;coutfor(inti=0;iwi=ai;pi=rand();coutcoutm=b;x0=n;voidputeSumOfSub(ints,intk,intr)xk=1;if(s+wk=m)printResult(k);coutelseif(s+wk+wk+1=minti;coutfor(i=0;iS=S+pi;coutcoutcoutif(Smax)max=S;intJ=0;for(i=0;iif(xi=1)NJ=wi;J+;j=J;voidspecial()coutfor(inti=0;icoutcoutfor(inti=0;iwi=rand();if(wi=0)wi=rand();sum=sum+wi;coutcoutm;sum=m*sum;coutr+=wi;sumOfSputeSumOfSub(0,0,r);sumOfSub.special();运行结果复杂性分析对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2n。
尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。
第3篇:
数据结构实_报告
一、概述软件开发的流程二、回顾C语言的基本语法:
1、常量(类型)2、变量(类型、定义)3、表达式(例子:
三位数的拆分)4、控制语句(if条件语句,例子:
饿了吗?
for循环语句,例子:
做好事问题求解)5、数组(例子:
猜数字游戏)三、学生成绩计算系统做好事问题求解:
某学校为表扬好人好事需核实一件事,老师找了A、B、C、D三个学生,A说:
"不是我。
"。
B说:
"是C。
"。
C说:
"是D。
"。
D说:
"C胡说"。
这四个人中三个人说了实话。
请问:
这件好事是谁做的?
#includeStdio.h#includeConio.hvoidmain(void)charthisman;/*定义变量用来保存做好事的人*/intsum=0;/*求和变量*//*循环枚举做好事的人*/for(thisman=A;thismangetch();猜数字:
在计算机上设置一个没有重复数字的4位数,不能让猜得人知道。
猜的人就可以开始猜。
每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。
接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。
次数限制:
有的时候,这个游戏有猜测次数上的限制。
根据计算机测算,这个游戏,如果以最严谨的计算,任何数字可以在7次之内猜出。
而有些地方把次数限制为6次或更少,则会导致有些数可能猜不出来。
而有些地方考虑到人的逻辑思维难以达到计算机的那么严谨,故设置为8次甚至10次。
也有的没有次数上的限制。
我们今天要做的这个游戏就是设定次数为8次。
#includeStdio.h#includeConio.hvoidgue(intb)/*猜数字游戏进行猜数的函数,采用数组作为参数*/inti=0,j=0,s=0,x=0,k1=0,k2=0;/*i、j、s用于进行循环,x用记录猜数的次数,k1用于记录位置相同且数相同的数字个数、k2记录数相同的数字个数*/inta4;while
(1)x+;printf(di%dcishuru:
x);scanf(%d,/*输入要猜的数放在变量j中*/for(i=3;i=0;i-)/*将输入的4位数进行拆分放到数组a中*/ai=j%10;j=j/10;for(i=0;i=0;i-)/*将四位数拆分并按高低位存放在数组b中*/bi=num%10;num=num/10;printf(okpreanykey);getch();/*等待*/clrscr();/*清屏*/intmain(void)intb4,num,i,ch=0;while
(1)/*条件为1的无限循环作为软件运行的主体,等待退出命令*/printf(*menu*n);printf(setnumberinput1n);printf(guenumberinput2n);printf(exitinput3n);printf(inputyourselectitems:
);scanf(%d,if(ch=1)/*选择变量为1调用设置被猜数字函数*/set_num();if(ch=2)/*选择变量为2调用猜数游戏过程函数*/gue(b);if(ch=3)/*选择变量为3退出循环结束游戏*/break;getch();return0;
第4篇:
数据结构实_报告数据结构课程设计的实_报告怎么写呀,请求做过课设的同学发一篇过来谢谢-_-规范实_报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:
1、需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?
明确规定:
(1)输入的形式和输入值的范围;
(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:
包括正确地输入及其输出结果和含有错误的输入及其输出结果,数据结构实_报告。
2、概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
3、详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:
按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。
4、调试分析内容包括:
(1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;
(2)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进思想;(3)经验和体会等,实_报告数据结构实_报告。
5、用户使用说明说明如何使用你编写的程序,详细列出每一步操作步骤。
6、测试结果列出你的测试结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于需求分析中所列。
7、附录题目:
约瑟夫-实_报告尺寸:
约瑟夫-实_报告.doc目录:
一、需求分析二、概要设计三、程序具体设计及函数调用关系四、调试分析五、测试结果原文:
实_报告题目:
约瑟夫(Joseph)问题的一种描述是:
编号为1,2,.,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个整数作为报数上限值m,从
第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个开始重新从1报数,如此下去,直至年有人全部出列为止。
试设计一个程序求出出列顺序。
班级:
姓名:
学号:
完成日期:
一、需求分析1.本演示程序中,利用单向循环链表存储结构存储约瑟夫环数据(即n个人的编号和密码)。
2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示提示信息之后,由用户在键盘上输入演示程序中需要输入的数据,运算结果显示在其后。
3.程序执行的命令包括:
1)构造单向循环链表;2)4.测试数据m的初值为20;n=7,7个人的密码依次为:
3,1,7,2,4,8,4,首先m值为6(正确的出列顺序为6,1,4,7,2,1,3,5)。
二、概要设计1.单向循环链表的抽象数据类型定义为:
ADTList数据对象:
D=ai|ai正整数,I=1,2,.,n,n0数据关系:
R1=ai-1,ai|,ai-1,aiD,I=1,2,.,n基本操作:
InitList(elementsrear=x;rear=(rear+1)%maxSize;elementsrear=x;rear=(rear+1)%maxSize;;templateboolSeqQueue:
DeQueue(constTif(rearnmaxSize=maxSize/2;x=elementsfront;front=(front+1)%maxSize;x=elementsfront;front=(front+1)%maxSize;returntrue;;29./利用优先级队列实现栈和队列#includetemplateclaPQueue;/前视的类定义templateclaStack;templateclaQueue;/优先级队列结点类的定义templateclaPQueueNodefriendclaPQueue;/PQueue类作为友元类定义friendclaStack;friendclaQueue;public:
PQueueNode(T/取得结点数据virtualintGetPriority()returnpriority;/取得结点优先级virtualPQueueNode*GetLink()returnlink;/取得下一结点地址virtualvoidSetData(T/修改结点数据virtualvoidSetPriority(intnewpriority)priority=newpriority;/修改结点优先级virtualvoidSetLink(PQueueNode*next)link=next;/修改指向下一结点的指针private:
Tdata;/数据intpriority;/优先级PQueueNode*link;/链指针;/优先级队列的类定义templateclaPQueuefriendclaStack;friendclaQueue;public:
PQueue():
front(NULL),rear(NULL)/构造函数virtualPQueue()MakeEmpty();/析构函数virtualvoidInsert(T/插入新元素value到队尾virtualTRemove();/删除队头元素并返回virtualTGet();/读取队头元素的值virtualvoidMakeEmpty();/置空队列virtualintIsEmpty()returnfront=NULL;/判队列空否private:
PQueueNode*front,*rear;/队头指针,队尾指针;templatevoidPQueue:
MakeEmpty()/将优先级队列置空PQueueNode*q;while(front!
=NULL)/链不空时,删去链中所有结点/循链逐个删除q=front;front=front-link;deleteq;rear=NULL;/队尾指针置空templatevoidPQueue:
Insert(Tif(IsEmpty()front=rear=q;/队列空时新结点为第一个结点elsePQueueNode*p=front,*pr=NULL;/寻找q的插入位置while(p!
=NULLp=p-link;if(pr=NULL)/插入在队头位置q-link=front;front=q;elseq-link=p;pr-link=q;/插入在队列中部或尾部if(pr=rear)rear=q;/删除队头元素并返回templateTPQueue:
Remove()if(IsEmpty()returnNULL;PQueueNode*q=front;front=front-link;/将队头结点从链中摘下Tdeleteq;if(front=NULL)rear=NULL;returnretvalue;/读取队头元素的值templateTPQueue:
Get()if(IsEmpty()returnNULL;elsereturnfront-data;/
(1)栈的定义与实现templateclaStack:
publicPQueue/栈类定义public:
Stack():
PQueue()/构造函数voidInsert(T/插入新元素value到队尾;templatevoidStack:
Insert(Tif(IsEmpty()front=rear=q;/栈空时新结点为第一个结点else/插入在前端q-link=front;front=q;/-Queue/
(2)队列的定义与实现templateclaQueue:
publicPQueue/队列类定义public:
Queue():
PQueue()/构造函数voidInsert(T/插入新元素value到队尾;templatevoidQueue:
Insert(Tif(IsEmpty()front=rear=q;/队列空时新结点为第一个结点elserear=rear-link=q;/插入在队尾位置voidmain()StackaStack;QueueaQueue;intn=1;aStack.Insert(n);aQueue.Insert(n);第7篇:
数据结构实_报告精选:
数据结构实_报告(共2篇)
一、需求分析1、程序所实现的功能;2、程序的输入,包含输入的数据格式和说明;3、程序的输出,程序输出的形式;4、测试数据,如果程序输入的数据量比较大,需要给出测试数据;5、合作人及其分工二、设计说明1、主要的数据结构设计说明;2、程序的主要流程图;3、程序的主要模块,要求对主要流程图中出现的模块进行说明4、程序的主要函数及其伪代码说明(不需要完整的代码);5、合作人设计分工三、上机结果及体会1、合作人编码分工2、实际完成的情况说明(完成的功能,支持的数据类型等);3、程序的性能分析,包括时空分析;4、上机过程中出现的问题及其解决方案;5、程序中可以改进的地方说明;6、程序中可以扩充的功能及设计实现假想;说明:
1、如果程序比较大,可以将设计说明分为概要设计和详细设计两部分。
概要设计主要负责程序的流程、模块、抽象数据类型设计;详细设计负责程序的数据类型定义和主要函数的说明。
2、设计说明中,不需要写出代码或者模块的详细代码,只需要写出主要函数的伪代码说明。
数据结构实_报告(共2篇)篇1:
数据结构实训报告数据结构课程设计报告题目:
班级:
姓名:
学号:
指导教师:
实现两个链表的合并08计管
(2)班肖丽娜年6月17日目录
一、课程设计的性质、目的及要求3
一、课程设计性质3二、设计目的3三、设计要求3二、任务描述3三、软件环境4四、算法设计思想及流程图4
一、算法设计思想4二、流程图5五、源代码6六、运行结果9七、收获及体会10
一、课程设计的性质、目的及要求
一、课程设计性质性质:
数据结构设计是数据结构课程的实践环节,也是我院各专业必修的计算机技术基础课程之一。
二、设计目的目的:
课程设计为学生提供了一个既动手又动脑,独立实践的机会,学生将课本上的理论知识和实际有机的结合起来,锻炼学生分析、解决较复杂问题的能力,本次课程设计,也是为了锻炼我们应用编程语言的语法规则和已经掌握的一些较为简单的算法,自己解决一个较简单的课题,初步积累编程经验。
提高学生独立编写大编程的能力。
三、设计要求计算机科学是一门研究数据表示和数据处理的科学。
数据是计算机化的信息,是计算机可以直接处理的最基本和最重要的对象。
无论是进行科学计算,数据处理,过程控制,还是对文件的存储和检索及数据库技术的应用,都是对数据进行加工处理的过程。
希望通过学_掌握程序设计的方法与编程技术,我们能学会良好的程序设计风格,为在计算机不同领域的应用打下坚实的基础。
希望通过本次的学_,我们能利用计算机解决实际题。
与此同时,希望能通过此次的实训来提高我们的思维能力,促进我们的综合应用能力和我们的专业素质。
二、任务描述实现两个链表的合并基本功能要求:
1、建立两个链表a和b,链表元素的个数没别为m和n个。
2、假设元素分别为(x1,x2,xm),和(y1,y2,yn)。
把他们合并成一个线性表c,使得:
当m=n时,c=x1,y1,x2,y2,xn,yn,xm当nm时,c=y1,x1,y2,x2,ym,xm,,yn输出线性表c3、用直接插入排序法对c进行升序排序,生成表d,并输出表a,b,c,d。
三、软件环境编辑工具:
turboc2.0功能介绍:
turboc2.0是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。
使用turboc2.0无需独立地编辑、编译和连接程序,就能建立并运行c语言程序。
因为这些功能都组合在turbo2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。
四、算法设计思想及流程图
一、算法设计思想1、定义链表的结构数据结构实_报告(共2篇)typedefstructintdatamaxsize;inttop;list;2、创建链表a,b,c,d,由于这链表是自己创立的,我们首先要对他们进行申请存储空间,首先我们就定义头文件#include,用malloc(sizeof()函数来现实,这是申请链表存储空间的标志.3、用指针top的移动来实现对链表a,和b进行数据的输入输出,再进行链表长度的比较,在用直接插入法对a和b中的数据查到c中,当m=n的时候,先插a的元素,再插入b的元素c-datac-top=a-dataj;j=j+1;c-top=c-top+1;c-datac-top=b-datak;k=k+1;c-top=c-top+1;当nm的时候,先插b的元素,在插入a的元素c-datac-top=b-dataj;j=j+1;c-top=c-top+1;c-datac-top=a-datak;k=k+1;c-top=c-top+1;4、用冒泡排序法对c中元素进行排序生成表d,由于要进行升序排序,所以只需比较d-datajdataj-1,再输出d-dataj,移动指针d-top,每进行一次输出,指针就移动一次d-top+1,直到c中元素都排序完,最后输出d。
5、打印链表a,b,c,d。
二、流程图下页篇2:
数据结构实_报告测绘与国土信息工程学院实验态度:
实验成果:
实验报告:
数据结构课程实验报告姓名:
学号:
班级:
成绩:
、认真2、良好3、一般4、不认真、优秀2、可信3、一般4、不真实、清晰完整2、比较完整3、不清晰教师签名:
111交报告日期:
年7月1日目录实验一线性表的链表实现类的设计;clalistpublic:
list()first=newlinknode;list(constintx)first=newlinknode(x);list(listlist()makeempty();deletefirst;linknode*search(intx);linknode*locate(inti);linknode*gethead()constreturnfirst;intgetdata(inti);voiddeleterepeatedelem();voidinput();voiddisplay();listprivate:
linknode*first;;list:
list(listlinknode*srcptr=l.gethead();linknode*desptr=first=newlink