数据结构课程设计(附代码)-数据结构设计说明
数据结构的课程设计
数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。
2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。
3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。
技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。
2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。
3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。
2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。
3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。
在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。
2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。
3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。
4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。
5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。
6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。
7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。
数据结构课设报告规范 数据结构课设 Python课程设计 源代码 实验报告 源码 世界杯查询系统
Ssize=0;
}
~lnkStack(){
clear();
}
void clear(){
while(top!=NULL){
Link<T> *tmp=top;
top=top->next;
delete tmp;
}
Ssize=0;
}
bool SisEmpty(){
if(Ssize==0)
return true;
世界杯查询系统
一.【需求分析】
1.输入
1.1.1输入来自3个文本文件.
1.1.2c.txt用于输出比赛的详细信息,如两队的队名,比分,进球球员姓名,进球时间等。
1.1.3file.txt用于输出对阵时间表。
1.1.4射手榜存档.txt用于存放进球球员的信息(姓名,国籍,进球数初始均设为1)。
2.输出
{
// TODO: Add your control notification handler code here
int point1;//比赛国家1比分
int point2;//比赛国家2比分
lnkList<xinxi> jinqiu;//比赛详细比分存入队列名为jinjiu,类定义为xinxi的队列中
};
2.1.2信息类
class xinxi{
public:
string time;
string country;
按下“某场比赛”则会在下方编辑框显示该场比赛的详细信息。
按下“射手榜”则会在下方编辑框显示该届世界杯结束后的射手榜。
按下“退出系统”则会清空编辑框以便下次输入。
二【数据结构设计】
数据结构课程设计报告含代码完整版
数据结构课程设计报告含代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g即结构体对象在main()中被创建在其他子函数中进行参数传递。
2. 全局变量visited数组中用。
3. 全局变量shorest[][],path[][]在floyd()中被赋值来分别记录v[i]-v[j]最短路径和 v[i]-v[j]所经过景点。
3.重点设计及编码两景点最短距离弗洛伊德算法void floyd(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}五.测试数据及运行结果1.正常测试数据和运行结果要求提供3组正常测试数据和运行结果2(遍历功能)1(起始景点序号)1 校门呈长方形,校训:爱国、求实、奋进2 喷泉呈鸽子形状,喷射出水花3 教学楼传授知识和学习知识4 实验楼供学生进行课程实验和教师办公5 洗浴中心供学生洗澡,内设单人间和双人间6 美食广场仅一层,快餐味道不错7 图书馆共七层,存储大量书籍供学生查阅和学习8 旭日苑共三层,主要的就餐场所9 体育馆内设篮球场,羽毛球场和观看席10 宿舍休息的场所5(查询景点信息)2(景点序号)2 喷泉呈鸽子形状,喷射出水花6(查询两景点最短路径)1 9(两景点序号)1->2->7->91->9 最短距离:570米2.异常测试数据及运行结果要求提供2组异常测试数据和运行结果9无此功能模块请重新输入5(功能模块)11(景点序号)无此景点请重新输入六.调试情况,设计技巧及体会1.改进方案1. 可将景点文件,边文件及账户密码合并为一个文件。
数据结构课程设计报告模板(内附C代码)
数据结构课程设计报告学院专业:软件工程班级:学号:学生姓名:指导老师:彭伟民日期: 2016.01.01目录1猴子吃桃子问题 (3)1.1 需求分析 (3)1.2 程序设计思想 (3)1.3 程序源代码 (3)1.4 程序运行结果 (5)2进制数转化问题 (5)2.1 需求分析 (5)2.2 程序设计思想 (6)2.3 程序源代码 (6)2.4 程序运行结果 (7)3长整数运算 (8)3.1 需求分析 (8)3.2 程序设计思想 (8)3.3 程序源代码 (8)3.4 程序运行结果 (12)4学生成绩管理系统 (13)4.1 需求分析 (13)4.2 程序设计思想 (13)4.3 程序源代码 (14)4.4 程序运行结果 (20)5哈夫曼编码应用 (22)5.1 需求分析 (22)5.2 程序设计思想 (22)5.3 程序源代码 (23)5.4 程序运行结果 (24)6学校超市选址问题 (26)6.1 需求分析 (26)6.2 程序设计思想 (26)6.3 程序源代码 (26)6.4 程序运行结果 (30)7学生成绩管理系统 (30)7.1 需求分析 (30)7.2 程序设计思想 (30)7.3 程序源代码 (30)7.4 程序运行结果 (36)8排序综合 (37)8.1 需求分析 (37)8.2 程序设计思想 (38)8.3 程序源代码 (38)8.4 程序运行结果 (46)9课程设计总结 (47)1猴子吃桃子问题1.1需求分析有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
1.2程序设计思想已知第十天只余下1个桃子,第一天开始每天都吃当前桃子一半再多一个,那么就只需要从第十天开始倒推即可,用链表、数组、递推、常规方法都可以采用这种思路实现计算第一天桃子数量。
1.3程序源代码#include<iostream>using namespace std;//有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
数据结构课程设计(5篇)
数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。
三、具体要求1)利用完全二叉树的性质建立一棵二叉树。
(层数不小于4层)2)统计树叶子结点的个数。
3)求二叉树的深度。
4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。
四、进度安排依照教学计划,课程设计时间为:2周。
本设计要求按照软件工程的基本过程完成设计。
建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35: 45: 20。
五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。
其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。
4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
5、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
数据结构课程设计(附代码)-数据结构设计说明
应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
数据结构课程设计代码
数据结构课程设计代码根据提供的输入输出需求,下面是一个示例的数据结构课程设计代码。
```pythonclass Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef add(self, data):new_node = Node(data)if self.head is None:self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef remove(self, data):current = self.headprev = Nonewhile current is not None:if current.data == data:if prev is None:self.head = current.next else:prev.next = current.next returnprev = currentcurrent = current.nextdef display(self):current = self.headwhile current is not None:print(current.data, end=" ")current = current.nextprint()if __name__ == "__main__":linked_list = LinkedList()while True:print("1. Add element")print("2. Remove element")print("3. Display elements")print("4. Quit")choice = input("Enter your choice: ")if choice == "1":data = input("Enter element to add: ")linked_list.add(data)elif choice == "2":data = input("Enter element to remove: ")linked_list.remove(data)elif choice == "3":linked_list.display()elif choice == "4":breakelse:print("Invalid choice")```这个代码示例实现了一个简单的链表数据结构,在命令行中提供了添加元素、删除元素和显示元素的选项。
数据结构课程设计源代码(完整版)
算法与数据结构课程设计报告设计题目:专业班级学生学号指导教师2014年第1学期第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。
要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
2、要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。
(2)作为模拟系统,全部数据可以只存放在内存中。
(3)通过此系统可以实现如下功能:①录入功能:可以录入航班情况②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。
也可以根据航班号,查询飞机某个航线的情况。
③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。
如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。
④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。
第二部分:系统设计图样一:设计说明1:添加航班:整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。
航班信息通过lulu()函数进行添加。
添加的信息保存在航班flight结构体数组中。
2:查询航班:查询板块分为两个部分,按姓名查找和按站名查找。
按姓名查找:通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。
按站名查找:通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。
3:订票功能:根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。
数据结构课程设计
数据结构课程设计1. 引言数据结构是计算机科学中非常重要的一门课程,它研究将数据组织和存储在计算机中的方法。
为了更好地掌握数据结构的理论知识和实践能力,本课程设计将帮助学生深入了解和应用各种常见的数据结构。
2. 课程设计目标本课程设计的主要目标是帮助学生掌握以下内容:- 理解不同数据结构的特点和适用场景;- 掌握常见数据结构的实现原理和相关算法;- 能够灵活运用数据结构解决实际问题;- 培养学生的编程能力和问题解决能力。
3. 课程设计内容3.1 线性数据结构线性数据结构是数据元素之间存在一对一关系的数据结构,包括数组、链表、队列和栈等。
学生需要通过实例讲解和编程实践来理解它们的概念和实现方法,例如使用数组实现队列和栈等。
3.2 树形数据结构树形数据结构是一种重要的非线性数据结构,包括二叉树、二叉搜索树、堆和哈希表等。
学生需要学习树的基本概念、遍历算法和相关实现方式,如平衡二叉树的调整和哈希函数的设计等。
3.3 图形数据结构图形数据结构是由节点和边组成的复杂数据结构,包括有向图和无向图等。
学生需要了解图的基本概念、图的遍历算法和最短路径算法等。
通过编程实践,学生可以实现常见的图算法,如深度优先搜索和广度优先搜索等。
4. 课程设计实践4.1 编程作业学生将通过完成一系列编程作业来应用所学的数据结构知识。
每个作业都与实际问题密切相关,例如实现一个通讯录管理系统,利用二叉搜索树实现一个字典等。
通过这些作业,学生将深入理解数据结构的应用和实现。
4.2 小组项目学生将分组进行一个小组项目,用于解决一个与数据结构相关的实际问题。
例如,通过利用图算法实现地图导航系统,或者使用哈希表进行文本搜索和替换等。
这些项目将要求学生合作解决问题,提高他们的团队合作能力和创新能力。
5. 课程设计评估为了评估学生对数据结构的掌握程度,将进行以下评估方式:- 编程作业的完成情况和代码质量;- 小组项目的展示和实际应用效果;- 期末考试,包括理论知识和问题解决能力的考察。
数据结构课程设计报告(附源代码)-学生管理系统
课程设计报告(一)一.报告题目:学生管理系统二.实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。
3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。
三.实验环境:C语言编程,VC++6.0编程工具实现。
四.软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数6:文件装入功能实现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五.软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。
本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud{ long num;char name[NAMELEN+1];char sex;int age;char Addr[ADDRLEN+1];long rxsj;char lxfs[TELLEN+1];};typedef stud ElemType;//链表结点元素为结构体FILE *fp;typedef struct LNode{ElemType data;LNode *next;} *LinkList;//typedef LNode *;int InitList(LinkList &L){ //操作结果:构造一个空的线性表LL=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点if(!L)//存储分配失败exit(OVERFLOW);L->next=NULL;// 指针域为空return OK;}int ListTraverse(LinkList L,void(*vi)(ElemType)){//条件:线性表已存在//操作结果:一次对L的每个数据元素调用函数vi()。
代码数据结构课程设计
代码数据结构课程设计一、课程目标知识目标:1. 理解并掌握代码数据结构的基本概念,包括数组、链表、栈和队列等;2. 学会分析不同数据结构的优缺点及适用场景;3. 掌握常用的数据结构算法,并能运用到实际编程中。
技能目标:1. 能够运用所学知识设计和实现简单的代码数据结构;2. 培养良好的编程习惯,提高代码的可读性和可维护性;3. 学会使用调试工具,能够自主排查和解决编程中遇到的问题。
情感态度价值观目标:1. 培养学生对代码数据结构的兴趣,激发学习编程的热情;2. 培养学生的团队合作意识,提高沟通与协作能力;3. 培养学生勇于尝试、克服困难的精神,树立自信心。
课程性质:本课程为信息技术学科,旨在让学生掌握代码数据结构的基本知识和技能,培养学生编程兴趣和实际编程能力。
学生特点:本课程面向初中年级学生,学生对编程有一定的基础,对新鲜事物充满好奇心,但缺乏实际编程经验。
教学要求:结合学生特点,注重理论与实践相结合,通过案例分析和实际操作,帮助学生掌握代码数据结构的知识和技能。
在教学过程中,关注学生的个体差异,提供有针对性的指导,确保课程目标的达成。
将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用及分类,结合教材第一章内容,让学生理解数据结构在编程中的重要性。
- 数组:讲解数组的定义、存储方式及应用场景,分析数组的优缺点;- 链表:介绍链表的概念、存储方式、分类及操作方法,对比数组与链表的差异。
2. 常用数据结构:讲解栈、队列、树等常用数据结构,结合教材第二章内容,使学生掌握各类数据结构的特点及使用方法。
- 栈:介绍栈的概念、操作原则及应用场景,学会使用栈解决实际问题;- 队列:讲解队列的定义、操作方法及适用场景,分析队列在编程中的应用;- 树:介绍树的基本概念、存储方式、遍历方法等,了解树在解决实际问题中的应用。
3. 数据结构算法:结合教材第三章内容,讲解排序、查找等基本算法,使学生掌握算法思想并能运用到实际编程中。
数据结构课程设计
数据结构课程设计根据数据结构课程的设计,以下是一个示例的课程设计:一、课程目标:掌握数据结构的基本概念和常用算法,培养学生的编程思维和解决问题的能力。
二、课程大纲:1. 引入数据结构:介绍数据结构的概念、分类和基本操作。
2. 线性表:介绍线性表的定义、顺序表和链表的实现及其相关操作。
3. 栈和队列:介绍栈和队列的定义、顺序栈和链式栈、顺序队列和链式队列的实现及其相关操作。
4. 串:介绍串的定义和常用操作,如模式匹配。
5. 树:介绍树的定义及其相关概念,包括二叉树、树的存储结构和遍历算法。
6. 图:介绍图的定义、存储结构和基本操作,包括深度优先搜索和广度优先搜索算法。
7. 排序算法:介绍常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
8. 查找算法:介绍常见的查找算法,包括顺序查找、二分查找、哈希查找等。
9. 动态规划:介绍动态规划的基本原理和应用。
三、教学方法:1. 讲授理论知识:通过课堂讲解和示例代码演示,引导学生理解数据结构的概念和基本操作。
2. 编程实践:通过编写程序,实现数据结构的各种操作和算法,培养学生的编程能力和解决问题的能力。
3. 实验练习:设计和实现相关的实验案例,让学生进行实验和实践,加深对数据结构的理解和应用能力。
4. 课堂讨论:鼓励学生提问和讨论,促进思维的交流和碰撞。
四、课程评估:1. 平时成绩:包括作业、实验、课堂参与等,占总评成绩的70%。
2. 期末考试:考察学生对数据结构的理解和应用能力,占总评成绩的30%。
五、教材和参考书目:主教材:《数据结构(C语言版)》, 作者:严蔚敏,吴伟民参考书目:1. 《数据结构与算法分析--C语言描述》, 作者:Mark Allen Weiss2. 《算法导论》, 作者:Thomas H. Cormen 等3. 《大话数据结构》, 作者:程杰。
大二数据结构课程设计代码
大二数据结构课程设计代码一、课程目标知识目标:1. 学生能够掌握数据结构的基本概念和原理,包括线性表、树、图等结构的特点和应用场景。
2. 学生能够理解和运用常用的算法,如排序算法、查找算法、遍历算法等,并能够分析其时间复杂度和空间复杂度。
3. 学生能够掌握代码编写规范和调试技巧,编写出结构清晰、可读性强、效率高的数据结构实现代码。
技能目标:1. 学生能够运用所学的数据结构知识,设计并实现小型数据结构项目,解决实际问题。
2. 学生能够运用编程语言(如C/C++/Java等)进行数据结构相关算法的实现和优化,具备一定的代码调试能力。
3. 学生能够通过团队协作和交流,合理分工,共同完成课程设计任务,提高项目管理和团队协作能力。
情感态度价值观目标:1. 学生培养对数据结构学科的兴趣和热情,认识到数据结构在计算机科学中的重要性。
2. 学生在学习过程中,树立良好的编程习惯,注重代码质量,培养认真、严谨的学习态度。
3. 学生能够通过课程设计,体验解决实际问题的成就感,增强自信心,激发进一步探索数据结构领域的欲望。
本课程目标旨在帮助学生系统地掌握数据结构知识,培养实际编程能力,同时注重培养团队协作和情感态度价值观,使学生在理论知识与实践操作中找到平衡,为后续相关课程和实际工作打下坚实基础。
二、教学内容本课程教学内容紧密围绕课程目标,选取以下重点内容进行组织:1. 数据结构基本概念:包括线性表、栈、队列、树、图等结构的基本定义、性质和操作。
2. 常用算法分析:讲解排序算法(冒泡排序、快速排序等)、查找算法(二分查找、哈希查找等)以及遍历算法(深度优先搜索、广度优先搜索等)。
3. 代码编写与调试:介绍编程规范、调试技巧以及性能优化。
4. 数据结构应用实例:分析实际案例,如链表实现、二叉树遍历、图的最短路径等。
教学内容安排如下:第一周:数据结构基本概念及线性表的应用。
第二周:栈、队列和串的基本操作及实现。
第三周:树和二叉树的概念、遍历算法及应用。
《数据结构》课程设计--说明文件
3108006364 佘湘铎 006364
3108006365 王一锴 006365
3108006366 王运辉 006366
3108006367 辛锦林 006367
3108006368 曾德文 006368
3108006369 张建行 006369
3108006370 张志军 006370
3108006371 郑铿烁 006371
3108006372 钟贞龙 006372
3108006373 朱建立 006373
3108006374 邓颖君 006374
3108006375 何绮珊 006375
3108006376 黄宝仪 006376
一、本课程设计的程序在当前目录,文件名为:“★学生成绩管理系统☆.exe”。无需安装,双击即可使用
三、程序中的菜单选择均使用半角数字。退出均用数字“0”。学生姓名为中文,输入时需使用中文输入法。
二、进入本程序需要登陆账号和密码。账号为10位数字,数码为6位字符。学生的账号为本班各学生的学号,密码默认情况下为学号的后6位数字。教师的账号为“3108000001~3108000005”五个账号,密码均为“123456”。具体账号和密码请见下表:
教师:
账 号 姓 名 密 码
3108000001 丁天翔 123456
3108000002 张 三 123456
3108000003 李 四 123456
3108000004 王 五 123456
3108000005 赵 六 123456
学生:
3108006348 陈国峰 006348
数据结构课程设计任务书结构设计说明
《数据结构》课程设计任务书结构设计一、设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、设计要求1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。
3、本次课程设计按照教学要求需要在2周时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。
4、编程语言任选。
三、设计选题选题说明:本次任务共提供若干个不同难易程度的题目,其中前面5个为必做题,满分100分(系统功能完善、人机交互界面简单、直观、便捷,否则逐项减分);后面为选做题,题目难度层度不等,完成部分选做题目者可以适当给予加分;同学们在选题时,要结合个人实际情况,确保及格,力争多做。
1、单位员工通讯录管理系统(线性表的应用)[问题描述]为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。
其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]可以采用单链表的存储结构,如可定义如下的存储结构:typedef struct { /*员工通讯信息的结构类型定义*/ char num[5]; /*员工编号*/char name[10]; /*员工姓名*/char phone[15]; /*办公室电话号码*/ char call[15]; /*手机号码*/char mail[25]; /*邮箱*/}DataType;/*通讯录单链表的结点类型*/typedef struct node{ DataType data; /*结点的数据域*/struct node *next; /*结点的指针域*/}ListNode,*LinkList;typedef struct { /*员工通讯信息的结构类型定义*/ char num[5]; /*员工编号*/char name[10]; /*员工姓名*/char phone[15]; /*办公室电话号码*/char call[15]; /*手机号码*/char mail[25]; /*邮箱*/}DataType;/*通讯录单链表的结点类型*/typedef struct node{ DataType data; /*结点的数据域*/struct node *next; /*结点的指针域*/}ListNode,*LinkList;#include"iostream"using namespace std;struct contaxt{char name[10];char sex[5];char Adrre[50];char Class[20];char Mobi[20];char qq[10];struct contaxt *next;};//声明函数typedef struct contaxt CONT;CONT *InsertCon(CONT *head);////插入联系人的基本信息CONT *AddContaxt(int n); ////初始化联系人的基本信息CONT *FindCon(CONT *head); ////查找联系人的基本信息CONT *AmendMessage(CONT *head);//修改联系人的基本信息CONT *DeleteMessage(CONT *head);//删除联系人的基本信息void showmessage(CONT *head); ////显示联系人的基本信息int menu(CONT *head); //主菜单CONT *saveFileCONT(CONT *head );//保存联系人的基本信息CONT *readFileCONT(CONT *head);//读取联系人的基本信息int choose;//系统入口void main(){CONT *head;head = NULL;menu(head);}//系统主菜单int menu(CONT *head){cout << "请选择操作菜单!!!" << endl ;do{cout << "---------------------------欢迎进入员工管理系统-------------------------------"<< "---------------------------------操作菜单---------------------------------------";cout <<"--------------------------------------------------------------------------------"<< "************************1 添加联系人信息************************" <<endl<< "************************2 插入联系人信息************************ " << endl<< "************************3 查找联系人信息************************ " <<endl<< "************************4 修改联系人信息************************" << endl<< "************************5 删除联系人信息************************" << endl<< "************************6 显示联系人信息************************" << endl<< "************************7 退出本系统************************" << endl<< "************************8 保存文件************************ " << endl<< "************************9 读取文件************************" << endl<<"--------------------------------------------------------------------------" << endl;cout << "请选择操作菜单!!!" << endl ;int choose;//choose = getchar();fflush(stdin);//return choose;************************cin >> choose;if(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7&&choose != 8){cout << "输入错误:"<<endl;}else{switch(choose){case 1:int n;do{fflush(stdin);cout << "请确定要添加几个联系人:";cin >> n;}while(n <= 0);head = AddContaxt(n);break;case 2:system("CLS");head = InsertCon(head);break;case 3:head = FindCon(head);break;case 6:system("CLS");showmessage(head);break;case 7:exit(0);break;case 4:system("CLS");AmendMessage(head);break;case 5:system("CLS");DeleteMessage(head);break;case 8:system("CLS");head = saveFileCONT(head );break;case 9:// head = readFileCONT(head);default:system("CLS");cout << "你输入错误,请重新选择!!!" << endl;break;}}}while(choose != 1&& choose != 2 && choose != 3 && choose !=4 && choose != 5 && choose !=6 && choose !=7);return choose;}//初始化联系人的基本信息CONT *AddContaxt(int n){CONT *p,*q,*head;int i;system("CLS");p = (CONT *)malloc(sizeof(CONT));cout << "开始添加联系人信息:"<< endl;cout << "输入姓名:";cin >> p->name;cout << "输入姓别:";cin >> p->sex ;cout << "输入班级:";cin >> p->Class ;cout << "输入住址:";cin >> p->Adrre ;cout << "输入手机号:";cin >> p->Mobi ;cout << "输入qq号:";cin >> p->qq ;head = p;for(i = 2;i <= n;i++){q = (CONT *)malloc(sizeof(CONT));p->next = q ;p = q;system("CLS");cout<< "总共需要输入"<< n << "个联系人的信息,"<<"现在你已输入" << i-1<< "个联系人信息."<< endl<< "请继续输入第"<<i << "个人的信息!!"<< endl;cout << "输入姓名:";cin >> p->name;cout << "输入姓别:";cin >> p->sex ;cout << "输入班级:";cin >> p->Class ;cout << "输入住址:";cin >> p->Adrre ;cout << "输入手机号:";cin >> p->Mobi ;cout << "输入qq号:";cin >> p->qq ;}p->next = NULL;return head;}//按照不同的要求插入联系人的基本信息CONT *InsertCon(CONT *head){CONT *pc,*p,*q;int choose ;char name[10];if(head ==NULL){cout << "还没有添加任何联系人,请先添加联系人!!"<< endl;return head;}pc = (CONT *)malloc(sizeof(CONT));cout << "请依次输入被插入人的信息:姓名 /性别/班级/住址/手机号/qq 号"<< endl;cin >> pc->name >> pc->sex >> pc->Class >> pc->Adrre >> pc->Mobi >> pc->qq ;pc ->next = NULL;cout << "请选择自己喜欢的插入方式: "<< endl<< "1 插入在自己喜欢的人之前"<< endl << "2 插入在最后" << endl << "3 插入在开头" << endl;do {cin >> choose;switch(choose){case 1:cout << "请输入自己喜欢的人的名字:";cin >> name ;if(strcmp(head->name ,name)==0){pc->next = head;head = pc;return head;}else{q = head;p = head->next ;while(strcmp(p->name,name)!=0 && p->next !=NULL){q = p;p = p->next ;}if(strcmp(p->name ,name)==0){pc->next = p ;q = pc;return head;}else{p->next = pc;return head;}}break;case 2://cout << "请输入自己喜欢的人的名字:";//cin >> name ;p = head;while(p->next != NULL)p = p->next ;p->next = pc;return head;break;case 3://cout << "请输入自己喜欢的人的名字:";//cin >> name ;pc->next = head;head = pc;return head;break;default :cout<<"error"<< endl;break;}}while(choose!=1 &&choose != 2 && choose != 3); }//查找联系人的基本信息CONT *FindCon(CONT *head){system("CLS");char na[20];CONT *p,*q;if(head == NULL){cout << "没有任何信息可查找,请先添加信息!!"<< endl;return head;}cout << "请您输入要查找人的姓名:"<< endl;cin >> na;p = head;while(p!= NULL){if(strcmp(p->name ,na)==0){q = p;cout << "找到联系人,信息如下!!"<< endl;cout << "姓名:" << q->name <<" 性别: " << q->sex << q->Class <<" 住址: " <<q->Adrre <<" 手机号: " <<q->Mobi <<" qq号: "<< q->qq << endl;break;}elsep = p->next ;}return head;}//修改联系人的基本信息CONT *AmendMessage(CONT *head){CONT *p;char nam[10];char sex[5];char Adrre[50];char Class[20];char Mobi[20];char qq[10];if(head == NULL){cout<< "没有任何信息,请返回添加信息!!!"<< endl;return head;}elsep = head;cout << "请你输入要修改人的名字:";cin >> nam;while(p != NULL && p->name != nam){if(strcmp(p->name ,nam)==0){strcpy(p->name ,nam);int choose;do{cout << "请选择要修改哪一项的信息!!!"<< endl;cout << "1 修改性别 2 修改班别 3 修改地址 4 修改手机号码 5 修改qq号 " << endl;cin >> choose;switch(choose){case 1:cout << "请输入要修改后的性别:";cin >> sex;strcpy(p->sex , sex);cout << "修改成功!!!"<< endl; system("CLS");return head;break;case 2:cout << "请输入修改后的班别:"; cin >> Class;strcpy(p->Class ,Class);system("CLS");cout << "修改成功!!!"<< endl; return head;break;case 3:cout << " 请输入修改后的地址:"; cin >> Adrre;strcpy(p->Adrre ,Adrre);system("CLS");cout << "修改成功!!!"<< endl;return head;break;case 4:cout << "请输入修改后的手机号码:"; cin >> Mobi;strcpy(p->Mobi ,Mobi);system("CLS");cout << "修改成功!!!"<< endl;return head;break;case 5:cout << "请输入修改后的qq号:"; cin >> qq;strcpy(p->qq ,qq);system("CLS");cout << "修改成功!!!"<< endl;return head;break;default:cout << "输入错误,重新选择!!" << endl;break;}}while(choose != 0);}else if(p->next != NULL && p->name != nam){p = p->next ;}else{cout << "输入名字错误,请重新选择4修改!!!" << endl;return head;}}//return head;}//删除联系人的基本信息CONT *DeleteMessage(CONT *head){CONT *p,*q,*t;char name[20];char elem[10];cout << "请输入要删除联系人的姓名:";cin >> name;if(head == NULL){cout << "没有任何信息可删除,请添加信息!!"<< endl;return head;}else if(strcmp(head->name,name)==0 ){t = head;head = head->next ;return head;}else{p = head->next ;q = head;}while(p !=NULL && p->name != name) {q = p;p = p->next ;}if(strcmp(p->name ,name)==0){q->next = p->next ;free(p);//t = p;}else{cout<< "表中无该元素!" << endl;return head;}if(t){// elem = t->name ;free(t);}return head;}//保存文件CONT *saveFileCONT(CONT *head ){char *fileName;FILE *fp;CONT *p;p = (CONT *)malloc(sizeof(CONT));if(p=NULL)cout <<"分配内存失败"<< endl;// exit(0);}if(head ==NULL){cout <<"没有任何信息,请先添加信息!!"<< endl;return head;}else{p = head;fileName = (char *)malloc(sizeof(char));cout << "请输入文件名:" << endl;cin >> fileName;fileName = strcat(fileName,".txt");if( (fp = fopen(fileName,"a")) == NULL)cout << "can't open file" << endl;{//fwrite(head,sizeof(CONT),1,fp);//fprintf(fp,p->name,p->sex,p->Class,p->Adrre,p->Mobi,p->qq );fprintf(fp," 姓名:");fprintf(fp, p->name );fprintf(fp," 性别:");fprintf(fp, p->sex);fprintf(fp," 班别:");fprintf(fp, p->Class);fprintf(fp," 地址:");fprintf(fp, p->Adrre);fprintf(fp," 手机号:");fprintf(fp, p->Mobi);fprintf(fp," qq号:");fprintf(fp, p->qq);fprintf(fp,"\n");cout << endl;cout <<"--------------------------------------------------------------------------------";cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"<< p->Mobi <<" qq号:" << p->qq << endl;cout <<"--------------------------------------------------------------------------------";p=p->next ;}while(p!=NULL);}fclose(fp);return head;}//读取文件内容CONT *readFileCONT(CONT *head){char *fileName;CONT *p;FILE *fp;fileName = (char *)malloc(sizeof(char));cout << "请输入要打开的文件名:";cin >> fileName;fileName = strcat(fileName,".txt");fp = fopen(fileName,"r");if(fp == NULL){cout << "文件没有任何信息,请先输入信息!!"<< endl; }else{while(!feof(fp)){p = (CONT *)malloc(sizeof(CONT));if(p == NULL){cout << "分配内存失败!!"<< endl;return head;}fscanf(fp,p->name );fscanf(fp,p->sex );fscanf(fp,p->Class );fscanf(fp,p->Adrre );fscanf(fp,p->Mobi );fscanf(fp,p->qq );cout <<"--------------------------------------------------------------------------------";cout << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"<< p->Mobi <<" qq号:" << p->qq << endl;cout <<"--------------------------------------------------------------------------------";p->next = head;head = p;p = p->next ;}fclose(fp);cout<< "读取信息成功!!!"<< endl;}fclose(fp);return head;}//显示信息void showmessage(CONT *head){CONT *p;int i=0;if(head == NULL ){cout << "没有任何信息可输出,请添加信息!!!"<< endl;}else{p = head;cout << "*******************************联系表如下***************************************";do{i++;cout <<"--------------------------------------------------------------------------------";cout << i << " "<<"姓名:" <<p->name <<" 性别:" <<p->sex << " 班别:" <<p->Class <<" 住址:" <<p->Adrre <<"手机号:"<< p->Mobi <<" qq号:" << p->qq << endl;cout <<"--------------------------------------------------------------------------------";p = p->next ;}while(p!=NULL);}cout << "*********************************联系表***************************************";cout << endl;}2、停车场管理(栈和队列的应用)[问题描述]设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
数据结构课程设计报告及源代码
printf("\t1.车辆到达--1 2.车辆离开--2 3.车辆信息--3 4.退出程序--4\n");
printf("\t**********************************************************\n");
4、要求栈以顺序结构实现,队列以链表实现
三、设计要求
1、独立完成全部代码的设计、编写、调试与部署,运行正确无误
2、编写设计报告书
设计报告书应包括:
(1)问题描述和系统要求
(2)系统主要功能模块设计
(3)设计中遇到的问题及其解决方法
(4)系统运行报告
(5)总结
问题描述:
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟该停车场的管理。
typedef struct node
{ int num;
int reachtime;
int leavetime;
数据结构 课程设计
数据结构课程设计一、介绍数据结构是计算机科学中重要的基础课程之一,它研究如何组织和管理数据,以便高效地访问和操作。
在这个课程设计中,我们将深入学习和应用各种数据结构的概念、原理和算法。
二、任务目标本次课程设计的目标是设计和实现一个高效的数据结构库。
我们将实现以下几个基本数据结构:1.数组:用于存储一组相同类型的元素,并支持随机访问。
2.链表:用于存储一组元素,并支持动态插入和删除操作。
3.栈:用于实现后进先出(LIFO)的数据结构。
4.队列:用于实现先进先出(FIFO)的数据结构。
5.树:用于存储层次化的数据,并支持快速搜索和遍历操作。
6.图:用于表示复杂关系的数据结构。
我们将使用C++语言来实现上述数据结构,并提供相应的接口供用户使用。
三、具体内容1. 数组数组是一种线性表,它由一组连续的内存空间组成,可以通过下标来随机访问元素。
我们将实现以下功能:•创建数组:指定数组的大小和元素类型,动态分配内存空间。
•插入元素:在指定位置插入一个元素,其他元素后移。
•删除元素:删除指定位置的元素,其他元素前移。
•查找元素:根据值查找元素在数组中的位置。
2. 链表链表是一种动态数据结构,它由一系列节点组成,每个节点包含一个数据项和一个指向下一个节点的指针。
我们将实现以下功能:•创建链表:动态分配内存空间,并初始化头节点。
•插入节点:在指定位置插入一个节点,调整指针关系。
•删除节点:删除指定位置的节点,调整指针关系。
•查找节点:根据值查找节点在链表中的位置。
3. 栈栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
我们将实现以下功能:•创建栈:初始化空栈。
•入栈操作:将一个新元素压入栈顶。
•出栈操作:从栈顶弹出一个元素。
•获取栈顶元素:返回当前栈顶的值。
4. 队列队列是一种先进先出(FIFO)的数据结构,只允许在队尾进行插入操作,在队头进行删除操作。
我们将实现以下功能:•创建队列:初始化空队列。
数据结构课程设计代码
#include<iostream.h>#include<stdio.h>#include<malloc.h>#define MAX 25typedef struct{char data;int weight;int parent;int lchild;int rchild;} HTNode;typedef struct{char cd[MAX];int start;} HuffmanCode;int main(){HTNode ht[2*MAX];HuffmanCode hcd[MAX], d;int i, k, f, l, r, n, c, s1, s2;cout<<"\t哈夫曼编码与译码系统\n";cout<<"\n请输入哈夫曼码元素个数:";cin>>n;cout<<"请输入各个元素的结点值与权值:\n";for(i=1;i<=n;i++){cout<<" 第"<<i<<"个元素-->\n\t结点值:";cin>>&ht[i].data;cout<<"\t权值:";cin>>ht[i].weight;}for(i=1;i<=2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=0;for(i=n+1;i<=2*n-1;i++){s1=s2=32767;l=r=0;for(k=1;k<=i-1;k++)if(ht[k].parent==0)if(ht[k].weight<s1){s2=s1;r=l;s1=ht[k].weight;l=k;}else if(ht[k].weight<s2){s2=ht[k].weight;r=k;}ht[l].parent=i;ht[r].parent=i;//得到新结点,删除l.r,将l,r的双亲域由0改为iht[i].weight=ht[l].weight+ht[r].weight;//i的权值等于左右孩子之和ht[i].lchild=l; ht[i].rchild=r; //l,r为i的左右孩子}for(i=1;i<=n;i++){d.start=n+1;//start开始时指向最后,即编码结束符位置c=i;f=ht[i].parent;//f指向结点c的双亲结点while(f!=0)//从叶子结点开始向上回溯,知道根结点{if(ht[f].lchild==c) d.cd[--d.start]='0';//结点c是f的左孩子,则生成代码0elsed.cd[--d.start]='1'; //结点c是f的左孩子,则生成代码1c=f;f=ht[f].parent;//继续向上回溯}hcd[i]=d;//为第i个字符编码分配空间}cout<<"输出哈夫曼编码:\n";for(i=1;i<=n;i++){cout<<ht[i].data<<": ";for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];cout<<"\n";}l: cout<<"\n请选择编码/译码/退出系统: (B/Y/E): ";char hfm;cin>>hfm;if(hfm=='e')return 0;else{switch(hfm)case'b':{int q ;char bs;cout<<"\n哈夫曼编码\n";cout<<"请输入字符代码: "<<endl;for(q=0;bs!=10;q++){bs=getchar();for(i=1;i<=n;i++){if (bs==ht[i].data)for(k=hcd[i].start;k<=n;k++)cout<<hcd[i].cd[k];}}cout<<endl;} break;case'y':{char e;int t,u;t=2*n-1;cout<<"\n哈夫曼译码\n";cout<<"\n请输入哈夫曼码: "<<endl;for(u=0;e!=10;u++){if(ht[t].lchild!=0){e=getchar();if(e=='0')t=ht[t].lchild;elset=ht[t].rchild;}else{cout<<ht[t].data;t=2*n-1;}}cout<<endl;} break;goto l;}return 0; } //Huffman。
数据结构课程设计报告 (附有完整可运行出来的代码)
课程设计报告设计题目:公园导游图一、流程图二、程序代码#include<iostream>using namespace std;#include<stdio.h>typedef struct //定义图结构{int n; /* 图的顶点个数*/char v[100]; /* 顶点信息*/int e[100][100]; /* 边信息*/int shor; /* 最短路径信息*/}park;park *luru(park *x){int j,k;cout<<"请输入公园景点个数"<<endl;cin>>x->n;if(x->n<=0){cout<<"个数输入错误,请重新输入"<<endl;cin>>x->n;}cout<<"请输入景点名称,每个名称只允许一个字符代替"<<endl;for(j=0;j<x->n;j++)cin>>x->v[j];cout<<"请输入景点之间的路径长度,只允许整数型数值,无路径长度的输入0"<<endl;for(j=0;j<x->n;j++)for(k=0;k<x->n;k++){cout<<"请输入第"<<j+1<<"行"<<"第"<<k+1<<"列的路径长度"<<endl;cin>>x->e[j][k];}return x;}int search(park *x){char start,end,temp;int i=0,j=0,temp_1,temp1=10000;cout<<"请输入要查找的起始景点名称"<<endl;cin>>start;while(i<x->n && start!=x->v[i])i++;if(i==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}cout<<"请输入要查找的终点景点名称"<<endl;cin>>end;while(j<x->n && end!=x->v[j]){j++;if(j==x->n){cout<<"没有找到该景点,按任意键返回"<<endl;return 0;}}x->shor=x->e[i][j];temp_1=x->e[i][j];for (int k=0;k<x->n;k++)//两个顶点最小权值判断{if (x->e[i][k]==0||x->e[k][j]==0 )continue;if(x->shor > x->e[i][k] + x->e[k][j]){x->shor = x->e[i][k] + x->e[k][j];temp=x->v[k];}}if(x->shor==0){cout<<"这两个节点中没有连通路,按任意键返回"<<endl;return 0;}if(x->shor==temp_1){cout<<"最短路径信息: "<<start<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;if(x->shor<temp_1 && x->shor<=temp1){cout<<"最短路径信息: "<<start<<"->"<<temp<<"->"<<end<<endl<<"最小路径长度:"<<x->shor<<endl;x->shor=10000;getchar();return 1;}cout<<"查找失败,按任意键返回"<<endl;getchar();return 0;}int main(){park x;int i=1;luru(&x);do{search(&x);cout<<"是否继续?"<<endl<<"1.继续"<<endl<<"0.退出"<<endl;cin>>i;}while(i!=0);return 0;}三、运行结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计容说明1. 项目一(1) 对设计任务容的概述学生成绩管理**任务:要现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。
链表长度加一,重新存储。
(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
对于,学生成绩记录的文件保存以及按学号、等的查询也是缺少的。
还有就是,对于多个学生成绩的操作也是不够的。
改进的方向:在时间许可的条件下,尽量的完善该系统的各种功能,同时也应修改系统,让它更为人性化、简单化,被广大用户所接受。
(8) 对软件的使用说明该软件是属于比较低级的软件,只是包含了课程设计的要求的几个功能:输入、输出、删除、插入。
所以用户在使用的过程中肯定会受到一定的局限性、不方便性,但由于时间的缘故,无法将软件做到尽善尽美。
2. 项目二(1) 对设计任务容的概述各种排序任务:用程序实现插入法排序、选择法排序、起泡法改进算法排序;利用插入排序、选择法排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:数字大小逐个递增的数列。
(2) 功能描述该函数有以下几个功能:1)对R[0..n-1]按递增有序进行直接插入排序2)对R[0..n-1]按递增有序进行冒泡排序3)对R[0..n-1]按递增有序进行直接选择排序4)排序后的输出5)调用所有排序,实现排序(3) 程序流程图(4) 详细设计void InsertSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接插入排序void BubbleSort(RecType R[],int n):对R[0..n-1]按递增有序进行冒泡排序void SelectSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接选择排序void disp(RecType R[],int n):排序后的输出void Sort():调用所有排序,实现排序(5) 程序模块及其接口描述该程序分为五个模块:1.输入功能:void Sort()建立一个数组存放用户在键盘上输入的关键字,在分别调用各种排序的函数,对关键字进行排序。
2.直接插入排序功能:void InsertSort(RecType R[],int n)将后一个数与前一个数比较,将其插入到第一个比它大的大的数前面,其余数字往后移一个位置。
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
3.冒泡排序功能:void BubbleSort(RecType R[],int n)在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位exchange,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置exchange值为0,在进行数据交换时,修改exchange为非0。
在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序。
4.直接选择排序功能:void SelectSort(RecType R[],int n)在无序区里找最小的数,第i小的数字放在第i个位置上,与原来第i个位置上的数字交换。
5.输出功能:void disp(RecType R[],int n)(6) 程序的输入与输出描述输入:要10个为数字的关键字;输出:排序后新的序列。
(7) 程序测试输入关键字,调用各种排序函数(8) 尚未解决的问题或改进方向改进方向:虽然给出了它的各种排序的结果,但是没有它的箱子过程,这是我的改进的方向,希望能将每种排序的过程也能展示给用户,来体现它们的不同。
(9) 对软件的使用说明用户只需根据提示,在键盘上输入要排序的10个关键字。
3. 项目三(1) 对设计任务容的概述有序表的合并要求输入有序表的数据,利用顺序表和链表结构分布完成两个有序表合并功能,并输出合并后的信息。
(2) 功能描述该程序有如下几个功能:1)初始化顺序表2)初始化链表3)建立顺序表4)尾插法建表5)输出合并后的顺序表6)输出合并后的单链表7)合并顺序表8) 合并单链表9) 调用以上的函数,实现有序表的合并(3) 概要设计或程序流程图(4) 详细设计void InitList(SqList *&L):初始化顺序表 void InitList1(LinkList1 *&L):初始化链表void CreateList(SqList *&L,ElemType a[],int n):建立顺序表 void CreateListR(LinkList1 *&L,ElemType a[],int n):尾插法建表 void DispList(SqList *L):输出合并后的顺序表 void DispList1(LinkList1 *L):输出合并后的单链表void UnionList(SqList *LA,SqList *LB,SqList *&LC):合并顺序表 void UnionList1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC):合并单链表void Union():调用以上的函数,实现有序表的合并。
(5) 程序模块及其接口描述程序有以下几个模块:1)初始化、建立顺序表2)初始化、建立链表3)输出合并后的表4)合并表(6) 调试分析或程序测试有序表的合并:(7) 尚未解决的问题或改进方向不足:不能重复使用程序。
(8) 对软件的使用说明用户只需根据界面的提示,采用对应的操作。
4.项目四(1)对设计任务容的概述建立二叉树,层序、先序、中序、后序遍历(用递归或非递归的方法都可以)**任务:要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数、输出中序遍历序列的函数、输出后序遍历序列的函数;(2)功能描述1) 建立二叉树2) 输出二叉树3) 先序遍历非递归算法:不为空时,访问根--左--右,采用递归的方法。
4) 中序遍历非递归算法:不为空时,访问左--根--右,采用递归的方法。
5) 后序遍历非递归算法:不为空时,访问左--右--根,采用递归的方法。
6) 层序遍历:运用队列,队列不空时,有左孩子将其入队,有右孩子将其入队,同时出队。
7) 调用以上函数实现二叉树的各种遍历(3)概要设计或程序流程图(4)详细设计 void CreateBTNode(BTNode * &b,char *str):建立二叉树void DispBTNode(BTNode *b):输出二叉树void PreOrder(BTNode *b):先序遍历非递归算法void InOrder(BTNode *b):中序遍历非递归算法void PostOrder(BTNode *b):后序遍历非递归算法void LevelOrder(BTNode *b):层序遍历(5)程序模块及其接口描述(6)程序的输入与输出描述输入二叉树的按层结点值;输出二叉树先序遍历访问结点的顺序;输出二叉树中序遍历访问结点的顺序;输出二叉树后序遍历访问结点的顺序;输出二叉树层次遍历访问结点的顺序;(7)调试分析或程序测试用户从键盘上输入要创建的二叉树结点:(8)尚未解决的问题或改进方向改进方向:希望能将系统改进的更为人性化,让界面更舒适,操作更简单。
(9)对软件的使用说明用户只需按照界面的提示,采取相应的措施,到时界面会提醒用户键盘输入。
5.项目五(1)对设计任务容的概述猴子选大王**任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。