第一篇:数据结构课程设计要求
《数据结构》课程设计要求
一、课程设计的目的及要求
1.课程设计目的
课程设计是《数据结构》课程教学必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。2.课程设计要求
1)明确课设任务,复习与查阅有关资料
2)按要求完成课设内容,课设报告要求文字和图工整、思路清楚、正确。3)每人完成一个项目。
4)应用程序应具有一定的可用性:
5)凡等候用户输入时,给出足够的提示信息,如“Please Select(1—3):”提示用户选择。
6)格式明显易懂,配上适当的颜色、声音等辅助效果,能方便地改正输入时的错误,使用户感到方便、好用。
7)有联机求助功能。用户能直接从系统得到必要的提示,不查手册也能解决一些疑难。8)程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行: 9)对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入。
10)当可能的回答有多种时,应允许输入任何一种回答。11)对删除数据应给出警告。
二、课程设计任务、内容及时间安排
1.课程设计任务、内容
课程设计的题目可由教师指定,如可在下列选题中选择,或由教师另外选择,也可由学生自行选择。但选题内容、难度要适当,要有一定的实际意义,并能达到进一步巩固和强化本课程所学知识的效果。
选题1.停车场管理问题。
问题描述:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。
基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。
实现提示:汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。例如,(„A‟,1,5)表示1号牌照车在5这个时刻到达,而(„D‟,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(„E‟,0,0)时结束。本题可用栈和队列来实现。
选题2.一元多项式简单计算
问题描述:设计一个一元多项式简单的计算器。基本要求:一元多项式简单计算器的基本功能为:(1)输入并建立多项式;(2)输出多项式:
(3)两个多项式相加减、相乘,建立并输出多项式。
实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数(如项数等)。
选题3.迷宫问题。
问题描述:迷宫实验是取自心理学的一个古典的实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻拦。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次试验终于得到它学习走通迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
基本要求:要求程序输出:
(1)一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。
(2)用一种标志(如数字8)在二维数组中标出该条通路,并在屏幕上输出二维数组。
实现提示:可以利用一个二维数组maze[i][j]表示迷宫,其中1≦i≦m,1≦j≦n。数组元素值为1表示该位置是墙壁,不能通行;元素值为0表示该位置是通路。假定从maze[1][1]出发,出口位于maze[m][n],移动方向可以是8个方向(东、东南、南、西南、西、西北、北和东北)。
选题4.算术表达式求值演示。选题5.哈夫曼编/译码器。选题6.简单行编辑程序。选题7.各种图的算法的演示。选题8.汉诺塔的演示。2.时间安排
课程设计,安排在本课程的最后部分,时间一周。周1上午:设计动员,分组,布置课程设计任务。周1下午:查阅资料。
周2全天:进行程序总体设计和详细设计。周3~4全天:详细设计, 系统调试。
周5上午:系统调试,整理,撰写设计(或调研)报告。周5下午:验收,答辩,提交设计(或调研)报告,评定成绩。
四、报告内容及要求
课程设计报告应不少于1000字。报告中应包括需求分析、概要设计、详细设计、调试分析、用户手册、测试结果、附录等,具体地:
(1)设计报告中应首先包括设计题目、班级、姓名、学号、完成日期。
(2)概要设计中应包括设计思想、实现方法、系统中主要模块及各模块间的关系的描述。
(3)用户手册应详细、具体,使具有程序设计语言基础的人在阅读用户手册后能使用和退出应用程序。
(4)附录中包括源程序、设计体会等。源程序中应有注解,说明每个模块的功能,使别人能比较容易地读懂源程序;设计体会中应包括本系统的不足之处以及可改进的地方,还应说明系统的特色、新的发明、创造等等。
第二篇:数据结构课程设计要求
光盘内容说明
本光盘有8个目录,对应于课程设计教材中第2至5章的8个案例。每个目录以ch0x0y命名,代表第x章第y节的案例,内容包含该案例的源程序及教材中描述的测试数据。除“文件目录结构的显示”案例为.C++源程序外,其他均为C源程序。
各目录中的内容及说明:
1.ch0201:表达式求值,在VC++6.0环境下测试通过
文件main.c:案例源程序;
文件input.txt:案例测试输入数据文件;
文件output.txt:案例测试输出结果文件;
2.ch0202:文件目录结构的显示,在VC++6.0环境下测试通过
文件main.c:案例源程序;
文件input.txt:案例测试输入数据文件;
文件bad_input_cases.txt:案例容错测试输入数据文件;
文件output.txt:案例测试输入input.txt的输出结果文件;
3.ch0301:拯救007,在VC++6.0环境下测试通过
文件main.c、graph.c、deque.c、error.c、graph.h、deque.h、error.h:案例源程序。编译时需通过应用工程文件(console project)。
文件input.txt:案例测试输入数据文件;
文件output.txt:案例测试输出结果文件;
4.ch0302:迷宫问题,在TC2.0环境下测试通过
文件main.c:案例源程序;
说明:测试时可选择自动生成测试数据,读者也可按照教材中提供的数据进行测试;
5.ch0401:快速排序详析,在VC++6.0环境下测试通过
文件main.c:案例源程序;
文件input.txt:案例测试输入数据文件,包含顺序、逆序和随机等三种类型的测试数据;
文件output.txt:案例测试输出结果文件;
6.ch0402:插队买票,在VC++6.0环境下测试通过
文件main.c:案例源程序;
文件input.txt:案例测试输入数据文件;
文件output.txt:案例测试输出结果文件;
7.ch0501:搜索算法效率比较,在VC++6.0环境下测试通过
文件main.c:案例源程序;
说明:读者可按照教材中提供的数据进行测试;
8.ch0502:任务调度问题,在VC++6.0环境下测试通过
文件main.c:案例源程序;
说明:读者可按照教材中提供的数据进行测试;
第三篇:数据结构课程设计题目要求2010-12-22
1.二叉树的遍历和应用
问题描述:以二叉链表表示二叉树,在此基础上实现对二叉树的遍历和应用。要求: 创建二叉树
输出二叉树
二叉树的先序、中序、后序遍历
二叉树的按层遍历
统计二叉树的叶子结点、计算二叉树的深度
设计主函数测试该类。2.猴子选大王(约瑟夫环)
问题描述:一堆猴子都有编号,编号是1,2,3….m,这群猴子(m个)按照1-m的顺序围坐一圈,从1开始数,没数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。输入数据:输入m,n。(m,n为整数,且n 问题描述:设计一个利用赫夫曼算法的编码和译码系统。要求:从键盘给出字符及频度,建立赫夫曼树并输出; 4.图的建立及输出 问题描述:建立图的存储结构(图的类型可以是有向图,无向图;有向网,无向网,任选一组或以上),能够输入图的顶点和边的信息,并存储到相应的存储结构中,而后输出图的邻接矩阵。5.常用排序算法的实现 问题描述:对10000个随机整数,利用插入排序,希尔排序,起泡排序,快速排序,选择排序,堆排序,归并排序等方法进行排序,并统计每一种排序上机所花费时间并列出统计表。数据的输入:整数 数据的输出:递增 6.顺序结构、动态链表结构下的一元多项式的加法,减法的实现 问题描述:先建立一元多项式Am(x)和Bn(x) 要求:完成两个多项式的加法,减法;按照降幂排列显示。 7.二叉平衡树 问题描述:从一颗空树开始创建,保证数的有序性,同时要针对数的平衡性做些微调。最终要把创建的二叉排序树转换成二叉平衡树。基本要求:创建(插入,调整),输出。 参考资料:1.《数据结构 (C语言版)》严蔚敏、吴伟民 主编 清华大学出版社 2004.11 2.《数据结构课程设计案例精编(用C/C++描述)》,李建学 等 编著,清华大学出版社 2007.2 3.《数据结构:用面向对象方法与C++语言描述》,殷人昆 主编,清华大学出版社 2007.6 课程设计报告的规范要求: 1.需求分析 进行需求分析,确定每个模块的功能要求。即根据设计题目的要求,充分地分析和理解问题,明确问题要求做的内容。2.算法设计 进行概要设计和详细设计。说明用到的数据结构定义,主程序的流程及各程序模块的调用关系。并用自然语言描述每个模块所设计的算法。3.测试数据 列出对于给定的输入所产生的输出结果。4.源程序及系统文件使用说明 附上关键数据结构的定义及关键算法的源代码。5.心得体会 谈谈课程设计过程中的收获,遇到的问题及解决问题过程的思考,程序调试能力的思考,对数据结构这么课程的思考,在课程设计过程中对《数据结构》课程认识等的思考。6.参考文献 参考文献要注明作者,出版社,出版日期。 7.提交内容包括:a.完整的程序系统(电子方式提交,以学号命名文件夹,由班长统一刻录成光盘上交);b.课程设计报告(字数不少于1500字)。8.课程设计考核方法及成绩评定:课程设计成绩分两部分,设计报告占50%,设计作品占50%;其中设计报告需要答辩。9.报告封面格式 课程设计报告 题目: 班级: 学号: 姓名: 2012级数据结构课程设计题目及要求 一、要求 本次课程设计可以从以下的题目中任选其一,每个题目基本实现的要求是: 1、有菜单功能 2、有读写数据存盘功能 3、有数据图形显示或动画显示。 成品应包括以下内容: 1、程序设计书(Word格式)。 包括程序设计目标、问题描述、需求分析、概要设计、详细设计、源程序清单(要求格式整齐400行以上,要有注释说明)、软件说明书(给出软件如何使用,使用时的注意事项)、测试报告(每个函数的功能测试,输入条件,输出结果)和课程设计总结。 2、可执行程序源代码。 二、设计题目 三、上交作业及成绩评定 1、上交要求 1)上交课程设计报告和源程序代码。 2)每小组写一份设计报告,以电子版形式上交,排版一定要规范,否则成绩下降一档。 3)以自己的“2012+专业+学号+姓名”建立文件夹,文件夹内容包括程序源码、设计报告的电子文档。 4)课程设计时间为二周,要求每人上机学时不低于20学时。 2、评分标准 根据完成任务的情况(必须进行系统演示)、课程设计报告书的质量和课程设计过程中的工作态度等按照30%、50%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。上机程序检查未通过者、无设计报告者以及严重抄袭他人设计者,成绩为不及格。 注: 每班分为十几个小组,每组2人。 每个题目每班最多只能有两小组选做。 每小组之间不得雷同,否则成绩最多及格。 数 据 结 构 课程设计报告 题 目: 一元多项式计算 专 业: 信息管理与信息系统 班 级: 2012级普本班 学 号: 201201011367 姓 名: 左帅帅 指导老师: 郝慎学 时 间: 一、课程设计题目分析 本课程设计要求利用C语言或C++编写,本程序实现了一元多项式的加法、减法、乘法、除法运算等功能。 二、设计思路 本程序采用C语言来完成课程设计。 1、首先,利用顺序存储结构来构造两个存储多项式A(x)和 B(x)的结构。 2、然后把输入,加,减,乘,除运算分成五个主要的模块:实现多项式输入模块、实现加法的模块、实现减法的模块、实现乘法的模块、实现除法的模块。 3、然后各个模块里面还要分成若干种情况来考虑并通过函数的嵌套调用来实现其功能,尽量减少程序运行时错误的出现。 4、最后编写main()主函数以实现对多项式输入输出以及加、减、乘、除,调试程序并将不足的地方加以修改。 三、设计算法分析 1、相关函数说明: (1)定义数据结构类型为线性表的链式存储结构类型变量 typedef struct Polynomial{} (2)其他功能函数 插入函数void Insert(Polyn p,Polyn h) 比较函数int compare(Polyn a,Polyn b) 建立一元多项式函数Polyn Create(Polyn head,int m) 求解并建立多项式a+b,Polyn Add(Polyn pa,Polyn pb) 求解并建立多项式a-b,Polyn Subtract(Polyn pa,Polyn pb)2 求解并建立多项式a*b,Polyn Multiply(Polyn pa,Polyn pb) 求解并建立多项式a/b,void Device(Polyn pa,Polyn pb) 输出函数输出多项式,void Print(Polyn P) 销毁多项式函数释放内存,void Destroy(Polyn p) 主函数,void main() 2、主程序的流程基函数调用说明(1)typedef struct Polynomial { float coef; int expn; struct Polynomial *next;} *Polyn,Polynomial; 在这个结构体变量中coef表示每一项前的系数,expn表示每一项的指数,polyn为结点指针类型,属于抽象数据类型通常由用户自行定义,Polynomial表示的是结构体中的数据对象名。 (2)当用户输入两个一元多项式的系数和指数后,建立链表,存储这两个多项式,主要说明如下: Polyn CreatePolyn(Polyn head,int m)建立一个头指针为head、项数为m的一元多项式 p=head=(Polyn)malloc(sizeof(struct Polynomial));为输入的多项式申请足够的存储空间 p=(Polyn)malloc(sizeof(struct Polynomial));建立新结点以接收数据 Insert(p,head);调用Insert函数插入结点 这就建立一元多项式的关键步骤 (3)由于多项式的系数和指数都是随即输入的,所以根据要求需要对多项式按指数进行降幂排序。在这个程序模块中,使用链表,根据对指数大小的比较,对各种情况进行处理,此处由于反复使用指针对各个结点进行定位,找到合适的位置再利用void Insert(Polyn p,Polyn h)进行插入操作。(4)加、减、乘、除、的算法实现: 在该程序中,最关键的一步是实现四则运算和输出,由于加减算法原则是一样,减法可通过系数为负的加法实现;对于乘除算法的大致流程都是:首先建立多项式a*b,a/b,然后使用链表存储所求出的乘积,商和余数。这就实现了多项式计算模块的主要功能。 (5)另一个子函数是输出函数 PrintPolyn(); 输出最终的结果,算法是将最后计算合并的链表逐个结点依次输出,便得到整链表,也就是最后的计算式计算结果。由于考虑各个结点的指数情况不同,分别进行了判断处理。 四、程序新点 通过多次写程序,发现在程序在控制台运行时总是黑色的,本次写程序就想着改变一下,于是经过查资料利用system(“Color E0”);可以函数解决,这里“E0,”E是控制台背景颜色,0是控制台输出字体颜色。 五、设计中遇到的问题及解决办法 首先是,由于此次课程设计里使用指针使用比较多,自己在指针多的时候易脑子混乱出错,对于此问题我是采取比较笨的办法在稿纸上写明白后开始进行 4 代码编写。 其次是,在写除法模块时比较复杂,自己通过查资料最后成功写出除法模块功能。 最后是,前期分析不足开始急于写代码,中途出现各种问题,算是给自己以后设计时的一个经验吧。 六、测试(程序截图) 1.数据输入及主菜单 2.加法和减法模块 3.乘法和除法模块 七、总结 通过本次应用C语言设计一元多项式基本计算程序,使我更加巩固了C语言程序设计的知识,以前对指针这一点使用是比较模糊,现在通过此次课程设计对指针理解的比较深刻了。而且对于数据结构的相关算法和函数的调用方面知识的加深。本次的课程设计,一方面提高了自己独立思考处理问题的能力;另一方面使自己再设计开发程序方面有了一定的小经验和想法,对自己以后学习其他语言程序设计奠定了一定的基础。 八、指导老师评语及成绩 附录:(课程设计代码) #include float coef;6 int expn; struct Polynomial *next;} *Polyn,Polynomial; //Polyn为结点指针类型 void Insert(Polyn p,Polyn h){ if(p->coef==0)free(p); //系数为0的话释放结点 else { Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expn { q1=q2;q2=q2->next;} if(q2&&p->expn==q2->expn)//将指数相同相合并 { q2->coef+=p->coef; free(p); if(!q2->coef)//系数为0的话释放结点 { q1->next=q2->next;free(q2);} } else { p->next=q2;q1->next=p; }//指数为新时将结点插入 } 7 } //建立一个头指针为head、项数为m的一元多项式 Polyn Create(Polyn head,int m){ int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial)); head->next=NULL; for(i=0;i { p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据 printf(“请输入第%d项的系数与指数:”,i+1); scanf(“%f %d”,&p->coef,&p->expn); Insert(p,head); //调用Insert函数插入结点 } return head;} //销毁多项式p void Destroy(Polyn p){ Polyn q1,q2; q1=p->next;8 q2=q1->next; while(q1->next) { free(q1); q1=q2;//指针后移 q2=q2->next; } } //输出多项式p int Print(Polyn P){ Polyn q=P->next; int flag=1;//项数计数器 if(!q)//若多项式为空,输出0 { putchar('0'); printf(“n”); return; } while(q) { if(q->coef>0&&flag!=1)putchar('+');//系数大于0且不是第一项 9 if(q->coef!=1&&q->coef!=-1)//系数非1或-1的普通情况 { printf(“%g”,q->coef); if(q->expn==1)putchar('X'); else if(q->expn)printf(“X^%d”,q->expn); } else { if(q->coef==1){ if(!q->expn)putchar('1'); else if(q->expn==1)putchar('X'); else printf(“X^%d”,q->expn);} if(q->coef==-1){ if(!q->expn)printf(“-1”); else if(q->expn==1)printf(“-X”); else printf(“-X^%d”,q->expn);} } q=q->next; flag++; } printf(“n”);} int compare(Polyn a,Polyn b){ if(a&&b) { if(!b||a->expn>b->expn)return 1; else if(!a||a->expn else return 0; } else if(!a&&b)return-1;//a多项式已空,但b多项式非空 else return 1;//b多项式已空,但a多项式非空 } //求解并建立多项式a+b,返回其头指针 Polyn Add(Polyn pa,Polyn pb){ Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点 11 hc->next=NULL; headc=hc; while(qa||qb){ qc=(Polyn)malloc(sizeof(struct Polynomial)); switch(compare(qa,qb)) { case 1: qc->coef=qa->coef; qc->expn=qa->expn; qa=qa->next; break; case 0: qc->coef=qa->coef+qb->coef; qc->expn=qa->expn; qa=qa->next; qb=qb->next; break; case-1: qc->coef=qb->coef; qc->expn=qb->expn; qb=qb->next; break;12 } if(qc->coef!=0) { qc->next=hc->next; hc->next=qc; hc=qc; } else free(qc);//当相加系数为0时,释放该结点 } return headc;} //求解并建立多项式a-b,返回其头指针 Polyn Subtract(Polyn pa,Polyn pb){ Polyn h=pb; Polyn p=pb->next; Polyn pd; while(p)//将pb的系数取反 { p->coef*=-1;p=p->next;} pd=Add(pa,h); for(p=h->next;p;p=p->next) //恢复pb的系数 p->coef*=-1;13 return pd;} //求解并建立多项式a*b,返回其头指针 Polyn Multiply(Polyn pa,Polyn pb){ Polyn hf,pf; Polyn qa=pa->next; Polyn qb=pb->next; hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点 hf->next=NULL; for(;qa;qa=qa->next) { for(qb=pb->next;qb;qb=qb->next) { pf=(Polyn)malloc(sizeof(struct Polynomial)); pf->coef=qa->coef*qb->coef; pf->expn=qa->expn+qb->expn; Insert(pf,hf);//调用Insert函数以合并指数相同的项 } } return hf;} //求解并建立多项式a/b,返回其头指针 void Device(Polyn pa,Polyn pb){ Polyn hf,pf,temp1,temp2; Polyn qa=pa->next; Polyn qb=pb->next; hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储商 hf->next=NULL; pf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储余数 pf->next=NULL; temp1=(Polyn)malloc(sizeof(struct Polynomial)); temp1->next=NULL; temp2=(Polyn)malloc(sizeof(struct Polynomial)); temp2->next=NULL; temp1=Add(temp1,pa); while(qa!=NULL&&qa->expn>=qb->expn) { temp2->next=(Polyn)malloc(sizeof(struct Polynomial)); temp2->next->coef=(qa->coef)/(qb->coef); temp2->next->expn=(qa->expn)-(qb->expn); Insert(temp2->next,hf); pa=Subtract(pa,Multiply(pb,temp2));15 qa=pa->next; temp2->next=NULL; } pf=Subtract(temp1,Multiply(hf,pb)); pb=temp1; printf(“商是:”); Print(hf); printf(“余数是:”); Print(pf);} void main(){ int choose=1;int m,n,flag=0;system(“Color E0”);Polyn pa=0,pb=0,pc,pd,pf;//定义各式的头指针,pa与pb在使用前付初值NULL printf(“请输入A(x)的项数:”);scanf(“%d”,&m);printf(“n”);pa=Create(pa,m);//建立多项式A printf(“n”);printf(“请输入B(x)的项数:”);16 scanf(“%d”,&n);printf(“n”);pb=Create(pb,n);//建立多项式B printf(“n”);printf(“**********************************************n”);printf(“* 多项式操作菜单 printf(”**********************************************n“);printf(”tt 1.输出操作n“);printf(”tt 2.加法操作n“);printf(”tt 3.减法操作n“);printf(”tt 4.乘法操作n“);printf(”tt 5.除法操作n“);printf(”tt 6.退出操作n“);printf(”**********************************************n“);while(choose){ printf(”执行操作:“); scanf(”%d“,&flag); switch(flag) { case 1: printf(”多项式A(x):“);Print(pa);*n”); printf(“多项式B(x):”);Print(pb); break; case 2: pc=Add(pa,pb); printf(“多项式A(x)+B(x):”);Print(pc); Destroy(pc);break; case 3: pd=Subtract(pa,pb); printf(“多项式A(x)-B(x):”);Print(pd); Destroy(pd);break; case 4: pf=Multiply(pa,pb); printf(“多项式A(x)*B(x):”); Print(pf); Destroy(pf); break; case 5: Device(pa,pb);18 break; case 6: exit(0); break; } } Destroy(pa); Destroy(pb);}第四篇:2012级数据结构课程设计题目及要求
第五篇:2012数据结构课程设计