数据结构课程设计题目

合集下载

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题目一、题目背景在现代科技发展的背景下,数据结构作为计算机科学的重要基础课程,对于培养学生的编程思维、数据处理能力具有重要的作用。

本篇课程设计将围绕数据结构的实际应用,设计一个能够提升学生数据结构理论与实践能力的题目。

二、题目描述你需要设计一个软件,实现以下功能:能够记录学生信息并进行相关的数据操作。

具体要求如下:1. 学生信息包括:学生学号、姓名、性别、年龄、身高、体重等基本信息;2. 软件需要实现以下操作:a. 添加学生信息:可以手动添加每个学生的详细信息,并将其记录到数据库中;b. 删除学生信息:能够根据学号或姓名删除指定学生的信息;c. 修改学生信息:能够根据学号或姓名修改指定学生的信息;d. 查询学生信息:能够按照学号、姓名、性别、年龄等条件进行学生信息的查询,并将结果以列表形式展示;e. 统计学生信息:能够统计学生的平均年龄、平均身高、平均体重等统计数据,并展示在界面上;f. 数据导入导出:能够将学生信息导入/导出到文件或数据库中,实现数据的持久化存储。

三、设计思路为了实现上述功能,你可以采用以下的设计思路:1. 数据结构选择:可以使用链表、数组、树等数据结构存储学生信息,具体根据功能需求来选择合适的数据结构;2. 界面设计:考虑采用图形界面或者命令行界面,以提供方便的操作方式;3. 数据存储:可以使用文件、数据库等方式进行数据的存储和读取,以实现数据的持久化;4. 算法设计:在实现功能的过程中,需要考虑合适的算法来实现快速的查找、删除和修改等操作;5. 错误处理:在设计过程中,需要考虑各种可能的错误情况,并进行相应的处理和提示。

四、实施步骤为了顺利完成该课程设计,你可以按照以下步骤进行:1. 分析题目需求:仔细阅读以上题目描述,明确实现各项功能的具体要求;2. 设计数据结构:选择合适的数据结构来存储学生信息,考虑数据的增删改查等操作的效率;3. 设计算法:根据功能需求,设计相应的算法来实现各项操作;4. 实现界面:根据选择的界面方式,设计相应的图形界面或命令行交互界面;5. 实现功能:按照题目要求,逐个实现各项功能,并进行测试;6. 完善细节:对界面进行美化,完善用户交互体验,处理各种错误情况;7. 测试与调试:对整个软件进行全面的测试,并进行调试修复可能存在的问题;8. 编写报告:撰写课程设计报告,详细记录设计过程、实现方法、遇到的问题以及解决方案等。

数据结构课程设计题目

数据结构课程设计题目

题目1:图的遍历功能:实现图的深度优先, 广度优先遍历算法,并输出原图结构及遍历结果。

分步实施:1) 初步完成总体设计,搭好框架;2)完成最低要求:两种必须都要实现,写出画图的思路;3)进一步要求:画出图的结构,有兴趣的同学可以进一步改进图的效果。

要求:1)界面友好,函数功能要划分好2)总体设计应画一流程图3)程序要加必要的注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

题目2:n维矩阵乘法:A B-1功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。

分步实施:1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2)完成最低要求:建立一个文件,可完成2维矩阵的情况;3)一步要求:通过键盘输入维数n。

有兴趣的同学可以自己扩充系统功能。

要求:1)界面友好,函数功能要划分好2)总体设计应画一流程图3)程序要加必要的注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

题目3:数组应用功能:按照行优先顺序将输入的数据建成4维数组,再按照列优先顺序输出结果,给出任意处的元素值,并给出对应的一维数组中的序号。

分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:完成第一个功能;3.进一步要求:进一步完成后续功能。

有兴趣的同学可以自己扩充系统功能。

要求:1)界面友好,函数功能要划分好2)总体设计应画一流程图3)程序要加必要的注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

题目4:数组应用2功能:读入数组下标,求出数组A靠边元素之和;求从A[0][0]开始的互不相邻的各元素之和;当m=n时,分别求两条对角线上的元素之和,否则打印出m!=n的信息。

数据结构课程设计

数据结构课程设计

福建工程学院课程设计课程:数据结构课程设计题目: 1.综合应用2.折半查找3.快速排序专业:软件工程班级:1101座号:3110305129姓名:潘聪2012 年 6 月26 日设计题目1:综合应用一、问题描述有N名学生,每名学生含有如下信息:学号、姓名、某四门课的成绩,并计算其总分,用一结构数组表示之。

然后实现以下功能:(1)将这些数据存放至文件stuf.dat中;(2)将文件中的数据读出至结构数组中,并显示之;(3)输出总分最高分和最低分的名字;(4)输出总分在340分,单科成绩不低于80分的名单;(5)求出各科平均分数;(6)按总分排名;(7)输出补考名单。

二、解决问题的算法思想描述(1)子函数:首先确定需要的子函数,总共7个,对应的功能分别是题目要求的七项(2)主函数:主函数中,要设计出易于使用的人机界面,就必须要用到switch 。

(3)文件的存放读取,必须要用到文件的函数,fopen,fread,fclose等。

(4)把每个学生的信息定义在一个结构数组中,利用结构数组更加方便。

(5)各科成绩排名用冒泡排序即可。

(6)输出总分,补考名单,各科的平均分都比较简单。

三、设计1. 数据结构的设计和说明//定义结构体typedef struct{int num; //学号char name[10]; //姓名int score1; //语文int score2; //数学int score3; //物理int score4; //化学}student;student stu[MAX]; //结构数组2.模块结构图及各模块的功能:3. 关键算法的设计(必须画出流程图)打印最高成绩和最低成绩的名单算法流程图:四、测试数据及测试结果:五、课程设计总结注意细节方面,任何一个小问题都不能忽视,才能最终解决问题。

六、关键源程序的清单关键算法一:按照总成绩排名:void paiming(){read();student x;int sum[MAX],t=0,i,m,n,j;for(i=0;i<MAX; i++){sum[i]=stu[i].score1+stu[i].score2+stu[i].score3+stu[i].score4;}for(m=0;m<MAX-1;m++)for(n=m+1;n<MAX;n++)if(sum[n]>sum[m]){t=sum[n];sum[n]=sum[m]; //总成绩交换sum[m]=t;x=stu[n];stu[n]=stu[m]; //总成绩对应的学生也要同时交换stu[m]=x;}printf("学号\t姓名\t语文\t数学\t英语\t物理\t总分\t名次\n");for(j=0;j<MAX;j++){printf("%-8d%-8s%-8d%-8d%-8d%-8d%-8d%-8d\n",stu[j].num,stu[j].name,stu[j].score1,stu[j].sc ore2,stu[j].score3,stu[j].score4,sum[j],j+1);}}关键算法二:打印出最高成绩和最低成绩的姓名:void maxmin(){int sum[MAX],i,j,m=0,n=0,max,min;read();for(i=0;i<MAX; i++){sum[i]=stu[i].score1+stu[i].score2+stu[i].score3+stu[i].score4;} //求书每个人的总分max=min=sum[0]; //用一维数组保存成绩,并且先令第一位学生的成绩作为最高分和最低分for(j=0;j<MAX;j++){if(sum[j]>max){m=j;max=sum[j]; //定义变量m,n分别保存最高分和最低分的下标}else if(sum[j]<min){n=j;min=sum[j];}}printf("\n最高分:%s 总分%d\n",stu[m].name,sum[m]);printf("\n最低分:%s 总分%d\n\n",stu[n].name,sum[n]);}设计题目2:折半查找一、问题描述用折半查找法,实现对任意一组数据的查找。

数据结构课程设计实例100例

数据结构课程设计实例100例

数据结构课程设计实例100例1. 设计一个简单的栈数据结构。

2. 实现一个简单的队列数据结构。

3. 设计一个链表数据结构。

4. 实现一个二叉树数据结构。

5. 设计一个哈希表数据结构。

6. 实现一个图数据结构。

7. 设计一个堆数据结构。

8. 实现一个优先队列数据结构。

9. 设计一个有向图数据结构。

10. 实现一个循环链表数据结构。

11. 设计一个红黑树数据结构。

12. 实现一个字典数据结构。

13. 设计一个AVL树数据结构。

14. 实现一个散列表数据结构。

15. 设计一个双端队列数据结构。

16. 实现一个字典树数据结构。

17. 设计一个多叉树数据结构。

18. 实现一个最小生成树算法。

19. 设计一个并查集数据结构。

20. 实现一个图的遍历算法。

21. 设计一个迪杰斯特拉算法。

22. 实现一个Floyd算法。

23. 设计一个拓扑排序算法。

24. 实现一个最短路径算法。

25. 设计一个Kruskal算法。

26. 实现一个插入排序算法。

27. 设计一个快速排序算法。

28. 实现一个希尔排序算法。

29. 设计一个选择排序算法。

30. 实现一个冒泡排序算法。

31. 设计一个堆排序算法。

32. 实现一个归并排序算法。

33. 设计一个桶排序算法。

34. 实现一个基数排序算法。

35. 设计一个计数排序算法。

36. 实现一个递归算法。

37. 设计一个动态规划算法。

38. 实现一个回溯算法。

39. 设计一个哈夫曼编码算法。

40. 实现一个最大子序列和算法。

41. 设计一个最长递增子序列算法。

42. 实现一个最长公共子序列算法。

43. 设计一个贪婪算法。

44. 实现一个深度优先搜索算法。

45. 设计一个广度优先搜索算法。

46. 实现一个信号量算法。

47. 设计一个分治算法。

48. 实现一个枚举算法。

49. 设计一个置换算法。

50. 实现一个位运算算法。

51. 设计一个红黑树插入算法。

52. 实现一个二进制查找算法。

53. 设计一个最小堆插入算法。

数据结构课程设计题目

数据结构课程设计题目

算法与数据结构课程设计一、线性表题1、建立一个单链表,显示链表中每个节点的数据,并做删除和插入处理。

例:(掌握线性表在链式存储结构下的基本运算的实现。

)1、功能(1)建立以带头结点的单链表(2)显示链表中每个结点的数据(3)在单链表中指定位置插入指定数据并输出单链表中所有数据(4)删除单链表中指定的结点并输出单链表中所有数据2、输入要求输入单链表中所有数据,插入的数据元素的位置、值,要删除的数据元素的位置。

3、测试数据单链表中所有数据:12,23,56,21,8,10,15,67,90,32插入的数据元素的位置、值:1,28要删除的数据元素的位置:10[概要设计](1)算法思想:由于在操作过程中要进行插入、删除操作,为运算方便,选用单带头结点的单链表作数据元素的存储结构。

对每个数据元素,由一个数据域和一个指针域组成,数据域放输入的数据值,指针域指向下一个结点。

(2)数据结构单链表结点类型:typedef struct Node{ int data;struct node *next;}ListNode;带头结点的单链表类型定义:typedef ListNode *LinkList;(3)模块划分:①建立点头结点的单链表CreatLinkList;②显示链表中每个结点的数据PrintList;③在单链表中指定位置插入指定数据并输出单链表中所有数据InsertList;④删除单链表中指定的结点并输出单链表中所有数据DeleteList;⑤主函数mian(),功能是给出测试数据值,建立测试数据值的带头结点的单链表,调用PrintList函数、InsertList函数、DeleteList函数实现问题要求。

[详细设计] 见程序LinkList.c题2、约瑟夫环(Joseph)问题的一种描述是:编号1,2,┉,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),一开始,任选一个正整数作为报数上线值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。

数据结构课程设计题目及要求

数据结构课程设计题目及要求

数据结构课程设计题目及要求一、要求本次课程设计可以从以下的题目中任选其一,每个题目基本实现的要求是:有菜单功能有读写数据存盘功能成品应包括以下内容:程序设计书(Word格式)。

包括程序设计目标、问题描述、需求分析、概要设计、详细设计、源程序清单(要求格式整齐400行以上,要有注释说明)、软件说明书(给出软件如何使用,使用时的注意事项)、测试报告(每个函数的功能测试,输入条件,输出结果)和课程设计总结。

2、可执行程序源代码。

3、答辩时使用的ppt。

二、设计题目题目一:仓库管理系统(线性表应用)[问题描述]建立一个仓库管理程序,可以按顺序和货物名称查询仓库存储情况,也可以增加或删除货物以及建立新的仓库存储系统。

[实现提示]可以采用双向链表的存储结构,如可定义如下的存储结构:typedef struct dnode /*定义双向链表结构体*/{int number; /*货物编号*/char name[max]; /*货物名称*/int counter; /*货物数量*/struct dnode *prior,*next; /*定义两指针,分别指向其前驱和后继*/}dlnode;题目二:单位员工通讯录管理系统(线性表应用)[问题描述]为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。

其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。

[实现提示]可以采用单链表的存储结构,如可定义如下的存储结构:typedef struct { /*员工通讯信息的结构类型定义*/char num[5]; /*员工编号*/char name[10]; /*员工姓名*/char phone[15]; /*办公室电话号码*/char call[15]; /*手机号码*/}DataType;/*通讯录单链表的结点类型*/typedef struct node{ DataType data; /*结点的数据域*/struct node *next; /*结点的指针域*/}ListNode,*LinkList;题目三: 哈夫曼编码/译码系统(树应用)[问题描述]利用哈夫曼编码进行通信,可以压缩通信的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题目请从下面四道题目中任选一道作为答辩题目。

答辩时会问每位同学1~2个问题,根据回答正确与否给出数据结构课程设计的成绩。

题目1:设计程序以实现构造哈夫曼树的哈夫曼算法。

要求:求解所构造的哈夫曼树的带全路径长度。

题目2:设计并实现一个航班信息查询和检索系统。

要求:对飞机航班信息进行排序和查找,可按照航班号、起点站、到达站、起飞时间和到达时间等信息进行查询。

航班信息表的样式如下:其中航班号一项的格式为:前两个大写字母表示航空公司的名称,后4位为航班编号,例如:CA1544,CA表示航空公司的名称,1544为航班编号。

题目3.求解迷宫问题:以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

设计要求如下:(1)以链栈作为存储结构,编写一个求解迷宫的非递归程序,并将求得的通路以三元组(i,j,d)的形式输出,其中:i,j指示迷宫中的一个坐标,d表示走到下一坐标的方向;(2)编写递归形式的算法,求得迷宫中所有可能的通路;(3)以方阵形式输出迷宫及其通路。

[测试数据]左上角(1,1)为入口,右下角(9,8)为出口。

1 2 3 4 5 6 7 8[实现提示]计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。

为处理方便起见,可在迷宫的四周加一圈障碍。

对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

题目4.校园导游程序:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

数据结构课程设计——一元多项式计算

数据结构课程设计——一元多项式计算

数据结构课程设计——一元多项式计算一、课程设计题目及要求二、设计思路和方法三、程序流程图四、程序代码及注释五、测试结果及分析六、结论七、参考文献本次课程设计的题目为“一元多项式计算”,要求设计一个程序,能够实现一元多项式的加、减、乘、求导和求值等操作。

在设计思路和方法上,我们采用了链表的数据结构来存储多项式,同时设计了相应的函数来实现各种操作。

程序的流程图如下所示:插入流程图)程序的代码及注释如下所示:插入代码及注释)在测试结果及分析方面,我们对程序进行了多组测试,并对其进行了详细的分析和比较。

结果表明,我们的程序能够正确地实现各种操作,并且具有较高的效率和稳定性。

综上所述,本次课程设计的目标已经得到了圆满地实现,我们对于所取得的成果感到非常满意。

同时,我们也希望能够通过这次课程设计,加深对于数据结构及其应用的理解和掌握,为今后的研究和工作打下坚实的基础。

设计目标:本课程设计旨在结合理论与实际应用,提高学生组织数据及编写大型程序的能力。

通过掌握数据组织、算法设计和算法性能分析的方法,培养学生良好的程序设计能力。

具体实现是利用单链表表示一元多项式,实现多项式的输入、建立、输出、相加、相减和相乘。

总体设计:2.1 数据结构描述与定义:一元多项式定义系数和指数结构如下:coef,expn和next。

定义多项式的结构为线性链表的存储结构,每个结点包含三个元素:系数coef,指数expn和指向下一个结点的指针*next。

多个单项式通过指针连接起来,形成一个多项式。

2.2 模块设计:从实现多项式运算过程的角度来分析,至少需要以下子功能模块:多项式创建、销毁、输出、相加、相减和相乘。

定义并调用的函数有:Insert、CreatePolyn、DestroyPolyn、PrintPolyn、AddPolyn、SubtractPolyn、XXX和main函数。

注:该文章中没有明显的格式错误和需要删除的段落,因此没有进行小幅度改写。

数据结构课程设计题目汇总及要求

数据结构课程设计题目汇总及要求

数据结构课程设计题目课程设计题一:线性表子系统一.设计目的:1.掌握线性表的特点2.掌握线性表的顺序存储结构和链式存储结构的基本运算3.掌握线性表的基本操作二.设计内容和要求:1.设计一个选择式菜单。

线性表子系统******************************************************* 1 ……建表** 2 ……插入** 3 ……删除** 4 ……显示** 5 ……查找** 6 ……求表长** 0 ……返回*******************************************************请选择菜单号(0…6):2.采用单链表创建线性表。

3.在线性表中实现插入、删除元素,显示线性表中所有元素,查找元素和求线性表长的基本操作。

课程设计题二:栈子系统一.设计目的:1.掌握栈的特点及其描述方法2.掌握链式存储结构实现一个栈3.掌握链栈的各种基本操作4.掌握栈的典型应用的算法二.设计内容和要求:1.设计一个选择式菜单。

栈子系统****************************************************** * 1 ……入栈* * 2 ……出栈* * 3 ……显示* * 4 ……数制转换* * 0 ……返回* ****************************************************** 请选择菜单号(0…4):2.设计一个整型数据元素的链栈。

3.编写入栈、出栈和显示栈中全部元素的程序。

4.编写一个把十进制数转换成八进制数的应用程序。

课程设计题三:队列子系统一.设计目的:1.掌握队列的特点及其描述方法2.掌握链式存储结构实现一个队列3.掌握队列的各种基本操作4.掌握队列简单应用的算法二.设计内容和要求:1.设计一个选择式菜单。

队列子系统******************************************************* 1 ……入队** 2 ……出队** 3 ……读队首元素** 4 ……显示** 5 ……报数问题** 0 ……退出*******************************************************请选择菜单号(0…5):2.设计一个整型数据元素的链队列。

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题目以下7个题目任选其一。

1.排序算法比较利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且(1)统计每一种排序上机所花费的时间。

(2)统计在完全正序,完全逆序情况下记录的比较次数和移动次数。

(3)比较的指标为关键字的比较次数和记录的移动次数(一次记录交换计为3次移动)。

(4)对结果作简单分析,包括对各组数据得出结果波动大小的解释。

2.图的深度遍历对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用堆栈的五种基本运算(清空堆栈、压栈、弹出、取栈顶元素、判栈空)实现图的深度优先搜索遍历。

画出搜索顺序示意图。

3.图的广度遍历对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。

画出搜索顺序示意图。

4.二叉树的遍历对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍历的结果。

画出搜索顺序示意图。

5.链表操作利用链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。

画出搜索顺序示意图。

6.一元稀疏多项式简单计数器(1)输入并建立多项式(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。

序列按指数降序排列。

(3)多项式a和b相加,建立多项式a+b,输出相加的多项式。

(4)多项式a和b相减,建立多项式a-b,输出相减的多项式。

用带头结点的单链表存储多项式。

测试数据:(1)(2x+5x8-3.1x11)+(7-5x8+11x9)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)7.实现两个链表的合并基本功能要求:(1)建立两个链表A和B,链表元素个数分别为m和n个。

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题⽬《数据结构》课程设计题⽬1. 排序算法的性能分析问题描述设计⼀个测试程序,⽐较⼏种内部排序算法的关键字⽐较次数和移动次数以取得直观感受。

基本要求(1)对冒泡排序、直接排序、选择排序、箱⼦排序、堆排序、快速排序及归并排序算法进⾏⽐较。

(2)待排序表的表长不⼩于100,表中数据随机产⽣,⾄少⽤5组不同数据作⽐较,⽐较指标:关键字参加⽐较次数和关键字的移动次数(关键字交换记为3次移动)。

(3)输出⽐较结果。

选做内容(1)对不同表长进⾏⽐较。

(2)验证各算法的稳定性。

(3)输出界⾯的优化。

2. 排序算法思想的可视化演⽰—1基本要求排序数据随机产⽣,针对随机案例,对冒泡排序、箱⼦排序、堆排序、归并算法,提供排序执⾏过程的动态图形演⽰。

3. 排序算法思想的可视化演⽰—2基本要求排序数据随机产⽣,针对随机案例,,对插⼊排序、选择排序、基数排序、快速排序算法,提供排序执⾏过程的动态图形演⽰。

4. 线性表的实现与分析基本要求①设计并实现线性表。

②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储⽅式③针对随机产⽣的线性表实例,实现线性表的插⼊、删除、搜索操作动态演⽰(图形演⽰)。

5. 等价类实现及其应⽤问题描述:某⼯⼚有⼀台机器能够执⾏n个任务,任务i的释放时间为r i(是⼀个整数),最后期限为d i(也是整数)。

在该机上完成每个任务都需要⼀个单元的时间。

⼀种可⾏的调度⽅案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。

⼀个时间段不允许分配给多个任务。

基本要求:使⽤等价类实现以上机器调度问题。

等价类分别采取两种数据结构实现。

6. ⼀元稀疏多项式计算器问题描述设计⼀个⼀元稀疏多项式简单计算器。

基本要求⼀元稀疏多项式简单计算器的基本功能是:(1)输⼊并建⽴多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相加,建⽴多项式a+b;(4)多项式a和b相减,建⽴多项式a-b;(5)计算多项式在x处的值;(6)计算器的仿真界⾯(选做)7. 长整数的代数计算问题描述应⽤线性数据结构解决长整数的计算问题。

数据结构课程设计题目(最终版)-2012

数据结构课程设计题目(最终版)-2012

数据结构课程设计题目1、医务室模拟。

问题描述:假设只有一位医生,在一段时间内随机地来几位病人;假设病人到达的时间间隔为0~14分钟之间的某个随机值,每个病人所需处理时间为1~9分钟之间的某个随机值。

试用队列结构进行模拟。

实现要求:要求输出医生的总等待时间和病人的平均等待时间。

程序设计思路:计算机模拟事件处理时,程序按模拟环境中的事件出现顺序逐一处理,在本程序中体现为医生逐个为到达病人看病。

当一个病人就诊完毕而下一位还未到达时,时间立即推进为下一位病人服务,中间时间为医生空闲时间。

当一个病人还未结束之前,另有一位病人到达,则这些病人应依次排队,等候就诊。

2、招聘模拟问题描述:某集团公司为发展生产向社会公开招聘m个工种的工作人员,每个工种各有不同的编号(0,1,2,…,m-1)和计划招聘人数,参加招聘的人数有n个(编号为0,1,2,。

,n-1)。

每位应聘者可以申报两个工种,并参加公司组织的考试。

公司将按应聘者的成绩,从高到低的顺序排队录取。

公司的录取原则是:从高分到低分依次对每位应聘者按其第一志愿录取;当不能按第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其志愿考虑录取。

程序为每个工种保留一个录取者的有序队列。

录取处理循环直至招聘额满,或已对全部应聘者都做了录用处理。

实现要求:要求程序输出每个工种录用者的信息(编号、成绩),以及落选者的信息(编号、成绩)。

3、组织机构问题问题描述:以青岛理工大学为例,实现对我校组织结构的管理。

要求把我校的组织结构以树型结构存储,实现要求:(1)树中每个结点保存部门名称;(2)假定处级部门(含院系)在树中第二层,科级部门在第三层(即最后一层),软件应该能计算出处级部门有几个,有哪几个?(3)软件可以查询某部门下面的具体编制?4、最少换车次数问题问题描述:设某城市有n个车站,并有m条公交线路连接这些车站。

设这些公交车站都是单向的,这n个车站被顺序编号为0~n-1。

数据结构课程设计可选题目

数据结构课程设计可选题目

1.背包问题的求解2.全国交通咨询模拟3.一元稀疏多项式计算器4.马踏棋盘5.电梯模拟6.重言式判别7.教学计划编制8.全国交通咨询模拟9.运动会分数统计10.订票系统11.文章编辑12.约瑟夫环(Joseph)13.校园导游程序14.任意长的整数加法15.通讯录管理系统的设计与实现.16.产品进销存管理系统17..学生信息管理系统的设计与实现18.简易电子表格的设计19.教师信息管理系统的设计与实现20.电话号码查询系统21.二叉排序树与平衡二叉树的实现22.仓库管理系统23.农夫过河问题的求解24.图书管理信息系统的设计与实现25.客户消费积分管理系统26.商店售货管理系统的设计与实现27.家谱管理系统28.排序算法比较29.算术表达式求值30.职工工资管理系统的设计与实现31.房屋销售管理信息系统的设计与实现32.电视大赛观众投票及排名系统33.超市管理信息系统的设计与实现34.药店的药品销售统计系统35.教师职称管理系统的设计与实现36.宾馆客房管理系统的设计与实现37.航空售票处的服务系统38.营业窗口队列模拟39.迷宫问题40.八皇后问题41.运算器42.稀疏矩阵运算器43.电话号码查询系统44.停车场模拟管理程序的设计与实现45.哈夫曼编/译码的设计与实现46.班级学生成绩管理系统47.个人书籍管理系统的设计与实现48.稀疏矩阵的应用49.银行业务模拟50.最小生成树的Prime算法实现51.最小生成树的Kruskal算法实现52.链式串的实现53.多项式运算的实现54.数制转换问题55.关键路径求解56.纸牌游戏57.宿舍管理查询软件58.活期储蓄帐目管理59.手机通讯录的制作60.H TML文档标记匹配算法。

数据结构课程设计哈夫曼编码译码器

数据结构课程设计哈夫曼编码译码器

题目一: 哈夫曼编码与译码一、任务设计一个运用哈夫曼算法的编码和译码系统, 反复地显示并解决以下项目, 直到选择退出为止。

规定:1) 将权值数据存放在数据文献(文献名为data.txt, 位于执行程序的当前目录中) ;2) 初始化:键盘输入字符集记录字符权值、自定义26个字符和26个权值、记录文献中一篇英文文章中26个字母, 建立哈夫曼树;3) 编码: 运用建好的哈夫曼树生成哈夫曼编码;4) 输出编码(一方面实现屏幕输出, 然后实现文献输出);5)译码(键盘接受编码进行译码、文献读入编码进行译码);6) 界面优化设计。

二、流程图三、代码分解 //头文献 #include<stdio.h> #include<string.h> #include<stdlib.h> #include <conio.h> #define N 1000 #define M 2*N-1 #define MAXcode 6000 //函数声明void count(CHar &ch,HTNode ht[]);void editHCode(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); //编码函数void printyima(HTNode ht[],HCode hcd[],int n,char bianma[]); //译码函数 void creatHT(HTNode ht[],int n);字符集记录符集记录权值 权值 至文献“哈夫曼树。

t xt” 菜单1.从键盘输入字符集进行编码2.从文献读入字符集进行编码1.从键盘输入编码进行译码2.从文献读入编码进行译码0.返回上级菜单 0.返回上级菜单void CreateHCode (HTNode ht[],HCode hcd[],int n);void DispHCode(HTNode ht[],HCode hcd[],int n);void input_key(CHar &ch);void input_file(CHar &ch);void input_cw(HTNode ht[]);void bianma1(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); void bianma2(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]); void yima1(HTNode ht[],HCode hcd[],int n,char bianma[]);void yima2(HTNode ht[],HCode hcd[],int n,char bianma[]);void creat_cw();void bianmacaidan();void yimacaidan();void bianmayima();int caidan();//结构体typedef struct{char data;int parent;int weight;int lchild;int rchild;}HTNode;typedef struct{char cd[N];int start;}HCode;typedef struct{char s[N];int num;}CHar;CHar ch;HTNode ht[M];HCode hcd[N];//主函数int main(){int xh;while(1){system("color 1f"); //操作菜单背景颜色 xh=caidan(); //调用菜单函数switch(xh) //switch语句 {case 1:system("cls");creat_cw();break;case 2:system("cls");creatHT(ht,n);break;case 3:system("cls");CreateHCode(ht,hcd,n);DispHCode(ht,hcd,n);break;case 4:system("cls");bianmayima();break;case 0:system("cls");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t感谢使用本系统!\n\n\n\n\n\n\n \t\t\t");exit(0);default:system("cls");putchar('\a');printf("\n\t\t输入有误, 请重新输入:\n");break;}}return 0;}//菜单函数int caidan() //菜单函数模块//{int xh;printf("\n\n\n");printf("\t\t 欢迎使用哈夫曼编码译码系统\n");printf("\t\t \n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*= =*\n");printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n");printf("\t\t*= 1.建立字符权值=*\n");printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 2.建立并输出哈夫曼树=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 3.生成并查看哈夫曼编码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 4.编码与译码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*= =*\n"); printf("\t\t*= 0.退出系统=*\n"); printf("\t\t*= =*\n"); printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n"); printf("\n\t\t请输入序号进行选择:");scanf("%d", &xh);return xh; //返回从键盘接受的选项}void bianmayima(){int xh;while(1){printf("\n\n\n\n\n");printf("\t\t 编码与译码\n"); printf("\t\t \n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n");printf("\t\t*= 1.编码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 2.译码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 0.返回上级菜单=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh);switch(xh) //switch语句{case 1:system("cls");bianmacaidan();break;case 2:system("cls");yimacaidan();break;case 0:system("cls");return;default:system("cls");putchar('\a');printf("\n\t\t输入有误, 请重新输入:\n");break;}}}void yimacaidan(){int xh;while(1){printf("\n\n\n\n\n");printf("\t\t 译码\n"); printf("\t\t \n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 1.键盘输入编码进行译码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 2.文献读入编码进行译码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 0.返回上级菜单=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh);switch(xh) //switch语句{case 1:system("cls");yima1(ht,hcd,n,bianma);break;case 2:system("cls");yima2(ht,hcd,n,bianma);break;case 0:system("cls");return;default:system("cls");putchar('\a');printf("\n\t\t输入有误, 请重新输入:\n");break;}}}void bianmacaidan(){int xh;while(1){printf("\n\n\n\n\n");printf("\t\t 编码\n"); printf("\t\t \n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 1.键盘输入字符集编码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 2.文献读入文章编码=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 0.返回上级菜单=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh);switch(xh) //switch语句{case 1:system("cls");bianma1(ht,hcd,ch,n,bianma);break;case 2:system("cls");bianma2(ht,hcd,ch,n,bianma);break;case 0:system("cls");return;default:system("cls");putchar('\a');printf("\n\t\t输入有误, 请重新输入:\n");break;}}}void creat_cw(){int xh2;while(1){printf("\n\n\n\n\n");printf("\t\t 建立字符权值\n"); printf("\t\t \n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 1.从键盘输入字符集进行记录=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 2.从文献读入字符集记录=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 3.自定义字符权值=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t*= 0.返回上级菜单=*\n"); printf("\t\t*= *=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh2);switch(xh2) //switch语句{case 1:system("cls");input_key(ch);break;case 2:system("cls");input_file(ch);break;case 3:system("cls");input_cw(ht);break;case 0:system("cls");return;default:system("cls");putchar('\a');printf("\n\t\t输入有误, 请重新输入:\n");break;}}}//建立字符权值模块void input_key(CHar &ch){int i,j=0;char st[N];printf("请输入字符集(以‘#’结束):\n");for(i=0;i<N;i++){scanf("%c",&st[i]);if(st[i]=='#'){st[i]='\0';break;}}strcpy(ch.s,st);count(ch,ht);printf("按任意键返回!");getch();system("cls");return;}void input_file(CHar &ch){int i;FILE*fp;char filename[20];printf("请输入要打开的文献名(*.txt):");scanf("%s",&filename);if((fp=fopen(filename,"r"))==NULL){printf("\n\t\t文献打开失败");return;}for(i=0;!feof(fp);i++){fread(&ch.s[i],sizeof(char),1,fp);}printf("读入成功!\n");printf("文献中的字符集为:%s\n",ch.s);fclose(fp);count(ch,ht);printf("按任意键返回!");getch();system("cls");return;}void input_cw(HTNode ht[]){int i,w,s,j;char a;printf("要输入的字符总个数是?:");scanf("%d",&s);n=s;printf("请输入字符及其权值:\n");for(i=0;i<s;i++){printf("请输入第%d个字母:",i+1);scanf("%s",&a);ht[i].data=a;printf("请输入其权值:");scanf("%d",&w);ht[i].weight=w;}FILE *fp;if((fp=fopen("data.txt","w"))==0){printf("\n\t\t文献打开失败");return;}printf("\n定义权值成功!\n\n");printf("各字符及其权值为:\n\n");fprintf(fp,"各字符及其权值为:\n");printf(" 字符\t权值");fprintf(fp," 字符\t权值");for(j=0;j<i;j++){ printf("\n");fprintf(fp,"\n");printf(" %-8c%-8d",ht[j].data,ht[j].weight);fprintf(fp," %-8c%-8d%",ht[j].data,ht[j].weight); }printf("\n");printf("\n字符权值已输出至文献“data.txt”!");fclose(fp);printf("输入完毕, 按任意键返回!");getch();system("cls");return;}//记录字符权值函数void count(CHar &ch,HTNode ht[]){int i,j,m=0;char c[N];int sum[N]={0};for(i=0;ch.s[i]!='\0';i++){for(j=0;j<m;j++)if(ch.s[i]==c[j]||(c[j]>='a'&&c[j]<='z'&&ch.s[i]+32==c[j])) break;if(j<m)sum[j]++;else{if(ch.s[i]>='A'&&ch.s[i]<='Z')c[j]=ch.s[i]+32;else c[j]=ch.s[i];sum[j]++;m++;}}for(i=0;i<m;i++){ht[i].data=c[i];ht[i].weight=sum[i];}n=m;FILE *fp;if((fp=fopen("data.txt","w"))==0) {printf("\n\t\t文献打开失败"); return;}printf("\n记录权值成功!\n\n"); printf("各字符及其权值为:\n\n"); fprintf(fp,"各字符及其权值为:\n"); printf(" 字符\t权值");fprintf(fp," 字符\t权值");for(j=0;j<m;j++){ printf("\n");fprintf(fp,"\n");printf(" %-8c%-8d",ht[j].data,ht[j].weight);fprintf(fp," %-8c%-8d%",ht[j].data,ht[j].weight);}printf("\n");printf("\n字符权值已输出至文献“data.txt”!");fclose(fp);}//构造哈夫曼树void creatHT(HTNode ht[],int n){FILE *fp;if((fp=fopen("哈夫曼树.txt","w"))==0){printf("\n\t\t文献打开失败");return;}int i,j,k,lnode,rnode;int min1,min2;for (i=0;i<2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=-1;for (i=n;i<2*n-1;i++){min1=min2=32767;lnode=rnode=-1;for(k=0;k<=i-1;k++)if(ht[k].parent==-1){if (ht[k].weight<min1){min2=min1;rnode=lnode;min1=ht[k].weight;lnode=k;}else if(ht[k].weight<min2){min2=ht[k].weight;rnode=k;}}ht[lnode].parent=i;ht[rnode].parent=i;ht[i].weight=ht[lnode].weight+ht[rnode].weight;ht[i].lchild=lnode;ht[i].rchild=rnode;}printf("建立huffman树成功!\n");printf("输出huffman树:\n");fprintf(fp,"输出huffman树:\n");printf("\t字符\t权值\t父节点\t 左子节点\t右子节点");fprintf(fp,"\t字符\t权值\t父节点\t 左子节点\t右子节点");for(j=1;j<i;j++){ printf("\n");fprintf(fp,"\n");printf("\t %-8c%-8d%-10d%-14d%-10d",ht[j].data,ht[j].weight,ht[j].parent,ht[i]. lchild,ht[j].rchild);fprintf(fp,"\t %-8c%-8d%-10d%-14d%-10d",ht[j].data,ht[j].weight,ht[j].parent,h t[i].lchild,ht[j].rchild);}printf("\n");printf("哈夫曼树已输出至文献“哈夫曼树.txt”!按任意键返回!");fclose(fp);getch();system("cls");return;}//生成哈夫曼编码void CreateHCode (HTNode ht[],HCode hcd[],int n){int i,f,c,j=0;HCode hc;for(i=0;i<n;i++){hc.start=n;c=i;hc.cd[hc.start--]='0';f=ht[i].parent;while(f!=-1){if (ht[f].lchild==c)hc.cd[hc.start--]='0';elsehc.cd[hc.start--]='1';c=f;f=ht[f].parent;}hc.start++;for(j=0;j<hc.start;j++)hc.cd[j]=' ';hcd[i]=hc;}}void DispHCode(HTNode ht[],HCode hcd[],int n) {FILE *fp;if((fp=fopen("哈夫曼编码.txt","w"))==0){printf("\n\t\t文献打开失败");return;}int i,k;int sum=0,m=0,j;printf("输出字符哈夫曼编码:\n"); fputs("输出字符哈夫曼编码:\n",fp); for (i=0;i<n;i++){j=0;printf("%c:\t",ht[i].data);fprintf(fp,"\n%c:\t",ht[i].data);for (k=hcd[i].start;k<=n;k++){printf("%c",hcd[i].cd[k]);j++;fprintf(fp,"%c",hcd[i].cd[k]); }m+=ht[i].weight;sum+=ht[i].weight*j;printf("\n");}printf("\n哈夫曼编码已保存至文献“哈夫曼编码.txt!按任意键返回!”");fclose(fp);getch();system("cls");}//编码函数void bianma1(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]){int i;char str[N];printf("请输入要编码的字符集(以‘#’结束):\n");for(i=0;i<N;i++){scanf("%c",&str[i]);if(str[i]=='#'){str[i]='\0';break;}}strcpy(ch.s,str);ch.num=strlen(str);editHCode(ht,hcd,ch,n,bianma);getch();system("cls");}void bianma2(HTNode ht[],HCode hcd[],CHar &ch,int n,char bianma[]) {int i;FILE*fp;char filename[20];printf("请输入要打开的文献名(*.txt):");scanf("%s",&filename);if((fp=fopen(filename,"r"))==NULL){printf("\n\t\t文献打开失败");return;}for(i=0;!feof(fp);i++){fread(&ch.s[i],sizeof(char),1,fp);}ch.num=strlen(ch.s);printf("\n读入成功!\n");printf("文献中的字符集为:\n%s",ch.s);fclose(fp);editHCode(ht,hcd,ch,n,bianma);system("cls");return;}//译码函数void yima1(HTNode ht[],HCode hcd[],int n,char bianma[]) {int i;char code[MAXcode];printf("请输入编码进行译码(以‘#’结束):\n");for(i=0;i<MAXcode;i++){scanf("%c",&code[i]);if(code[i]=='#'){code[i]='\0';break;}}strcpy(bianma,code);printyima(ht,hcd,n,bianma);printf("\n译码完毕!按任意键返回!");getch();system("cls");return;}void yima2(HTNode ht[],HCode hcd[],int n,char bianma[]) {int i;FILE*fp;char filename[20];printf("请输入要打开的文献名(*.txt):");scanf("%s",&filename);if((fp=fopen(filename,"r"))==NULL){printf("\n\t\t文献打开失败");return;}for(i=0;!feof(fp);i++){fread(&bianma[i],sizeof(char),1,fp);}printf("读入成功!\n");printf("文献中的编码是:%s\n",bianma);printyima(ht,hcd,n,bianma);printf("\n译码完毕!按任意键返回!");getch();system("cls");}四、调试结果主菜单建立字符权值选择2.从文献读入字符进行记录输入测试文献名“cs.txt”输出个字符权值建立哈夫曼树并输出至文献生成哈夫曼编码并保存至文献编码选择2.从文献读入字符集编码编码结果保存至文献译码选择2.从文献读入编码, 读入上一步的编码译码完毕, 返回!退出系统。

数据结构课程设计-2019版

数据结构课程设计-2019版

课程设计题目(2019版):(1-8题必做)1、系统进程统计(必做)(链表)[问题描述]设计一个程序,每秒统计一次当前系统的进程状况,并按照内存使用自多到少排序打印输出相关信息。

对已经结束的进程,另外给出一个列表,并显示该进程的结束时间和持续时间。

[基本要求](1)该题目要求使用两个链式线性表。

一个链表存储当前活动进程,要求使用双向链表,排序要求是按照内存使用自多到少排序。

另外一个链表存储已结束进程,要求使用单向链表,按照结束时间离当前时间的关系排序,最近的最前,最远的最后。

(2)每秒在窗口内更新一次当前系统进程情况,输出内容包括:进程名,持续时间,内存使用情况。

(3)每秒在窗口内更新一次已结束进程情况,输出内容包括:进程名,持续时间,结束时间。

(4)注意进程在这两个链表中的切换,一个进程既可被结束,也可以过一段时间后再被运行。

2、算术表达式求值(必做) (栈)[问题描述]一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。

假设操作数是正实数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#6+15*(21-8/4)#。

引入表达式起始、结束符是为了方便。

编程利用“运算符优先法”求算术表达式的值。

[基本要求](1)从键盘或文件读入一个合法的算术表达式,输出正确的结果。

(2)显示输入序列和栈的变化过程。

(3)考虑算法的健壮性,当表达式错误时,要给出错误原因的提示。

(4)实现非整数的处理(*)。

3、公共钥匙盒(必做)(线性表,栈,队列)[问题描述]有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。

每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。

钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。

一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。

数据结构课程设计题目

数据结构课程设计题目

数据结构课程设计题目题目一:工资管理程序功能简介:完成员工工资信息管理,如员工工资信息的新建、存储、显示、修改和删除等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目二:物品库存管理程序功能简介:实现物品库存管理,如进库、出库、浏览、修改等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目三:个人财政支出管理程序功能简介:个人财政支出管理程序,如完成收入、支出、赢余的记录和管理等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目四:电话簿管理程序功能简介:一个基本的电话簿管理程序,如插入、删除、显示、修改和查询联系人电话号码等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目五:股票交易系统程序功能简介:股票交易系统的管理,如增加新股票、删除旧股票、挂起股票、住手交易、修改股票的名称、代码、股票买卖等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目六:学生信息管理程序功能简介:完成学生基本的管理,如学生基本信息的新建、存储、显示、修改和删除等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目七:学生成绩管理程序功能简介:完成学生成绩管理,如学生成绩信息的录入、显示、修改和浏览等功能(系统功能可充分自由发挥),最好用文件系统存储数据信息。

题目八:运动会分数统计任务:参加运动会有 n 个学校,学校编号为1……n。

比赛分成 m 个男子项目,和 w 个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或者前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或者前三名由学生自己设定。

(m<=20,n<=20)功能要求:可以输入各个项目的前三名或者前五名的成绩 ;能统计各学校总分,可以按学校编号或者名称、学校总分、男女团体总分排序输出 ;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或者前五名的学校。

数据结构课程设计参考题目(一)

数据结构课程设计参考题目(一)

数据结构课程设计参考题目(一)数据结构是计算机科学中的一门基础课程,它主要研究数据的组织、存储、管理和操作等方面的问题。

随着计算机技术的发展,数据结构逐渐成为各个领域必不可少的一门课程。

而数据结构课程设计参考题目是该课程的一项重要内容,它能够帮助学生更好地掌握课程知识,提高对数据结构的理解和应用能力。

以下是几个数据结构课程设计参考题目。

1.链表操作设计一个链表类,使得它能够实现插入、删除、查找和遍历链表的操作。

要求采用单向链表或双向链表实现,并考虑链表的循环操作。

同时,要求能够对链表进行排序操作。

2.栈与队列操作设计一个栈和队列类,使得它们能够实现入栈、出栈、入队和出队的操作。

要求采用数组或链表实现,并可用于表达式转换和括号匹配等相关问题。

3.堆排序算法实现堆排序算法,要求能够对整型数列进行排序,并输出其排序后的结果。

要求堆的构建、删除和调整操作均可用最大堆或最小堆实现。

同时,要求能够对算法的时间复杂度进行分析,并与快速排序等算法进行比较。

4.哈希表实现设计一个哈希表类,使其能够实现插入、删除和查找等操作。

要求采用链地址法或开放地址法实现,同时需要考虑哈希函数和扩容等问题。

要求能够对哈希冲突的解决方法进行比较和分析。

5.树与图的遍历实现二叉树、B树或B+树的遍历操作,要求能够实现先序、中序和后序遍历,并能够循环遍历或递归遍历。

同时,要求能够对树的平衡性进行探究和讨论。

另外,树的遍历也是图的遍历的基础,可以通过深度优先搜索或广度优先搜索实现图的遍历。

以上是一些常见的数据结构课程设计参考题目,它们可以锻炼学生的编程能力、算法分析能力和数据处理能力,同时也可以增强学生对数据结构知识的理解和掌握。

数据结构课程设计分类题目 (1)

数据结构课程设计分类题目 (1)
15、设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法 :(要求用最少的时间和最小的空间)
(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);
13、设有一个由正整数组成的无序单链表,编写完成下列功能的算法:
(1)找出最小值结点,且打印该数值;
(2)若该数值是奇数,则将其与直接后继结点的数值交换;
(3)若该数值是偶数,则将其直接后继结点删除。
14、在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。例如:(7,10,10,21,30,42,42,42,51,70)将变作(7,10,21,30,42,51,70)。
printf(sum);}
树和二叉树
1、二叉树用二叉链表存储,写一个算法将二叉树中的叶子结点按从右至左的顺序建立一个单链表。
2、知二叉树用二叉链表存储,写出求二叉树宽度的算法。所谓宽度是指在二叉树的各层上,具有结点数最多的那一层上的结点总数。
3、叉树用二叉链表存储,写一个算法交换各结点的左右子树。
4、二叉树用二叉链表存储,若结点的左孩子的数据域的值大于右孩子数据域的值,则交换其左右子树。
19、试设计一个算法打印出由根结点出发到达叶结点的所有路径。
20、试写出算法,求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。
21、给定一组项及其权值,假定项都存放于二叉树的树叶结点,则具有最小带权外部路径长度的树称为huffman 树。编写构造huffman 树 的算法。
22、已知一中序线索二叉树,写一算法完成对它的中序扫描。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计题目
题目一考试报名系统(必做)
项目简介:
考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量。

本项目是对考试报名管理的简单模拟,用控制台选项的选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。

项目功能要求:
本项目的实质是完成对考生信息的建立,查找,插入,修改,删除等功能。

其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。

项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员函数以完成对数据操作的相应功能;最后完成主函数以验证各个成员函数的功能并得到运行结果。

(建议采用链表实现)
系统示例
题目二约瑟夫生者死者游戏
项目简介
约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万分;因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难。

无奈,大家只得统一这种方法,并议定30个人围成一圈,由第一个人开始,依次报数,数到第9人,便将他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。

问哪些位置是将被扔下大海的位置。

项目功能要求:(要求采用单循环链表)
本游戏的数学建模如下:假如N个旅客排成一个环形,依次顺序编号1, 2, …, N。

从某个指定的第S号开始。

沿环计数,每数到第M个人就让器出列,且从下一个人开始重新计数,继续进行下去。

这个过程一直进行到剩下K个旅客为止。

本游戏要求用户输入的内容包括:
1、旅客的个数,也就是N的值;
2、离开旅客的间隔书,也就是M的值;
3、所有旅客的序号作为一组数据要求存放在某种数据结构中。

本游戏要求输出的内容是包括:
1.离开旅客的序号;
2.剩余旅客的序号。

系统示例
题目三勇闯迷宫游戏
项目简介:
迷宫只有两个门,一个门叫入口,另一个门叫出口。

一个骑士骑马从入口进入迷宫,迷宫设置很多障碍,骑士需要在迷宫中寻找通路以到达出口。

项目功能要求:
迷宫问题的求解过程可以采用回溯法即在一定的约束条件下试探地搜索前进,若前进中受阻,则及时回头纠正错误另择通路继续搜索的方法。

从入口出发,按某一方向向前探索,若能走通,即某处可达,则到达新点,否则探索下一个方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的道路都探索到,或找到一条通路,或无路可走又返回入口点。

在求解过程中,为了保证在达到某一个点后不能向前继续行走时,能正确返回前一个以便从下一个方向向前试探,则需要在试探过程中保存所能够达到的每个点的下标以及该点前进的方向,当找到出口时试探过程就结束了。

项目示例
题目四N皇后问题
项目简介:
八皇后问题是一个古老而著名的问题,是回溯算法的经典问题。

该问题是十九世纪著名的数学家高斯在1850年提出的:在8*8的国际象棋棋盘上,安放8个皇后,要求没有一个皇后能够“吃掉”任何其它一个皇后,即任意两个皇后不能处于同一行,同一列或者同一条对角线上,求解有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法得到结论,有92中摆法。

本实验拓展了N皇后问题,即皇后个数由用户输入。

项目功能要求:
八皇后在棋盘上分布的各种可能的格局数目非常大,约等于2的32次方种,但是,可以将一些明显不满足问题要求的格局排除掉。

由于任意两个皇后不能同行,即每行只能放置一个皇后,因此将第i个皇后放在第i航上,这样在放置第i个皇后时,只要考虑它与前i-1
个皇后处于不同列和不同对角线位置上即可。

解决这个问题采用回溯法,首先将第一个皇后放置在第一行第一列,然后,依次在下一行上放置一个皇后,直到八个皇后全部放置安全。

在放置每个皇后时,都依次兑每一列进行检测,首先检测放在第一列是否与已放置的皇后冲突,如不冲突,则将皇后放置在该列,否则,选择改行的下一列进行检测。

如整行的八列都冲突,则回到上一行,重新选择位置,依次类推。

项目示例
题目五关键字检索系统
项目简介:
建立一个文本文件,文件名由用户用键盘输入,输入一个不含空格的关键字,统计输出关键字在文本中的出现次数。

项目功能要求
本项目的设计要求可以分成两个部分实现:首先建立一个文本文件,文件名由用户用键盘输入;然后输入一个不含空格的关键字,统计输出该单词在文本中的出现次数。

项目示例
题目六家谱管理系统
项目简介:
家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世袭繁衍和重要任务事迹的特殊图书体裁。

家谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属于珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有其不可替代的独特功能。

本项目兑对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息,插入家族成员,删除家族成员的功能。

项目功能要求:
本项目的实质是完成兑家谱成员信息的建立,查找,插入,修改,删除等功能,可以首先定义家族成员数据结构,然后将每个功能作为一个成员函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得到运行结果。

项目示例:
题目七表达式计算
项目简介:
表达式求值是程序设计语言编译中的一个最基本问题,就是将一个表达式转化为逆波兰表达式并求值。

具体要求是以字符序列的形式从终端输入语法正确的,不含变量的整数表达式,并利用给定的优先关系实现对算术四则混合表达式的求值,并延时在求值过程中运算符栈,操作数栈,输入字符和主要操作变化过程。

要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能正确解释表达式。

任何一个表达式都是由操作符,运算符和界限符组成,我们称它们为单词。

一般来说,操作数既可以是常数,又可以是被说明为变量或常量的标识符;运算符可以分成算术运算符,关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。

为了叙述的简洁,我们仅仅讨论简单算术表达式的求值问题。

这种表达式只包括加,减,乘,除4种运算符。

人民在书写表达式时通常采用的是“中缀”表达形式,也就是将运算符放在两个操作数
中间,用这种“中缀”形式表示的表达式称为中缀表达式。

但是,这种表达式表示形式对计算机处理来说是不大合适的。

对于表达式的表示还有另一种形式,称之为“后缀表达式“,也就是将运算符紧跟在两个操作书的后面。

这种表达式比较合适计算机的处理方式,因此要用计算机来处理,计算表达式的问题,首先要将中缀表达式转化成后缀表达式,又称为逆波兰表达式。

项目功能要求:
为了实现表达式求值,本项目要求首先读入表达式(包括括号)并创建对应二叉树,其次对二叉树进行前序遍历,中序遍历,后续遍历,输出对应的逆波兰式,中序表达式和波兰表达式。

项目示例
题目八电网建设造价模拟系统(必做)
项目简介
假设一个城市有n个小区,要实现n个小区之间的电网都能够相互接通,构造这个城市n个小区之间的电网,使总工程造价最低。

请设计一个能够满足要求的造价方案。

项目功能要求:
在每个小区之间都可以设置一条电网线路,都要付出相应的经济代价。

n个小区之间最多可以有n(n-1)/2条线路,选择其中的n-1条使总的耗费最少。

项目示例
题目九二叉排序数
项目简介:
依次输入关键字并建立二叉排序树,实现二叉排序数的插入和查找功能。

项目功能简介:
二叉排序树就是指将原来已有的数据根据大小构成一棵二叉树,二叉树中的所有结点数据满足一定的大小关系,所有的左子树中的结点均比根结点小,所有的右子树的结点均比根结点大。

二叉排序树查找是指按照二叉排序树中结点的关系进行查找,查找关键自首先同根结点进行比较,如果相等则查找成功;如果比根节点小,则在左子树中查找;如果比根结点大,则在右子树中进行查找。

这种查找方法可以快速缩小查找范围,大大减少查找关键的比较次数,从而提高查找的效率。

项目示例
项目十8中排序算法的比较案例(必做)
项目简介:
随机函数产生10000个随机数,用快速排序,直接插入排序,冒泡排序,选择排序的排序方法排序,并统计每种排序所花费的排序时间和交换次数。

其中,随机数的个数由用户定义,系统产生随机数,并且显示他们的比较次数,排序算法包括冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序,归并排序和基排序。

项目示例
考核方法:
每位同学选择其中的6个项目作为课程设计。

所有项目最终提交时间是:1月9日18:00作业提交内容包括:程序的可执行文件,项目源码,以及项目说明文档。

材料统一上交到学院的服务器上,命名规则是:
项目序号_学生学号_学生姓名.exe
项目序号_学生学号_学生姓名.cpp(或者项目序号_学生学号_学生姓名.java)
项目序号_学生学号_学生姓名.doc
成绩评定方法:
平时成绩签到20%。

项目可执行文件:30% 项目源码:20%
项目说明文档:30%。

相关文档
最新文档