2017年数据结构课程设计题目及报告范例
- 格式:docx
- 大小:79.16 KB
- 文档页数:44
XX学院数据结构课程设计(论文)题目:散列表的设计与实现学生XX:X攀学号:4所在院(系):数学与计算机学院专业:网络工程班级:二班指导教师:蒋斌职称:副教授2017年6 月28 日XX学院教务处制附件2:XX学院本科学生课程设计任务书注:任务书由指导教师填写。
附件3:摘要信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。
计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。
散列表的设计与实现所涉及到的操作算法都是以链表或顺序表的基本运算作为基础的,此程序通过通讯录实现,包括建立通讯录,添加记录,查询记录,删除记录,显示记录,修改记录。
通过顺序表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。
关键字:新建通讯录,散列表,散列函数,处理冲突目录摘要V 1课程设计的目的和意义 1 2需求分析 22.1需求概述 22.2需求环境 22.3功能描述 2 3整体设计(方案设计) 33.1系统功能设计 33.2处理功能设计 33.3主要模块 53.4算法模块设计 53.4.1哈希算法 53.5二次探测再散列 6 4程序结构及源代码说明 64.1程序结构说明 64.1.1哈希函数 64.1.2冲突处理函数74.2程序源码及说明8 5程序测试及运行结果说明1 65.1主菜单运行界面1 65.2各项功能测试1 65.2.1用户信息录入1 65.2.2冲突解决175.2.3用户查找17 总结18 参考文献201 课程设计的目的和意义《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
数据结构课程设计报告压缩软件---采用哈夫曼编码技术学号:姓名:指导教师:二○○七年九月七日星期五目录目录 (2)课程设计课题 (3)设计要求及分析 (3)软件开发 (3)软件程序基本介绍 (4)程序代码及功能介绍 (4)---------建立哈夫曼树、压缩、解压缩收获与体会 (10)附录 (11)软件使用说明及图示 (11)【一.】课程设计课题:压缩软件【二.】课程设计要求及分析:要求:准备一个文件,统计该文件中各种字符的频率,对各字符进行Huffman编码,将该文件翻译成Huffman编码文件,再将Huffman编码文件翻译成源文件。
数据压缩理论及哈夫曼树简介:1)数据压缩有2种基本类型:无损压缩和有损压缩,使用无损压缩方法压缩的文件不会丢失任何信息,他与原文件具有可逆性,就是可以通过解压缩的方法恢复原来的数据,通常对文本文件,字处理文件,应用程序等采用这种算法。
有损压缩算法在压缩时回丢失一些信息,压缩后不能完整恢复出原有信息,较多应用于音频,视频图象数据的处理。
2)此处我们所实现的是哈夫曼算法,在计算机信息处理中,哈夫曼编码是一种变长编码法(又称“熵编码法”),用于数据的无损压缩着一术语是指用一张特殊的编码表对源字符进行编码。
这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现频率高的字符使用教短的编码,出现频率高的则使用教长的,使编码后的字符串的平均期望长度降低,从而达到无损压缩数据的目的),同时保持编码的唯一可解性,这种方法是由美国科学家David.A.Huffman发展起来的。
哈夫曼树是哈夫曼算法的理论描述工具,也称最优二叉树,是一种加权路径长度最短的二叉树。
加权路径长度是指树中所有叶子结点的权值乘上其到根结点的路径长度。
N个叶子结点的哈夫曼树共有2n-1个结点,这个性质将运用于使用数组结构存储哈夫曼树,从根结点开始,左子结点分配0,右子结点分配1,沿着树根到各个结点就得到了哈夫曼编码,因为所有被编码的字符都作为叶子结点出现而每个叶子结点路径又是独立的,保障了每个编码都不会四其余码的前缀,这样的编码又称“哈夫曼无重复前缀编码”,着在下面的程序段会应用到。
第二题:电梯模拟1、需求分析:模拟某校九层教学楼的电梯系统。
该楼有一个自动电梯,能在每层停留。
九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。
乘客可随机地进出于任何层。
对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。
模拟时钟从0开始,时间单位为0.1秒。
人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。
而题目的最终要求输出时:按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。
2、设计2.1设计思想:(1)数据结构设计本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来表示电梯的各种状态的:enum {up,down,stop,home}State(home);同时初始化最初状态为电梯在本垒层。
而在电梯的运行过程中对于乘客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的链表来实现这个过程的,同时用结构体来保存该乘客的信息:typedef struct passage{int now;//乘客当前所在的位置int dis;//乘客的目地地int wait;//最长的等待的时间int waitnow;//已经等待的时间struct passage *next;}Passage;虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息:typedef struct lift{int count_C;//计数电梯已到达的层数int count_A;//系统的总时间计数器记得必须初始化为0int flag_in[High];//九个楼层有无请求的标志哪个楼层如果有请求该标志置1int num;//等待队列中的人数记得要进行初始化为0int people;//电梯中人数int flag_out[High];}Lift;(2)算法设计顾名思义本程序在运行的过程中用到的算法便是—“电梯算法”,电梯算法借鉴了磁盘寻道C-LOOK算法,即电梯向一个方向运行,直到这个方向上没有服务为止。
《数据结构与算法》课程设计报告王婧、龚丹、宋毅编写题目:航空订票管理系统学期:秋班号:学号:姓名:成绩:哈尔滨华德学院电子与信息工程学院年月一、实训设计的目的与要求(注:正文为宋体,五号字,为单倍行距)(一)课程设计目的(不少于字).数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(语言),自行实现一个较为完整的应用系统。
.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
具体的有:()熟练掌握链表存储结构及其建立过程和常用操作;()熟练掌握队列的建立过程和常用操作;()学会自己调试程序的方法并掌握一定的技巧。
(二)题目要求(不少于字).每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级,或)以及等候替补的客户名单(包括姓名和所需数量)。
.系统能实现的操作和功能如下:()查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;()承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。
若需要,可登记排队候补;()承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
二、实训环境配置系统三、设计正文.需求分析。
课程设计报告
课程设计名称:数据结构
系:计算机科学系
学生姓名:
班级:
学号:
成绩:
指导教师:
开课时间:学年学期
一.设计题目
二.主要内容
(所选课题的需求分析,实现功能等)
三.课题设计的基本思想,原理和算法描述
(包括课题所用数据结构,界面设计、输入/输出设计,功能模块设计,符号说明等)
四.源程序及注释
五、运行示例及结果分析
(截图分析)
六、调试和运行程序过程中产生的问题及采取的措施
七、总结和展望
(400字以上)
八、参考资料
(格式为:[序号]作者.书名.出版社,出版年份如:
[1] 李建学等著.数据结构课程设计案例精编.清华大学出版社,2007
[2] 唐宁九等主编.数据结构与算法(C++版)实验和课程设计教程. 清华大学出版社,2008)
注:以上所有正文内容(所给八个标题除外)均采用小四字体书写,且每段首行缩进,段落间距1.3倍行距。
算法与数据结构课程设计一、线性表题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时停止报数。
《数据结构》课程设计报告设计题目航班信息的查询与检索专业电子信息工程班级姓名学号完成日期2010-6-28目录1. 问题描述………………………………………………页码2. 系统设计………………………………………………页码3. 数据结构与算法描述…………………………………页码4. 测试结果与分析………………………………………页码5. 总结…………………………………………………页码6. 参考文献………………………………………………页码附录程序源代码…………………………………………页码航班信息的查询与检索1. 问题描述:这学期,我们在余先伦老师的带领下,大致学习了一下《数据结构》,实现了简单的数据结构算法。
现在,我们将完成简单的数据结构课程设计。
在数据结构的学习中我们知道,排序和查找是在数据结构中使用频率非常高。
为了能够快速有效地进行查询与检索,我们需要对记录按关键字进行排列。
选择《航班信息查询与检索》这个课题,主要是因为当今时代的需求。
随着科技与经济的发展,当今乘飞机的人越来越多,这时,快速的了解各类航班的班次、时间、价格及机型的信息将备受关注。
在我开发的这个《航班信息查询与检索》这个系统中,航班号将成为关键字,而且是具有结构特点的一类关键字。
通过关键字的键入,你将获得你所需要的航班的全部信息。
2. 系统设计2.1 设计目标:通过一定的数据结构,实现对信息的查询与检索并按要求输出。
试设计一个航空客运定票系统。
[基本要求]每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。
系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。
《数据结构》课程设计题目《数据结构》课程设计题目课程设计题一:学生成绩管理系统设计目的:1.2.3. 掌握线性链表的建立。
掌握线性链表的基本操作。
掌握查找的基本算法。
设计内容:利用线性链表实现学生成绩管理系统,具体功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出,并能在屏幕上输出操作前后的结果。
设计要求:1.2.3.写出系统需求分析,并建模。
编程实现,界面友好。
输出操作前后的结果。
课程设计题二:停车场管理系统设计目的:1.2.3.4. 掌握栈和队列的建立。
掌握栈和队列的基本操作。
深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们。
加深对栈和队列的理解和认识。
设计内容:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。
每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。
如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
编制一程序模拟该停车场的管理。
设计要求:1. 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
2. 每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。
3. 对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费,功能可自己添加)。
《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求1 线性表的另一种实现。
对顺序表空间被耗尽问题的一个解决办法是:当数组溢出时,用一个更大的数组替换该数组。
一个较好的法则是:当出现溢出时,数组长度加长一倍具有较高的时间和空间效率。
参照教材中顺序表的有关内容,按上面的要求实现顺序表,并测试当数组溢出时你的实现的运作情况。
二、所采用的数据结构ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、主要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。
景德镇陶瓷大学数据结构课程设计报告题目:通讯录管理院系名称:信息学院专业名称:信息与计算科学班级:学生姓名:学号:指导教师:设计起止时间:2017.06.5——2017.06.16一. 设计目的1、通过本次课程设计巩固《数据结构》中所学的内容;2、提高自己上机编程以及调试能力。
二. 设计内容建立一个通讯录,能够实现储存联系人、添加联系人、删除联系人等功能。
输入的通讯录联系人包编号、姓名、性别、电话、地址等信息。
三.概要设计程序流程图四.调试情况,设计技巧及体会1.改进方案1、菜单界面可以更加优化的美观些。
2、联系人的查询太繁琐,需要改进算法。
2.体会回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
五.参考文献1、《数据结构》杨剑主编清华大学出版社2、《数据结构(C语言版)》.严蔚敏_吴伟民.主编清华大学出版社3、网上相关资料六、附录:源代码#include<iostream.h>#include"stdio.h"#include "stdlib.h"#include <string>#define maxsize 10000#define overload 0#define ok 1#define error 2typedef int Status;typedef struct{char num[10];char name[5];char sex[5];char tel[15];char adj[30];}data;typedef struct{int length;data *elem;}Sqlist;Status InitList(Sqlist &L){L.elem=new data[maxsize];if(!L.elem)exit(overload);L.length=0;return ok;}Status Add(){Sqlist L;data e;int i;i=1;char chose;cout<<"请输入姓名:"<<endl;cin>>;cout<<endl;cout<<"请输入学号:"<<endl;cin>>e.num;cout<<endl;cout<<"请输入性别:"<<endl;cin>>e.sex;cout<<endl;cout<<"请输入地址:"<<endl;cin>>e.adj;cout<<endl;cout<<"请输入电话:"<<endl;cin>>e.tel;L.elem[i-1] = e;cout<<endl;cout<<"是否继续更新通讯录信息,是请输入Y,否请输入N"<<endl;cin>>chose;if(chose=='Y'){Add();}return ok;}Status ListDelete(){Sqlist L;int i;cin>>i;if((i<1)||(L.length)) return error;for(int j=i;j<=L.length;j++){L.elem[j-1]=L.elem[j];--L.length;}return ok;}Status LocationElem(Sqlist &L, char e) {cin>>e;for(int i=0;i<=L.length;i++){if(L.elem[i].adj==e)return i+1;elsereturn 0;if(L.elem[i].name==e)return i+1;elsereturn 0;if(L.elem[i].num==e)return i+1;elsereturn 0;if(L.elem[i].sex==e)return i+1;elsereturn 0;if(L.elem[i].tel==e)return i+1;elsereturn 0;if((L.elem[i].adj==e)return i+1;elsereturn 0;}}Status TraverseList(){Sqlist L;for(int i=0;i<=L.length;i++)cout<<L.elem[i].name<<endl;cout<<L.elem[i].sex<<endl;cout<<L.elem[i].num<<endl;cout<<L.elem[i].tel<<endl;cout<<L.elem[i].adj<<endl;return ok;}void Cover(){cout<<" 通讯录管理系统"<<endl;cout<<" 1、新建通讯录信息"<<endl;cout<<" 2、删除通讯录信息"<<endl;cout<<" 3、查询通讯录信息"<<endl;cout<<" 4、输出通讯录信息"<<endl;cout<<" 请选择菜单号1--4 。
《数据结构实验》的实验题目及实验报告模板实验一客房管理(链表实验)●实现功能:采用结构化程序设计思想,编程实现客房管理程序的各个功能函数,从而熟练掌握单链表的创建、输出、查找、修改、插入、删除、排序和复杂综合应用等操作的算法实现。
以带表头结点的单链表为存储结构,实现如下客房管理的设计要求。
●实验机时:8●设计要求:#include<stdio.h>#include<stdlib.h>#include<string.h>//定义客房链表结点结构typedef struct HNode{char roomN[7]; //客房名称float Price; //标准价格float PriceL; //入住价格(默认值=标准价格*80%)int Beds; //床位数Bedschar State[5]; //入住状态(值域:"空闲"、"入住"、"预订",默认值为"空闲")struct HNode *next; //指针域}Hotel, *HLink;(1)实现创建客房信息链表函数void Build(HLink &H),输入(客房名称、标准价格、床位数),同时修改入住价格、入住状态为默认值,即入住价格=标准价格*80%,入住状态为”空闲”(提示:用strcpy()字符串拷贝函数)。
为了提高程序调试效率,要求:用文件操作来输入客房信息(客房名称、标准价格、床位数);(2)实现输出客房信息函数void Exp(HLink H),输出所有客房的客房名称、标准价格、入住价格、床位数、入住状态;(3)函数int Find(HLink &H, char *roomN),查找房间名称为roomN的客房。
如果找到,则返回该客房在链表中的位置序号(>=1),否则返回0。
提示:用strcmp()字符串比较函数;(4)实现函数void updateH(HLink &H, int beds, char *state),将床位数为beds的客房入住状态改为state。
课程设计说明书课程名称:数据结构与算法专业:软件工程班级: 15-2 : xx 学号:2xxxxxx2指导教师: xx完成日期: 2017 年 1 月 3 日任务书目录1.引言 (3)2.课题分析 (4)3.具体设计过程 (5)3.1设计思路 (5)3.2程序设计流程图 (5)3.3.函数实现说明 (6)4.程序运行结果 (8)5.软件使用说明 (12)6.结论 (13)参考文献 (13)1.引言课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。
通常,课程设计中的问题比平时的习题复杂的多,也更接近实际。
课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学容的目的。
平时的习题较偏重于如何编写功能单一的“小”算法,局限于一个或两个知识点,而课程设计题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规的训练和科学作风的培养。
此外,还有很重要的一点是:计算机是比任何教师更严厉的检查者。
为达到上述目的,使学生更好地掌握程序设计的基本方法和C++语言的应用,本课程安排了课程设计环节,提供了各类题目供学生选择。
每个设计题采取了统一的格式,由问题描述、基本要求、测试数据、实现提示和选做容等五个部分组成。
问题描述旨在为学生建立问题提出的背景,指明问题“是什么”。
基本要求则对问题进一步求精,划出问题的边界,指出具体的参量或前提条件,并规定该题的最低限度要求。
测试数据部分旨在为检查学生上机作业提供方便。
在实现提示部分,对实现中的难点及其解法思路等问题作了简要提示,提示的实现方法未必是最好的,学生不应拘泥与此,而应努力设计和开发更好的方法和结构。
选做部分向那些尚有余力的读者提出了更高的要求,同时也能开拓其它读者的思路,在完成基本要求时就力求避免就事论事的不良思想方法,尽可能寻求具有普遍意义的解法,使得程序结构合理,容易修改、扩充和重用。
《数据结构》课程设计报告组员姓名(学号):组号:提交日期 2017-12-27成绩指导教师问题解析(对问题的分析、解题思路与解题方法):【类的设计】:构建一个学生信息双向链表类StudentList,和链表的节点类Student。
该双向链表类包含如下数据成员:学生数量计数器,链表头/尾指针,四个数组(分别存放当前链表中的各科最高分,最低分,平均分,总分)。
并且成员函数中添加了对每个成员的get/set,使得数据成员得以良好的封装。
【实时有序】考虑到排序过程较费时间,因此我们在文件读写,数据录入,信息插入等操作(即信息增添)时进行有序地插入,实时保证链表是按照学号递增排序的。
【信息统计】考虑到在对整个链表进行成绩的相关信息统计(求各科总分,平均分,)时间开销较大,解决办法是在链表类中添加四个数组数据成员。
【查询信息】考虑到使用链表构建二叉查找树过程比较繁琐,因此先构建一个和链表中信息1-1对应的结构体数组,以方便二叉查找树的构建。
【模糊查询】通过对二叉查找树的遍历进行模糊查找,字串匹配过程采用了KMP 算法。
【单科排序】考虑到排序的稳定性问题对学生成绩排名而言比速度更重要,因此巧妙利用二叉查找树的中根遍历有序性,通过对二叉查找树的中根遍历进行排序。
任务分工及进度安排:【任务分工】商健文(53160817):三个类的架构设计,学生信息的交互式录入(同时按学号排序),信息表的学生插入,修改,删除函数,文件逆序写回函数编写姚金喆(53160812):学生信息的精确查询,模糊查询,单科成绩排序张炎(53160809):界面菜单设计,函数内部用户体验与UI优化,指定路径文件读入函数,文件顺序写回函数,学生信息浏览函数编写【进度安排】Day1. 问题分析,类的架构,组内各成员代码之间的接口分析与讨论Day2. 代码编写Day3. 代码汇总,整合测试,完成实验报告撰写数据结构选择、算法设计:【数据结构选择】双向链表,二叉(查找)树,栈,队列,文件,类数组等【算法设计】:【实时有序】采用实时有序的插入方式,按学号递增排序操作耗费的时间就完全节省下来,只需要对链表进行一次遍历输出结果即可,所需的复杂度仅为O(n),还要优于快速排序的O(n*logn)。
数据结构课程设计参考题目(一)数据结构是计算机科学中的一门基础课程,它主要研究数据的组织、存储、管理和操作等方面的问题。
随着计算机技术的发展,数据结构逐渐成为各个领域必不可少的一门课程。
而数据结构课程设计参考题目是该课程的一项重要内容,它能够帮助学生更好地掌握课程知识,提高对数据结构的理解和应用能力。
以下是几个数据结构课程设计参考题目。
1.链表操作设计一个链表类,使得它能够实现插入、删除、查找和遍历链表的操作。
要求采用单向链表或双向链表实现,并考虑链表的循环操作。
同时,要求能够对链表进行排序操作。
2.栈与队列操作设计一个栈和队列类,使得它们能够实现入栈、出栈、入队和出队的操作。
要求采用数组或链表实现,并可用于表达式转换和括号匹配等相关问题。
3.堆排序算法实现堆排序算法,要求能够对整型数列进行排序,并输出其排序后的结果。
要求堆的构建、删除和调整操作均可用最大堆或最小堆实现。
同时,要求能够对算法的时间复杂度进行分析,并与快速排序等算法进行比较。
4.哈希表实现设计一个哈希表类,使其能够实现插入、删除和查找等操作。
要求采用链地址法或开放地址法实现,同时需要考虑哈希函数和扩容等问题。
要求能够对哈希冲突的解决方法进行比较和分析。
5.树与图的遍历实现二叉树、B树或B+树的遍历操作,要求能够实现先序、中序和后序遍历,并能够循环遍历或递归遍历。
同时,要求能够对树的平衡性进行探究和讨论。
另外,树的遍历也是图的遍历的基础,可以通过深度优先搜索或广度优先搜索实现图的遍历。
以上是一些常见的数据结构课程设计参考题目,它们可以锻炼学生的编程能力、算法分析能力和数据处理能力,同时也可以增强学生对数据结构知识的理解和掌握。
1.运动会分数统计【问题描述】参加运动会的n个学校编号为1〜n。
比赛分成m个男子项目和w个女子项目,项目编号分别为1〜m和m+1〜m+wo由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
写一个统计程序产生各种成绩单和得分报表。
【基本要求】1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5) 数据存入文件并能随时查询6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整型。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
测试数据:【测试数据】要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
例如,对于n=4,m=3,w =2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。
【实现提示】可以假设n w 20, m w 30, w< 20,姓名长度不超过20个字符。
每个项目结束时,将其编号、类型符(区分取前五名还是前三名) 输入,并按名次顺序输入运动员姓名、校名(和成绩)。
【选作内容】允许用户指定某项目采取其他名次取法2. 集合的并、交和差运算问题描述】编制一个能演示执行集合的并、交和差运算的程序。
基本要求】(1) 集合的元素限定为小写字母字符[ ‘a'.. 'z' ]。
(2) 演示程序以用户和计算机的对话方式执行。
测试数据】(1) Set1="magazine", Set2="paper",Setl u Set2="aegimnprz", Setl n Set2="ae", Set1-Set2="gimnz"。
(2) Set1= " 012oper4a6tion89", Set2="error data",Set1 u Set2="adeinoprt", Setl n Set2="aeort", Set1-Set2="inp"。
实现提示】以有序链表表示集合。
【选作内容】(1) 集合的元素判定和子集判定运算。
(2) 求集合的补集。
(3) 集合的混合运算表达式求值。
(4) 集合的元素类型推广到其他类型 , 甚至任意类型。
3. 一元稀疏多项式计算器【问题描述】设计一个一元稀疏多项式简单计算器【基本要求】元稀疏多项式简单计算器的基本功能是:(1) 输入并建立多项式;(2) 输出多项式,输出形式为整数序列:n, c i, e , C2, e2,…,c n, e n,其中n是多项式的项数,c i和e,分别是第i项的系数和指数,序列按指数降序排列;(3) 多项式a和b相加,建立多项式a +b;(4) 多项式a和b相减,建立多项式a -b 。
【测试数据】(1) (2x+5x8-3.1x11) + (7-5x8+11x9)=(-3.lx11+11x9+2x+7)(2) (6x-3-x+4.4x2-1.2x9) -(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+12x-3-x)(3) (1 +x + x2+x3+x4+x5)+(-x3-x4)=(1+x+x2+x5)(4) (x+x3)+(-x-x3)=0(5) (x+x100)+(x100 +x200)=(x+2x100+x200)(6) (x+x2+x3)+0=x+x 2+x3(7) 互换上述测试数据中的前后两个多项式【实现提示】用带表头结点的单链表存储多项式。
【选作内容】(1) 计算多项式在x处的值。
(2) 求多项式a 的导函数a 。
(3) 多项式a和b相乘,建立乘积多项式ab 。
(4) 多项式的输出形式为类数学表达式。
例如,多项式-3x8+6x3-18 的输出形式为3x 8 6x 3 18,x15+(-8)x7—14的输出形式为x 15 8x 7 14。
注意,数值为1的非零次项的输出形式中略去系数1,如项1x8的输出形式为x8,项一1x3 的输出形式为—x3。
(5) 计算器的仿真界。
4. 池塘夜降彩色雨【问题描述】设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。
【基本要求】(1) 雨点的空中出现位置、降范过程的可见程度、入水位置、颜色、最大水圈等,都是随机确定的;(2) 多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。
【测试数据】适当调整控制雨点密度、最大水圈和状态变化的时间间隔等参数。
【实现提示】(1) 每个雨点的存在周期可分为三个阶段:从天而降、入水有声和圈圈微澜,曲: *需要一个记录存储其相关参数、当前状态和下一状态的更新时刻。
(2) 在图形状态编程。
雨点下降的可见程度应是断断续续、依稀可见;圈圈水波应是由里至外逐渐扩大和消失。
(3) 每个雨点发生时,生成其记录,并预置下一个雨点的发生时间。
(4) 用一个适当的结构管理当前存在的雨点,使系统能利用它按时更新每个雨点的状态,一旦有雨点的水圈全部消失,就从结构中删去。
【选作内容】(1) 增加“电闪雷鸣”景象。
(2) 增加风的效果,展现“风雨飘摇”的情景。
(3) 增加雨点密度的变化:时而“和风细雨”,时而“暴风骤雨”。
(4) 将“池塘”改为“荷塘”,雨点滴在荷叶上的效果是溅起四散的水珠,响声也不同。
5. 银行业务模拟【问题描述】客户业务分为两种。
第一种是申请从银行得到一笔资金,即取款或借款。
第二种是向银行投入一笔资金,即存款或还款。
银行有两个服务窗口,相应地有两个队列。
客户到达银行后先排第一个队。
处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。
每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。
注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。
任何时刻都只开一个窗口。
假设检查不需要时间。
营业时间结束时所有客户立即离开银行。
写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
【基本要求】利用动态存储结构实现模拟。
【测试数据】一天营业开始时银行拥有的款额为10000(元),营业时间为600(分钟)。
其他模拟参量自定,注意测定两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户的交易时间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户的交易时间很短。
【实现提示】事件有两类:到达银行和离开银行。
初始时银行现存资金总额为total。
开始营业后的第一今事件是客户到达,营业时间从0到closetime。
到达事件发生时随机地设置此客户的交易时间和距下一到达事件之间的时间间隔。
每个客户要办理的款额也是随机确定的,用负值和正值分别表示第一类和第二类业务。
变量total,closetime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。
两个队列和一个事件表均要用动态存储结构实现。
注意弄清应该在什么条件下设置离开事件,以及第二个队列用怎样的存储结构实现时可以获得较高的效率。
注意:事件表是按时间顺序有序的。
【选作内容】自己实现动态数据类型。
例如对于客户结点,定义pool 为CustNodepoolfMAX] ;// 结构类型CustNode 含四个域:aITHIne,durtime,amount,next 或者定义四个同样长的,以上述域名为名字的数组。
初始时,将所有分量的next 域链接起来,形成一个静态链找,设置一个楼顶元素下标指示量top,top=0 表示找空。
动态存储分配函数可以取名为myMalloc ,其作用是出钱,将钱顶元素的下标返回。
若返回的值为0,则表示无空间可分配。
归还函数可取名为myFree,其作用是把该分量入钱。
用FOR-TRAN 和BASIC 等语言实现时只能如此地自行组织。
6. 马踏棋盘【问题描述】设计一个国际象棋的马踏遍棋盘的演示程序。
【基本要求】将马随机放在国际象棋的8$棋盘Board[8][8]的某个方格中,马按走棋规则进行移动。
要求每个方格只进入一次,走遍棋盘上全部64 个方格。
编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1, 2,…,64依次填入一个8>8的方阵,输出之。
7. 魔王语言解释【问题描述】有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人能昕得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的:⑴ 1 2 m(2) ( 1 2 n) n n 1 1在这两种形式中,从左到右均表示解释。
试写一个魔王语言的解释系统,把他的话解释成人能听得懂的话。
【基本要求】用下述两条具体规则和上述规则形式(2)实现。
设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示可以用大写字母或小写字母代换的变量。
魔王语言可含人的词汇。
(1) B tAdA(2) A sae【测试数据】B(ehnxgz)B 解释成tsaedsaeezegexenehetsaedsae若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是“天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅”。
【实现提示】将魔王的语言自右至左进栈,总是处理栈顶字符。
若是开括号,则逐一出栈, 将字母顺序入队列,直至闭括号出栈,并按规则要求逐一出队列再处理后入栈。
其他情形较简单,请读者思考应如何处理。
应首先实现栈和队列的基本操作。
【选作内容】(1) 由于问题的特殊性,可以实现栈和队列的顺序存储空间共享。
(2) 代换变量的数目不限,则在程序开始运行时首先读入一组第一种形式的规则,而不是把规则固定在程序中(第二种形式的规则只能固定在程序中)。
⑴ 1 2 m8. 航空客运订票系统【问题描述】航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。