数据结构与算法课程设计
算法与数据结构课程设计 报告

算法与数据结构课程设计报告课程设计题目:图的基本操作及应用数据结构课程设计是在学完数据结构课程之后的实践教学环节。
本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。
要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。
一.设计目的1.提高数据抽象能力。
根据实际问题,能利用数据结构理论课中所学到的知识选择合适的逻辑结构以及存储结构,并设计出有效解决问题的算法。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.初步了解开发过程中问题分析、整体设计、程序编码、测试等基本方法和技能。
二.设计任务设计一个基于DOS菜单的应用程序。
要利用多级菜单实现各种功能。
内容如下:1.无向图的基本操作及应用①创建无向图的邻接矩阵②创建无向图的邻接表③无向图的深度优先遍历④无向图的广度优先遍历2.有向图的基本操作及应用①创建有向图的邻接矩阵②创建有向图的邻接表③拓扑排序3.无向网的基本操作及应用①创建无向网的邻接矩阵②创建无向网的邻接表③求最小生成树4.有向网的基本操作及应用①创建有向网的邻接矩阵②创建有向网的邻接表③关键路径④单源最短路径三.设计指导第一步:根据设计任务,设计DOS菜单。
第二步:设计菜单(c语言)#include<stdio.h>void ShowMainMenu(){printf("\n");printf("**************图的基本操作及应用***************\n");printf("* 1 无向图的基本操作及应用*\n");printf("* 2 有向图的基本操作及应用*\n");printf("* 3无向网的基本操作及应用*\n");printf("* 4有向网的基本操作及应用*\n");printf("* 5退出\n");printf("***********************************************\n"); }void UDG(){int n;do{printf("\n");printf("**************无向图的基本操作及应用***************\n");printf("* 1创建无向图的邻接矩阵*\n");printf("* 2创建无向图的邻接表*\n");printf("* 3无向图的深度优先遍历*\n");printf("* 4无向图的广度优先遍历*\n");printf("* 5退出\n");printf("***********************************\n"); printf("请选择:");scanf("%d",&n);switch(n){case 1:printf("----------wait-------");break;case 2:printf("----------wait-------");break;case 3:printf("----------wait-------");break;case 4:printf("----------wait-------");break;case 5:break;default:printf("ERROR!");}}while(n!=5);}void DG(){int n;do{printf("\n");printf("************** 有向图的基本操作及应用***************\n"); printf("* 1创建有向图的邻接矩阵*\n");printf("* 2创建有向图的邻接表*\n");printf("* 3拓扑排序*\n");printf("* 4退出*\n");printf("*******************************\n"); printf("请选择:");scanf("%d",&n);switch(n){case 1:printf("--------wait-------");break;case 2:printf("--------wait-------");break;case 3:printf("--------wait-------");break;case 4:break;default:printf("ERROR!");}}while(n!=4);}void UDN(){int n;do{printf("\n");printf("**************无向网的基本操作及***\n");printf("* 1创建无向网的邻接矩阵*\n");printf("* 2创建无向网的邻接表*\n");printf("* 3Prim算法求最小生成树*\n");printf("* 4kraskal算法求最小生成树*\n");printf("* 5退出\n");printf("*************************************\n"); printf("请选择:");scanf("%d",&n);switch(n){case 1:printf("---------wait-------");break;case 2:printf("-------wait-------");break;case 3:printf("---------wait-------");break; case 4:printf("---------wait-------");break; case 5:break;default:printf("ERROR!");}}while(n!=5);}void DN(){int n;do{printf("\n");printf("**************有向网的基本操作****\n");printf("* 1创建有向网的邻接矩阵*\n");printf("* 2创建有向网的邻接表*\n");printf("* 3关键路径*\n");printf("* 4单源顶点最短路径问题*\n");printf("* 5退出\n");printf("***********************************\n"); printf("请选择:");scanf("%d",&n);switch(n){case 1:printf("---------wait-------");break;case 2:printf("---------wait-------");break;case 3:printf("---------wait-------");break;case 4:printf("---------wait-------");break;case 5:break;default:printf("ERROR!");}}while(n!=5);}void main(){int n;do{ShowMainMenu();printf("请选择:");scanf("%d",&n);switch(n){case 1:UDG();break;case 2:DG();break;case 3:UDN();break;case 4:DN();break;case 5:break;default:printf("ERROR!");break;}}while(n!=5);}第三步:添加功能函数。
数据结构与算法课程设计 心得体会 学习体会 (27)

课程设计心得体会“数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。
其目的是要达到理论与实际应用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。
拿到一个题目首先要分析这个程序所需要完成的功能,如本题需要完成电话簿记录的添加、查找、显示和清空四个基本功能。
在此基础上我们再看题目上要求需要用哈希表来进行程序的设计,如何合理的处理地址同义词之间的冲突,我们选择拉链法。
这只是初步思路,在具体编写程序的时候,如何很好的定义结点,结点包括哪些数据,如何合理的处理冲突,哈希地址的计算方法都需要我们进行仔细的思考和斟酌。
从一开始实现数据的添加到之后数据的查找是一步一步摸索的过程,可能我们会有现成的例题可以借鉴,但是开了之后,我们思想的散发性就会受到限制,可能想法不够全面,但是自己想才会有很深的体会。
我在对这个题目进行思考的过程中,如何合理的利用姓名和电话号码这两个关键字进行哈希地址的运算令我想了挺久的,最后借鉴了一种很好的哈希地址求法,将姓名和电话号码从第二开始累加,对30求模得出哈希地址。
之后我觉得比较重要的就是对一个程序完善性的理解,当一个程序的基本框架出来之后,如何去完善它,美化它。
对于一些功能的实现,如出现重复的数据如何查找,如何输出之类的问题,十分重要。
我在这次思考中就没有处理好。
程序完成后,没有想到对重复数据的处理,在查找时,导致了死循环的产生。
再者,比较重要的就是对某一方面知识点的重点掌握和理解,如该实验,你必须对哈希表有着很好的掌握,对各种处理冲突的方法有一定的认识。
在该次实验中,由于对文件方面知识的欠缺,使我没有能够完成文件方面的数据处理,有点小遗憾。
课程设计只有短短的两周时间,但对我们来说,算是一种对动手和思考能力的锻炼,它在一定方面上也提高了我们解决实际问题的能力,要成为一名本专业合格的学生,多进行几次这个类型的活动是十分有意义的。
《数据结构与算法》课程设计报告范例1

《数据结构与算法》课程设计报告姓名:学号:专业:信息与计算科学一、课题:链表的维护与文件形式的保存以有序链表结构表示某家电商场的库存模型。
提/进货时,需对链表进行维护。
每个工作日结束后,应将该链表以文件形式保存;每日营业前,应从文件中恢复该有序链表结构。
链表接点的数据域包括家电名称,品牌,单价和数量,以单价的升序体现链表的有序性。
程序包括:初始化,创建表,插入,删除,更新数据,查询及链表数据与文件之间的转换等;二、功能、算法、体会描述:系统主要有两个界面,第一个界面是查看界面,任何人可以查看到多个库存或日志文件(050902--050905),如果某个库存文件丢失了,可以通过操作恢复,在这也可以也可以查看到某日的金额统计情况,第二个界面是操作界面,只有操作员可以通过密码进入,可以对某个指定的库存文件进行进货,提货,删货,排序,查询操作,操作的情况可以被系统随时保存,当您想退出此界面时可保存库存和日志情况,文件名可自定,保存完后,自动退回到第一个界面,您当然就可以在查看界面中查看到您刚刚保存的库存或者日志文件了。
1.库存查看功能:基本思想:利用SetupGoodsList( )函数,将库存文件内容先转成链表形式,然后利用TraverseList( )函数,遍历一个链表,就可以直接显示查看到了。
具体步骤:先将文件读到结构体中,读满一个结构体内容就将此结构体连到定义好的链表上,这儿利用了InsertRear( )函数,一直这样读下去只到文件里读不到内容为止,语句描述如下:while(ifstr>>g.code){ifstr>>>>g.mark>>g.minq>>g.curq;InsertRear(L,g);}2.日志查看功能:日志文件的内容看起来跟库存文件差不多,但是里面多了个“操作情况”这一览,所以在读的时候要注意这一点,实现这个功能的我编了rizhichakan( )函数基本思想:将文件内容独到结构体数组中,然后再显示出来具体步骤:先读一个字符串到数组d[ ]中,然后用strcmp( ),判断是不是“j”字符串,如果是就连读5个字符串到定义好的结构体数组中,因为这句话是放在while( )循环里的,要能够的起循环就要不断的给d[ ]赋新值,所以循环语句中还有一句:再读第6个字符串到d[ ]中,只要符合循环条件的都会被连续加到结构体数组中,语句描述为:ifstr>>d;//因为是比较两个字符串所以要一个数组while(strcmp(d,"j")==0){ifstr>>r[x].code>>r[x].name>>r[x].mark>>r[x].minq>>r[x].curq;ifstr>>d[0]; //数组赋不起来,所以改成了元素x++;}其它以“t”“s”开头的也同样的道理,这样就将处了开头的“j”“t”“s”字符以外的信息内容全分别存到三个结构体数组中,这样往外显示的时候可以更清楚方便准确,然后就到用for( )语句循环的将结构体内容显示了,语句描述为:for(p=1;p<x;p++){cout<<setw(8)<<"j";cout<<setw(9)<<r[p].code<<setw(16)<<r[p].name<<setw(16)<<r[p].mark<<setw(10)<<r[p]. minq<<setw(10)<<r[p].curq<<endl;体会:在这懂了strcmp( )是比较两个字符串的,不是单纯的字符,对while()循环有了更深刻的理解,明白了文件的内容要经过一个中间环节,才能够显示,这儿的中间环节就是结构体数组。
12级数据结构与算法课程设计指导书

长沙学院课程设计指导书系(部)计算机科学技术专业软件工程(服务外包)2013年12月1 日课程名称:数据结构与算法课程设计课程编号:JX主笔人:刘钢钦主审人:潘怡一、课程设计的目的1 巩固与加深对课程内容的理解。
通过应用程序的设计过程,使学生加深对课程内容的理解,巩固所学的专业基础知识。
2 熟悉开发工具的使用。
通过编制与上机调试程序,使学生逐步积累编制与调试程序的经验,促进实践能力提高。
3 培养与增强学生的综合运用能力。
通过有一定实用价值的应用程序的开发,激发学生的学习兴趣,促进学生综合运用能力的提高。
4培养与增强学生的自学能力和利用文献的能力。
二、课程设计的题目为了充分调动学生的学习积极性与主动性,适应不同兴趣、不同程度的学生对课程设计的要求,本课程设计提供四个任选题。
每个学生可以根据本人的兴趣及能力选择教师指定的选题,也可以自定其他的选题。
1、一元多项式计算问题2、迷宫问题3、利用二叉排序树对顺序表进行排序4、交通咨询系统5、内部排序算法的比较三、设计内容1、一元多项式计算问题问题描述:设计一个稀疏多项式简单计算器基本要求:(1)输入并分别建立多项式A和B(2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列(3)完成两个多项式的相加、相减,并将结果输出;测试数据:(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) A+B A=x3+x1B=-x3-x1(4) A+B A=0 B=x7+x5+x3+x1(5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x选作内容:(1).多项式在x=1时的运算结果(2)求多项式A和B的乘积2、迷宫问题问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。
数据结构与算法应用课程设计

数据结构与算法应用综合课程设计要求与指导数据结构是一门实践性很强的课程,只靠读书和做习题是不能提高实践能力的,尤其是在数据结构中要解决的问题更接近于实际。
所以要求学生在学习过程中,结合实际问题进行相应的课程设计与实践,自己分析问题、设计数据结构和算法,再编写代码上机调试和测试程序,以达到解决实际问题,培养数据结构的应用能力与实践能力。
一、课程设计的要求1、熟练掌握各种数据结构的逻辑结构特性、存储结构与常用操作算法;2、能分析课程设计的相应题目,结合理论学习考虑用一种或多种数据结构来解决问题;3、能分析并设计在某种数据结构下解决问题的步骤即算法;4、熟练掌握面向对象程序设计思想方法与编译系统的使用方法,能较好地编写程序实现数据结构与算法,解决实际问题5、能较好地进行程序的静态检查与动态调试与测试6、能按要求写好课程设计报告二、课程设计的目的1、深入理解和掌握书本上的理论知识,将书本上的知识变“活”2、理论与实践相结合,学会如何把书本上的数据结构和算法的知识用于解决实际问题,培养数据结构的应用能力和软件工程所需要的实践能力3、进行软件工作的规范训练,初次体会软件开发的一般简单过程4、培养团队合作精神和良好的科学作风以及沟通能力三、课程设计的工作步骤1、明确课程设计小组构成与分工每一小组由2人组成,各同学可自由组合。
每小组选择后面课程设计备选题目中的一个,共同完成问题分析和任务定义、数据类型和系统设计后,2人协商分工进行程序设计与调试。
每个同学必须有明确而又互不相同的工作任务,并保证工作量一致。
在课程设计中还要注意两人的协调与合作。
2、问题分析和任务定义首先充分分析和理解问题,明确问题要求做什么,限制条件是什么,即明确“做什么”。
如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么,是否接受非法的输入,对非法输入的回答方式是什么等等2、数据类型和系统设计1)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并定义主程序模块和各抽象数据类型,画出模块之间调用关系图2)详细设计:定义相应的存储结构(写出数据存储结构的类型定义)并写出各过程和函数的算法3、编码实现和静态检查1)编码实现:把算法设计的结果用程序设计语言程序写出来。
[数据结构与算法][课程设计计划][数学与计算机系][信计][本科]
![[数据结构与算法][课程设计计划][数学与计算机系][信计][本科]](https://img.taocdn.com/s3/m/7e2194a9f90f76c660371a4b.png)
《数据结构与算法》课程设计计划一、设计目的数据结构与算法课程设计是《数据结构与算法》课程教案必不可缺的一个重要环节,它可加深学生对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。
通过课程设计,能够提高学生分析问题、解决问题,从而运用所学知识解决实际问题的能力,因而必须给予足够的重视。
二、课程设计任务7-8人为一个课题组,组长1人,要求每组任选2题,各组不得重复选题且需独立完成课题内容,课题组成员必须清楚课题总体设计,必须分有功能模块并独立完成所分模块程序的编写任务。
最终课题组长组织连调,所有成员必须参加。
三、课程设计内容:1.二叉树的中序、前序、后序的递归、非递归遍历算法,按层次遍历的非递归遍历算法的实现,应包含建树的实现。
=================================================================== 2.车厢调度假设停在铁路调度站入口处的车厢序列的编号一次为1,2,3,4。
设计一个程序,求出所有可能由此输出的长度为4的车厢序列。
=================================================================== 3.平衡二叉树的判定给定一个二叉树的先序遍历或后序遍历结果,判定其是否为平衡二叉树。
===========================================================================4.图的基本操作与实现设计要求:(1)自选存储结构,输入含n个顶点(用字符表示顶点)和e条边的图G(2)求每个顶点的度,输出结果;(3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列(提示:使用一个栈实现DFS);(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提示:使用一个队列实现BFS);(5)输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历(执行操作3);否则输出信息“无x”;===========================================================================5.图的算法实现(1)读入图的信息,建立与其对应的邻接矩阵和邻接表;(2)实现Prim、Kruskal、Dijkstra序算法。
数据结构课与算法课程课程设计_高校社团管理设计,二叉树的应用(附全代..

目录引言 (6)1 需求分析 (6)1.1任务与分析 (6)1.2测试数据 (7)2 概要设计 (7)2.1 ADT描述 (7)2.2程序模块结构 (8)2.3 各功能模块 (8)3 详细设计 (9)3.1结构体定义 (9)3.2 初始化 (9)3.3 插入操作 (9)3.4创建 (12)3.5查询 (13)3.6修改 (15)3.7统计 (16)3.8删除 (17)4 调试分析 (21)4.1问题分析和解决 (21)4.2算法的时间复杂度分析 (21)4.3经验和体会 (21)5 用户使用说明 (21)6 测试结果 (21)结论 (27)致谢 (28)高校社团管理数据结构课与算法课程设计任务书学院名称:课程代码:__ _____ 专业:年级:一、设计题目高校社团管理二、主要内容在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。
为了有效管理这些社团,要求编写程序实现以下功能:具体操作:1.画出社团结构的二叉树2.给出数据结构应考考虑树中结点如何表示社团和成员3.实现下列操作(1)初始化存储社团和会员的二叉树;(2)建立以二叉链存储的社团;(3)查询:输入社团名称或社团中团员姓名,在二叉树中进行查找,若找到则显示相应信息;否则显示未找到信息;(4)修改:输入社团名称或社团中团员姓名,修改找到的社团或会员的相关信息;(5)插入:输入新的社团名称,在二叉树中增加一个社团;(6)会员插入:输入新的会员姓名,在指定的社哮中增加一个会员;(7)统计:统计每个社团中的成员数,并显示结果;(8)删除:输入会员,删除相关社团中指定的会员;(9)社团删除:输入社团名称,删除指定的社团。
三、具体要求及应提交的材料用C/C++语言编程实现上述内容,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。
数据结构与算法Python语言描述课程设计

数据结构与算法Python语言描述课程设计一、引言数据结构和算法是计算机程序猿必须掌握的技能。
为了更好地学习和应用数据结构和算法,我们选择Python语言进行描述和设计。
此文档主要介绍针对Python 语言的数据结构与算法课程设计。
二、目的本次课程设计的主要目的是让学员掌握如何利用Python语言设计和实现各种数据结构和算法,并能够应用于实际项目中。
三、设计内容3.1 数据结构部分3.1.1 链表链表是一种常见的数据结构,也是Python语言中常用的数据结构之一。
在本次课程设计中我们主要介绍了如何设计和实现链表,并介绍了在链表中进行插入、删除、查找等操作的方法。
3.1.2 数组数组也是Python语言中常用的一种数据结构,在本次课程设计中我们介绍了如何设计和实现数组,并介绍了在数组中进行插入、删除、查找等操作的方法。
3.1.3 栈和队列栈和队列也是常见的数据结构之一,在本次课程设计中我们介绍了如何设计和实现栈和队列,并介绍了在栈和队列中进行插入、删除、查找等操作的方法。
3.2 算法部分3.2.1 排序算法排序算法是常见的算法,也是Python语言中常用的算法之一。
在本次课程设计中我们主要介绍了几种排序算法,包括冒泡排序、插入排序、选择排序、归并排序以及快速排序,并介绍了这些算法的特点和实现方法。
3.2.2 查找算法查找算法是另一个重要的算法,也是Python语言中常用的算法之一。
在本次课程设计中我们主要介绍了线性查找算法和二分查找算法,并介绍了这些算法的特点和实现方法。
3.2.3 图算法图算法是常见的算法,也是Python语言中常用的算法之一。
在本次课程设计中我们主要介绍了几种图算法,包括最短路径算法、最小生成树算法以及拓扑排序算法,并介绍了这些算法的特点和实现方法。
四、学习方法本次课程设计既适合初学者,也适合有经验的程序猿或研究者。
对于初学者,我们建议先掌握Python语言的基础知识,并按照先后顺序学习文档中介绍的数据结构和算法;对于有经验的程序猿或研究者,可以根据自身需要选择介绍的内容进行学习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构与算法课程设计 一、课程设计的目的、要求和任务 本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写等基本方法。
1.课程的目的 (1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 (2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 (3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力;
2.课程的基本要求与任务 (1)巩固和加深对数据结构基本知识的理解,提高综合运用课程知识的能力。 (2)培养学生自学参考书籍,查阅手册、图表和文献资料的能力。 (3)通过实际课程设计,初步掌握简单软件的分析方法和设计方法。 (4)了解与课程有关的工程技术规范,能正确解释和分析实验结果。 (5)题目具有足够的工作量。
二、课程设计的一般步骤 (1)划分课程设计小组:由不超过3名同学组成一个课程设计小组,自愿组队。 (2)选题与搜集资料:每个课程设计小组在参考选题中选择课题,并保证每人一题。 (3)分析与概要设计:根据搜集的资料,进行程序功能与数据结构分析,并选择合适的数据结构、并在此基础上进行实现程序功能的算法设计。 (3)程序设计:运用掌握C/C++语言编写程序,实现所有程序的各个模块功能。 (4)调试与测试:调试程序,并记录测试情况。 (5)完成课程设计报告。 (6)验收与评分:指导教师对每个同学的开发的系统进行综合验收。 三、任务完成形式 1. 完整的软件系统 最终必须向指导老师提交完整的程序源代码(.c和.cpp以及.h为后缀的文件)、数据文件以及使用说明文件等。源代码文件要特别注意编程规范、代码风格,关键代码需有合理的注释,不含任何无用代码;数据文件内要求有一定数量的“真实”数据(如对于记录文件,需要有5条以上记录); 使用说明文件的第一行,需要给出设计者的学号、姓名,后面为其它说明。 2. 课程设计报告 报告总体上主要包括以下几个部分,封面、目录、课程设计报告正文、使用说明、参考文献。其中课程设计报告正文(12-20页之间,8000字以上),书写规范,应包括如下8个部分: (1)问题描述:描述要求编程解决的问题。 (2)功能要求:给出程序要达到的具体的要求。 (3)算法思想:描述解决相应问题算法的设计思想。 (4)模块划分:描述所设计程序的各个模块(即函数)功能。 (5)数据结构:给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。 (6)核心源程序:给出核心算法源代码,要求有充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。 (7)测试数据:设计测试数据,或具体给出测试数据。要求测试数据能全面地测试所设计程序的功能。 (8)测试情况与结果分析:给出程序的测试情况,并分析运行结果 。
四、成绩评定标准 学生成绩以优、良、中、及格和不及格5个等级评定。 其中: (1)学生编写的实际软件和运行结果,占总成绩45%; (2)设计报告,占总成绩45%。 (3) 小组合作情况,占总成绩的10%。该部分由指导教师进行现场口试,依据表现给分。
只有程序验收通过后,才能按以下方法核定本次课程设计的总成绩。以下几点是决定总成绩的关键因素: (1) 考勤、纪律、实验室卫生 (2) 工作量(代码量、功能多少、难度) (3) 所用到的关键技术 (4) 实用性、创新 (5) 代码书写规范性 (6) 程序界面美观、新技术运用得当 (7) 个人答辩及小组合作情况
以下几种情形认定为成绩不合格: (1) 未能独立完成设计或概念不清; (2) 有效代码总量不足1000行(不含自动生成代码); (3) “管理系统”类课题中使用现有数据库系统如access,SQL Server等; (4) 课程设计报告或源代码有抄袭行为; (5) 3次(含)以上点名未到; (6) 不遵守实验室规章制度,或不按要求完成实验室卫生工作。
五、附课程设计题目 1)可另选题目,经指导老师认可后正式作为课程设计题目。 2) 数据结构课程设计参考题目
1. 文件查重系统 [问题描述] 抄袭检查越来越成为一种重要的需求。本问题要求,从文件中读入两个文件,比较其雷同字句的数目。并给出详细对照。 当两字符串中连续相同字符的个数达到一定数目(例如20字)可视为雷同。也可按照相同字符占句子长度的比例来检测雷同。 [基本功能] 统计不同文件的雷同字段数,字段总长度,雷同字段比例。 [测试数据] 可自己定义。 [实现提示] 程序运行后首先要求用户给出制定的两个文件。 [高级要求] 建立文件库,对新的文件检测该文件与库中哪些文件雷同,并给出相应的比例。
2. 课程设计案例管理系统 收集各本课程的题目案例,每个案例包括 问题描述、基本功能要求、测试数据集、高级或扩展要求、课题实现源代码包、课程设计报告、评语等各部分。 [基本功能] (1).案例导入或录入 (2).展示问题 (3)展示案例结果 (4)案例查询 (5)单问题多解决方案入库的处理
3. 约瑟夫环 [问题描述] 约瑟夫(Joeph)问题的一种描述是:编号为1,2,„,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。 [基本要求] 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 [测试数据] m的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)。 [实现提示] 程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码。设n≤30。 *
4. 长整数运算 [问题描述] 设计一个程序实现两个任意长的整数求和运算。 [基本要求] 利用双项循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是 -(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
[测试数据] (1) 0;0;应输出“0”。 (2) -2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3) -9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。 (4) 1,0001,000;-1,0001,0001;应输出“0”。 (5) 1,0001,0001;-1,0001,0000;应输出“1”。 [实现提示] (1) 每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表视为万进制数。 (2) 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点数目。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。不能给长整数位数规定上限。 [选作内容] 修改上述程序,使它在整型量范围是-(2n-1)~(2n-1)的计算机上都能有效地运行。其中,n是由程序读入的参量。输入数据的分组方法可以另行规定。
5. 多项式链式存储结构及其代数运算 [问题描述] 设计并建立一个链式存储分配系统来表示和操作多项式。为了避免对零和非零多项式进行不同的处理,使用带头结点的循环链表。为了充分利用多项式中不再使用的结点,维护一个可用空间表avail,把不再使用的多项式的结点链入其中。当需要一个新结点时,就查看这个单链表avail。如果表非空,那么可以使用它的一个结点。只有当该表为空时,才使用动态存储分配来创建新结点。 [基本要求] 设计多项式的存储结构,编写并测试下列函数: a) get_node和ret_node,从/向可用空间表申请和插入一个多项式结点。 b) pread,读取一个多项式,并将其转换成循环存储表示。返回指向该多项式的头结点的指针。 c) pwrite,输出多项式,采用能够清楚显示的形式。 d) padd,计算d = a+b。不改变a和b。 e) psub,计算d = a-b。不改变a和b。 f) pmult,计算d = a*b。不改变a和b。 g) eval,计算多项式在某点a的值,其中a是一个浮点型常量。返回结果为浮点数。 h) perase,把存储表示为循环链表的多项式返还给可用空间表。 [实现提示] 为了进一步简化加法算法,把多项式的头结点的指数域设为-1。 *
6. 稀疏矩阵的完全链表表示及其运算 [问题描述] 稀疏矩阵的每个结点包含down,right,row,col和value五个域。用单独一个结点表示一个非零项,并将所有结点连接在一起,形成两个循环链表。使得第一个表即行表,把所有结点按照行序(同一行内按列序)用right域链接起来。使得第二个表即列表,把所有结点按照列序(同一列内按行序)用down链接起来。这两个表共用一个头结点。另外,增加一个包含矩阵维数的结点。稀疏矩阵的这种存储表示称为完全链表表式。 实现一个完全链表系统进行稀疏矩阵运算,并分析下列操作函数的计算时间和额外存储空间的开销。 (2)设计目的 认识和掌握稀疏矩阵的完全链表表示;能够建立并运用这种存储结构 (3) 基本要求 建立一个用户友好、菜单式系统进行下列操作,并使用合当的测试数据测试该系统。 读取一个稀疏矩阵建立其完全链表表示 输出一个稀疏矩阵的内容 删除一个稀疏矩阵 两个稀疏矩阵相加 两个稀疏矩阵相减 两个稀疏矩阵相乘 稀疏矩阵的转置 (4)实现提示 链表上的操作。 *
7. 实现简单数字图像处理 [问题描述] 一幅图像就是一个从位置集到颜色集的变换。考虑二维图像,位置集实际上就是一个矩阵,此时一幅图像实际上就是一个内容为颜色矩阵。如果颜色为0-255间的整数,表示该位置的灰度等级,0为黑色,255为白色,此时的图像称为灰度图。 而图像的处理就是在该矩阵进行相关计算。一种常见的计算就是通过一点和周围8个点的信息共同决定该点的新值:如一点的新值为该点和周围8点颜色值之和的均值,这一操作可用下图表示。
显然这样处理后,图像会变得平滑,因此称为平滑操作。显然将上述操作变为下图时,就成为锐化操作。