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

算法与数据结构课程设计一、课程目标知识目标:1. 让学生掌握基本的数据结构(线性表、树、图等)及其在实际问题中的应用。
2. 使学生了解并掌握常用的算法(排序、查找、递归等),并能够分析算法的效率。
3. 引导学生理解算法与数据结构之间的关系,以及它们在软件开发中的重要性。
技能目标:1. 培养学生能够运用所学数据结构和算法解决实际问题的能力。
2. 提高学生运用编程语言(如C++、Java等)实现算法和数据结构的能力。
3. 培养学生分析、设计、优化算法的能力,以及编写规范、高效的程序代码。
情感态度价值观目标:1. 培养学生积极主动地探索和解决问题,形成良好的学习习惯和团队合作精神。
2. 激发学生对计算机科学的兴趣,使其认识到算法与数据结构在实际应用中的价值。
3. 培养学生具备一定的抽象思维能力,敢于面对复杂问题,勇于克服困难。
课程性质:本课程为高中信息技术课程,旨在让学生掌握计算机科学的基本概念和方法,培养其逻辑思维能力和实际操作能力。
学生特点:高中学生具备一定的数学基础和逻辑思维能力,对新鲜事物充满好奇,但可能对复杂概念和抽象知识接受程度有限。
教学要求:结合学生特点,采用案例教学、任务驱动等教学方法,注重理论与实践相结合,让学生在动手实践中掌握知识,提高能力。
在教学过程中,关注学生的个体差异,给予个性化指导,确保课程目标的实现。
通过课程学习,使学生能够达到以上所述的具体学习成果,为后续学习和工作打下坚实基础。
二、教学内容1. 数据结构:- 线性表:数组、链表- 栈与队列- 树:二叉树、线索二叉树、树的应用- 图:图的表示、图的遍历、最短路径2. 算法:- 排序:冒泡排序、选择排序、插入排序、快速排序、归并排序- 查找:顺序查找、二分查找、哈希查找- 递归:递归算法的设计与实现- 算法效率分析:时间复杂度、空间复杂度3. 教学内容的安排与进度:- 数据结构(第一、二周):线性表、栈与队列、树- 算法(第三、四周):排序、查找、递归- 算法效率分析(第五周):时间复杂度、空间复杂度4. 教材章节:- 《算法与数据结构》第一章:数据结构基础- 《算法与数据结构》第二章:线性表- 《算法与数据结构》第三章:栈与队列- 《算法与数据结构》第四章:树和二叉树- 《算法与数据结构》第五章:图- 《算法与数据结构》第六章:排序- 《算法与数据结构》第七章:查找- 《算法与数据结构》第八章:算法效率分析教学内容注重科学性和系统性,按照由浅入深的顺序组织,确保学生在掌握基本概念和方法的基础上,逐步提高解决问题的能力。
算法与数据结构课程设计 报告

算法与数据结构课程设计报告课程设计题目:图的基本操作及应用数据结构课程设计是在学完数据结构课程之后的实践教学环节。
本实践教学是培养学生数据抽象能力,进行复杂程序设计的训练过程。
要求学生能对所涉及问题选择合适的数据结构、存储结构及算法,并编写出结构清楚且正确易读的程序,提高程序设计基本技能和技巧。
一.设计目的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);}第三步:添加功能函数。
算法与数据结构c语言版第三版课程设计

算法与数据结构C语言版第三版课程设计课程简介
在计算机科学中,算法和数据结构是必须掌握的基本概念。
算法是解决问题的一套有序的步骤,而数据结构则是组织和存储数据的方法。
这两个概念密切相关,相互影响,因此在计算机科学中,这两个概念被视为必不可少的核心知识。
本课程旨在向学生介绍算法和数据结构基础,并通过课程设计的方式,综合运用所学的知识来解决实际问题。
本课程使用C语言编程实现算法和数据结构,旨在帮助学生深入理解计算机科学中的核心概念。
课程目标
1.掌握基本的算法和数据结构概念;
2.能够分析问题并用所学的知识设计和实现算法;
3.熟练使用C语言编程实现算法和数据结构;
4.深入理解计算机科学核心概念。
课程内容
本课程将介绍以下算法和数据结构:
•基础数据结构:数组、链表、栈和队列
•排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序
•搜索算法:线性搜索、二分搜索
•图论算法:深度优先搜索、广度优先搜索、最短路径算法
•树和二叉树:二叉搜索树、优先队列和哈夫曼编码
•高级算法和数据结构:红黑树、数据压缩和字典树
1。
算法与数据结构课设(有向图,无向图,有向网,无向网)

算法与数据结构课程设计报告系(院):计算机科学学院专业班级:教技1001姓名:李##学号: ******### 指导教师:***设计时间:2012.6.16 - 2012.6.24设计地点:4号楼2号机房目录一、设计方案 (1)二、实现过程以及代码 (2)三、测试 (20)四、结论和分析 (23)五、难点和收获 (23)一、 设计方案1.程序设计基本过程:拿到课程设计任务书,按照要求,需要设计有向图、有向网、无向图 、无向网四种图,以及邻接矩阵、邻接表两种数据存储结构,三层以上的显示菜单。
图的操作中又包含了有关线性表、栈和队列的基本操作。
由于显示菜单已给出,剩下的任务就是把函数写入其中。
2.程序流程图:预定义 定义结构体 定义变量 各种函数3.程序设计的原理:图的操作都是以两种存储结构为基础的:邻接矩阵存储结构和邻接表存储结构,如有向图,有向网,无向图,无向网的创建,其他的操作都是在四种图创建后才开始进行的。
所以,首先必须理解两种存储结构的定义。
图的邻接矩阵存储结构即图的数组表示法。
用两个数组分别存储数据元素(如顶点)的信息和数据元素之间的关系(如边或弧)的信息。
用邻接矩阵存储结构的图具有以下几点特征:(一):顶点数:vexnum ,边(弧)数:arcnum ,图的种类:kind ;(二):邻接矩阵:arcs(1顶点关系类型:adj 2相关信息:*info);(三):顶点向量(顶点名):vexs[];其优点是以二维数组表示有n 个顶点的图时,需存放n 个顶点的信息和n*n 条弧的信息存储量。
借助邻接矩阵容易判定任意两个顶点之间是否有边或弧相连,并容易求出各个顶点的度。
缺点是时间复杂度是O (n*n ),例如,构造一个具有n 个顶点和e 条边的无向网的时间复杂度为O (n*n+e*n )。
图的邻接表存储结构是图的一种链式存储结构。
对图中的每个顶点建立一个单链表,每个结点由三个域组成,邻接点域adjvex (弧尾在邻接表链表中的位序),链域nextarc (下一条弧),数据域info(权值)。
算法与数据结构实验报告

2015-2016学年第二学期《算法与数据结构》课程实验报告专业软件工程学生姓名成晓伟班级软件141学号1410075094实验学时16实验教师徐秀芳信息工程学院实验一单链表的基本操作一、实验目的1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。
2.掌握线性表的各种物理存储表示和C语言实现。
3.掌握单链表的各种主要操作的C语言实现。
4.通过实验理解线性表中的单链表存储表示与实现。
二、主要仪器及耗材普通计算机三、实验内容与要求1、用C语言编写一个单链表基本操作测试程序。
(1)初始化单链表(2)创建单链表(3)求单链表长度(4)输出单链表中每一个结点元素(5)指定位置插入某个元素(6)查找第i个结点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单链表2、实验要求(1)程序中用户可以选择上述基本操作。
程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。
(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。
(3)主函数实现对基本操作功能的调用。
3、主要代码(1)初始化单链表LinkList *InitList(){ //创建一个空链表,初始化线性表LinkList *L;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;return L;}(2)创建单链表//头插法void CreateListF(LinkList *L){LinkList *s;int i=1,a=0;while(1){printf("输入第%d个元素(0表示终止)",i++);scanf("%d",&a);if(a==0)break;s=(LinkList *)malloc(sizeof(LinkList));s->data=a;s->next=L->next;L->next=s;}}(3)求链表长度int ListLength(LinkList *L){ //求链表长度int n=0;LinkList *p=L;while(p->next!=NULL){p=p->next;n++;}return(n);}(4)在指定位置插入元素int InsertList(LinkList *L,int i,ElemType e){LinkList *p=L,*s;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找出要插入的位置的前一个位置if(p==NULL){return 0;}else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;p->next=s;return 1;}}(5)输出链表void DispList(LinkList *L){ //输出链表LinkList *p=L->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}(6)查找链表中指定元素int GetElem(LinkList *L,int i){ //查找链表中指定元素LinkList *p=L;int j=0;while(j<i&&p!=NULL){j++;p=p->next;}if(p==NULL){return 0;}else{return p->data;}}(7)查找值是e的结点并返回该指针LinkList *LocateElem(LinkList *L,ElemType e){ //查找值是e的结点并返回该指针int i=1;LinkList *p=L;while(p!=NULL)if(p->data==e) return p;}if(p==NULL){return NULL;}}(8)删除元素int ListDelete(LinkList *L,int i,ElemType *e){ //删除元素LinkList *p=L,*q;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找到要删除元素地址的前一个地址if(p==NULL){ return 0;} //不能删除else{q=p->next;*e=q->data;p->next=q->next;free(q); //删除成功return 1;}}(9)销毁链表void DestroyList(LinkList *L){//销毁链表LinkList *pre=L,*p=L->next;while(p!=NULL){free(pre);pre=p;p=pre->next;}free(pre);}main函数:int main(){LinkList *L;ElemType e;int i;L=InitList();CreateListF(L);DispList(L);printf("输入要查找的元素位置:\n");scanf("%d",&i);e=GetElem(L,i);printf("%d\n",e);printf("单链表长度为:%d\n",ListLength(L));printf("输入要删除元素的位置:");scanf("%d",&i);if (i>ListLength(L)){printf("超出范围重新输入");scanf("%d",&i);}if(ListDelete(L,i,&e)==0){printf("未找到元素\n");}else DispList(L);printf("输入插入元素的位置和值:");scanf("%d%d",&i,&e);InsertList(L,i,e);DispList(L);return 0;}4、测试数据及测试结果输入:23 56 12 28 45输出:四、注意事项1、存储结构定义和基本操作尽可能用头文件实现。
算法与及数据结构实验报告

第一学期实验报告课程名称:算法与数据结构实验名称:城市链表一、实验目的本次实验的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。
同时,通过本次实验帮助学生复习高级语言的使用方法。
二、实验内容(一)城市链表:将若干城市的信息,存入一个带头结点的单链表。
结点中的城市信息包括:城市名,城市的位置坐标。
要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4(正确的结果应为6,1,4,7,2,3,5)。
三、实验环境VS2010 、win8.1四、实验结果(一)城市链表:(1)创建城市链表;(2)给定一个城市名,返回其位置坐标;(3)给定一个位置坐标P 和一个距离D,返回所有与P 的距离小于等于D 的城市。
(4)在已有的城市链表中插入一个新的城市;(5)更新城市信息;(6)删除某个城市信息。
(二) 约瑟夫环m 的初值为20;密码:3,1,7,2,6,8,4输出6,1,4,7,2,3,5。
五、附录城市链表:5.1 问题分析该实验要求对链表实现创建,遍历,插入,删除,查询等操作,故使用单链表。
5.2 设计方案该程序大致分为以下几个模块:1.创建城市链表模块,即在空链表中插入新元素。
故创建城市链表中包涵插入模块。
2.返回位置坐标模块。
3.计算距离模块4.插入模块。
5.更新城市信息模块6.删除信息模块。
5.3 算法5.3.1 根据中心城市坐标,返回在距离内的所有城市:void FindCityDistance(citylist *L){//根据距离输出城市……//输入信息与距离L=L->next;while(L != NULL){if(((L->x-x1)*(L->x-x1)+(L->y-y1)*(L->y-y1)<=dis *dis)&&(((L->x-x1)+(L->y-y1))!=0 )){printf("城市名称%s\n",L->Name);printf("城市坐标%.2lf,%.2lf\n",L->x,L->y);}L=L->next;}}该算法主要用到了勾股定理,考虑到不需要实际数值,只需要大小比较,所以只用横坐标差的平方+纵坐标差的平方<= 距离的平方判定。
算法与及数据结构实验报告

算法与及数据结构实验报告算法与数据结构实验报告一、实验目的本次算法与数据结构实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见算法和数据结构的基本原理、特性和应用,提高我们解决实际问题的能力和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
同时,为了进行算法性能的分析和比较,使用了 Python 的 time 模块来计算程序的运行时间。
三、实验内容1、线性表的实现与操作顺序表的实现:使用数组来实现顺序表,并实现了插入、删除、查找等基本操作。
链表的实现:通过创建节点类来实现链表,包括单向链表和双向链表,并完成了相应的操作。
2、栈和队列的应用栈的实现与应用:用数组或链表实现栈结构,解决了表达式求值、括号匹配等问题。
队列的实现与应用:实现了顺序队列和循环队列,用于模拟排队系统等场景。
3、树结构的探索二叉树的创建与遍历:实现了二叉树的先序、中序和后序遍历算法,并对其时间复杂度进行了分析。
二叉搜索树的操作:构建二叉搜索树,实现了插入、删除、查找等操作。
4、图的表示与遍历邻接矩阵和邻接表表示图:分别用邻接矩阵和邻接表来存储图的结构,并对两种表示方法的优缺点进行了比较。
图的深度优先遍历和广度优先遍历:实现了两种遍历算法,并应用于解决路径查找等问题。
5、排序算法的比较插入排序、冒泡排序、选择排序:实现了这三种简单排序算法,并对不同规模的数据进行排序,比较它们的性能。
快速排序、归并排序:深入理解并实现了这两种高效的排序算法,通过实验分析其在不同情况下的表现。
6、查找算法的实践顺序查找、二分查找:实现了这两种基本的查找算法,并比较它们在有序和无序数据中的查找效率。
四、实验步骤及结果分析1、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。
删除操作同理,需要移动被删除元素后面的元素。
在查找操作中,通过遍历数组即可完成。
算法与数据结构课程设计任务书

算法与数据结构课程设计任务书1、实训意义和目的使学生巩固和加强《C语言程序设计》和《数据结构与算法》课程的理论知识。
使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。
使学生掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。
进一步理解和运用结构化程设计的思想和方法;学会利用流程图或N-S图表示算法。
使学生掌握调试程序的基本方法及上机操作方法。
掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。
课学生做毕业设计打好基础。
初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。
培养学生的创新能力和创新思维。
学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。
培养学生良好的程序设计风格。
在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。
学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。
2、实训目标及要求参加本课程设计的学生,应当认真完成本课程设计的全部过程。
并以最终课程设计成果来证明其独立完成各种实际任务的能力。
从而,反映出理解和运用本课程知识的水平和能力。
A、分析问题。
各种简单的与计算机有关的案例中所需要的输出结果,把大问题分解成小问题,使用自顶向下或类似设计方法给出模块化或计划。
B、提出算法执行特定任务。
模块表示为算法,使用自顶向下或伪代码等设计手段将模块细化成更详细的成分,清楚地表明顺序、选择和重复等到控制结构。
C、把一个算法变为用C语言编写的结构化程序。
D、用合适的测试方法检查程序是否符合最初的要求,为不合适数据设计错误陷阱,并提供错误信息来帮助用户。
E、写出清晰的用户文档,确保用户或者通过遵循程序中的指示或者使用程序设计者编写的文档能成功地运行程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
烟台大学计算机学院课程设计(算法与数据结构)设计题目:班级姓名学号指导教师成绩二○一三年四月十日内容包括:一、课程设计题目:二、课程设计内容:三、算法设计:四、程序正确性验证(指边界测试数据,即程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足要求的结果):五、课程设计过程中出现的主要问题、原因及解决方法:六、课程设计的主要收获:七、对今后课程设计的建议:算法与数据结构课程设计题目一、单项分值:25分1、约瑟夫环游戏2、八皇后问题(图形表示加20分)3、表达式的求值问题4、迷宫问题(图形表示加10分)二、单项分值:80分5、HTML文档标记匹配算法要求:输入一段HTML代码,判断该代码是否符合HTML的语法提示:HTML文档由不同的标记划分为不同的部分与层次。
与括号类似,这些标记需要成对出现,对于名为<myTag>的起始标记,相应的结束标记为</myTag>。
常用的HTML标记:●<html> </html>:HTML文档●<title> </title >:文档标题●<body> </body >:文档体●<h1> </h1 >:节的头部●<center> </center >:居中对齐●<left> </left >:左对齐●<p> </p>:段落●。
HTML语言有合理的嵌套,如<html><body> </body></html>6、程序源代码的相似性问题描述:对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。
基本要求:建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。
例如:关键字 Void Int For Char if else while do break class 程序1关键字频度 4 3 0 4 3 0 7 0 0 2程序2关键字频度 4 2 0 5 4 0 5 2 0 1X1=[4,3,0,4,3,0,7,0,0,2]X2=[4,2,0,5,4,0,5,2,0,1]设s是向量X1和X2的相对距离,s=sqrt( ∑(xi1-xi2) 2 ),当X1=X2时,s=0, 反映出可能是同一个程序;s值越大,则两个程序的差别可能也越大。
测试数据: 选择若干组编译和运行都无误的C++程序,程序之间有相近的和差别大的,用上述方法求s, 对比两个程序的相似性。
提高要求:建立源代码用户标识符表,比较两个源代码用户标识符出现的频度,综合关键字频度和用户标识符频度判断两个程序的相似性。
三、单项分值:100分7、飞机订票系统(限1 人完成)任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;8、图书管理系统(限1 人完成)【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
【进一步完成内容】1)系统功能的进一步完善;2)索引表采用树表。
3)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)9、校园导航问题(限1 人完成)1.问题描述以我校为例,设计一个校园导游程序,主要为来访的客人提供信息查询。
2.需求分析提供至少5个景点的校园导游咨询(包括景点介绍、景点间距离等)。
本程序的目的是为来客提供路径咨询和景点查询(根据用户指定的始点和终点输出相应最短简单路径或者输出用户指定景点的详细信息);系统管理员又可根据实际情况对导游图进行修改,删除路径或景点。
选取九个大家熟悉的景点,抽象成一张带权无向图(如图所示)。
以图中顶点表示景点,存放景点名称、代号等信息;以边表示路径,边上的权值表示两地的距离,为此图选择适当的数据结构:本演示程序采用C语言编写,完成了无向图的建立和其他操作:①输入的形式和输入值的范围:主函数中调用图表建立函数之后,通过输入1到6不同的阿拉伯数字进行功能选择;在查找景点详细信息操作时需要输入景点的的序号;在求路径函数中,也是输入对应景点序号值;在删除路线函数里,输入构成边的两个景点的序号对;。
在所有输入操作中,输入的值都是整数②输出的形式:菜单函数,输出功能菜单目录;查找函数信息操作,输出景点序号,名称,还有详细介绍;求最短路径函数,输出路线经过的顶点和路线的长度!删除函数,当删除成功后会输出删除成功;求删除操作后显示删除的元素的值。
③程序所能达到的功能:完成无向带权图的生成(通过建立顶点数组和领结矩阵)、通过选择菜单进行不同操作,查看景点信息、求景点间最短路径、删除景点或路线。
④测试数据:A.查看景点详细信息操作中输入3B.查询最短路径操作中输入3,5C.删除操作中先后输入1(删除景点),2)(删除边)D.删除景点操作中输入1E.删除边操作中输入1,5F.查看一个景点到其他景点所有路线输入110、小型英汉词典问题描述:设计一个英汉词典,支持Member (查找)、Insert (插入)、Delete (删除) 操作。
基本要求:实现字典的常用方法有:有序线性表(Memeber用二分检索实现)、AVL树(二叉搜索树)、Patricia Trie、散列表等,任选一种方法实现字典的操作,查找单词、插入单词(插入时,先查找,找不到插入,找到提示用户)、删除单词(删除时,先查找,找到删除,找不到提示用户)。
测试数据:任一英文单词。
提高要求:选用两种以上的方法实现字典的操作,并比较不同实现算法的时间复杂度和空间复杂度。
提示:字典可以自己建立,但必须按字母a~z建立26个文件,建议从网上下载,文件类型为txt。
11、哈夫曼编码/译码器(限1 人完成)【问题描述】设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
【基本要求】1)将权值数据存放在数据文件(文件名为data.txt,位于执行程序的当前目录中)2)分别采用动态和静态存储结构3)初始化:键盘输入字符集大小n、n个字符和n个权值,建立哈夫曼树;4)编码:利用建好的哈夫曼树生成哈夫曼编码;5)输出编码;6)设字符集及频度如下表:字符空格A B C D E F G H I J K L M频度186 64 13 22 32 103 21 15 47 57 1 5 32 20字符N O P Q R S T U V W X Y Z频度57 63 15 1 48 51 80 23 8 18 1 16 1【进一步完成内容】1)译码功能;2)显示哈夫曼树;3)界面设计的优化。
12、全国交通咨询模拟【问题描述】处于对不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
【测试数据】【实现提示】(1)对全国城市交通图和班车时刻表及飞机航班表的编辑,应该提供文件形式输入和键盘输入两种方式。
飞机航班表的信息应包括:起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如:对于从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至各段的出发时间、到达时间和票价信息。
(2)以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。
13、LZW压缩器/解压器【问题描述】为了节省存储空间,常常需要把文本文件采用压缩编码的方式储存。
例如:一个包含1000个x的字符串和2000个y的字符串的文本文件在不压缩时占用的空间为3002字节(每个x 或每个y占用一个字节,两个字节用来表示串的结尾)。
同样是这个文件,采用游程长度编码(run-length coding),可以存储为字符串1000x2000y,仅为10个字母,占用12个字节。
若采用二进制表示游程长度(1000和2000)可以进一步节约空间。
如果每个游程长度占用2个字节,则可以表示的最大游程长度为2*pow(16),这样,上例中的字符串只需要用8个字节来存储。
当要读取编码文件时,需要对其进行解码。
由压缩器(compressor)对文件进行编码,由解压器(decompressor)进行解码。
①(1)长度-游程编码的压缩/解压;+(2)LZW压缩/解压(散列);②(1)长度-游程编码的压缩/解压;+(3)霍夫曼编码压缩/解压 (霍夫曼树)【基本要求】要求选用二种压缩/解压策略实现压缩/解压器[(1)为必选]。
输入的为本文文件(.txt),输出的为一种自定义的文件(.nz)。
考虑当构成文本的字符集合为{a,b,c,……,z,0,1,2,…9}时,请用实例测试你的压缩/解压器。