西安邮电大学数据结构课程设计
完整word版数据结构课设报告word文档良心出品

西安邮电大学(计算机学院)数据结构课程设计报告题目:哈弗曼编/译码器计算机科学与技术专业名称:1505 计科级:班常昊学生姓名:04151160 学号(8位):指导教师:设计起止时间:日月年2016122612年日—2016月30一. 设计目的1.训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
二. 设计内容利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。
三.概要设计1.建立哈夫曼树:读入文件(*.souce),统计文件中字符出现的频度,并以这些字符的频度作为权值,建立哈夫曼树。
这一步需要做字符的统计所以考虑到大量数据的处理,需要考虑时间复杂度带来的影响。
所以采用牺牲一定的存储空间的方法,以哈希表的方法完成统计。
因为字符的ascll码是0~128不重复的整数,所以采用不散列的简单哈希表。
(例如:对于abcdabbccc的串的处理——遍历字符串,HZArray[char[i]].HZ++)。
在完成频数的统计后,下一步对整个128的数组中的频数非零的字符按照从小到大的顺序排序。
考虑到稳定/非稳定排序对于本题没有什么影响,而且对于128的排序总数来说各种排序的方法时间复杂度相对计算机的性能不会相差多少,所以采用简单冒泡排序,而且,每次的排序实际数量都不会很多,加上flag的优化以后排序效率还是不错的。
完成排序后,根据哈弗曼树的性质,直接依据有序序列建立哈弗曼树。
西安邮电大学 数字电路课程设计报告书 ——交通灯控制器

红绿灯交通信号系统外观示意图如图所示。
1.在十字路口的两个方向上各设一组红黄绿灯,显示顺序为其中一方向是绿灯、黄灯、红灯;另一方向是红灯、绿灯、黄灯。
2.设置一组数码管,以倒计时的方式显示允许通行或禁止通行时间,其中一个方向上绿灯亮的时间是20s,另一个方向上绿灯亮的时间是30s,黄灯亮的的时间都是5s。
设计时序如下:
东西向
南北向
4.电路框图设计:
说明:脉冲输出部分为555时基芯片构成的多次谐波振荡器,由其产生周期为1s的时钟脉冲信号。计时控制部分主要由两片74LS161(十六进制同步加法计数器)及逻辑门电路构成。产生30s、20s和5s的倒计时信号。彩灯控制部分将计时控制部分输出的信号通过逻辑门电路及74LS139(双2—4线译照响应时序显示,并将74LS139的输出信号反馈回计时控制部分实现三种倒计时之间的切换。数字显示部分主要由74LS48(7段显示译码器)、74LS04(反相器)及8段共阴极数码管构成,通过接入计时控制部分的信号实现倒计时显示。
3.用两组数码管,实现双向倒计时显示。
三.实现方案:
实现这个交通灯控制器可以采用FPGA、单片机等可编程器件或基本数字逻辑器件实现。在这次实验中采用74系列数字集成芯片和555时基芯片实现相应功能。本报告最后附有使用MULTISIM仿真软件进行的仿真电路图。
四.具体功能分析:
此电路为十字路口交通灯控制电路,要求东西向和南北向不能同时出现绿(黄)灯,发生“撞车”现象。即当某一方向为绿灯或黄灯时,另一方向必为红灯。东西向主通路有倒计时显示。
电容C1放电时,暂稳态持续时间为
tw2=0.7R2C=0.7×150k×4.7μ≈0.5s
因此,电路输出矩形脉冲的周期为T= tw1+tw2≈1s输出占空比为q=tw1/T≈50%
826数据结构

西安邮电大学硕士研究生招生考试大纲科目代码:826科目名称:《数据结构》一、课程性质和任务数据结构是计算机各专业的专业基础课。
它是操作系统、数据库、编译原理等所有软件专业基础课和专业课的重要基础;它还是进行程序设计,尤其是进行高水平的应用程序和系统程序必不可少的基础。
通过本课程的学习,使学生掌握数据组织、存储和运算的基本原理和方法,培养学生对各类数据结构和相关算法的分析和设计的能力,使学生能够编写出正确、清晰和较高质量的算法和程序。
二、课程教学内容和要求第一章数据结构和算法1.了解数据结构、逻辑结构、存储结构和抽象数据类型的基本概念。
2.了解数据结构的发展和地位。
3.了解各种算法描述方法和算法设计的基本要求。
4.掌握对算法的评价标准和算法效率的度量方法。
第二章线性表1.理解线性表的概念、定义、逻辑结构和存储结构。
2.熟练掌握线性表的顺序结构及其各种基本运算。
3.熟练掌握单链表、循环链表、双向链表的存储结构及其各种基本运算。
4.理解链表的应用——稀疏多项式存储和运算。
第三章栈和队列1.掌握栈的定义、表示、实现和应用。
2.掌握递归的概念和递归的实现过程。
3.掌握队列的定义以及顺序(循环队列)和链式存储结构的实现。
第四章串1.了解串的基本概念及顺序和链式存储结构。
2.掌握串的各种基本运算。
3.了解串的模式匹配算法。
第五章数组和广义表1.掌握数组的顺序存储结构。
2.理解稀疏数组的概念和压缩存储的方法。
3.理解稀疏矩阵的三元组存储结构和基本运算。
4.了解稀疏矩阵的十字链表存储结构。
5.理解广义表的基本概念,掌握广义表的存储结构。
第六章树1.理解树的基本概念及其存储结构。
2.熟练掌握二叉树的定义、性质以及各种存储结构和遍历算法。
3.掌握线索二叉树的概念、存储结构及线索化算法。
4.掌握树和森林与二叉树间的转换,掌握树和森林的遍历算法。
5.掌握哈夫曼树的概念、存储结构和应用。
第七章图1.理解图的基本概念,掌握图的邻接矩阵和邻接表的存储结构。
数据结构课程设计报告含代码完整版

数据结构课程设计报告含代码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. 可将景点文件,边文件及账户密码合并为一个文件。
西安邮电大学-(数据结构)校园导游系统课程教学设计报告

西安郵電大學数据结构课程设计报告书崔斌专业名称 计算机科学与技术专业计科1106系部名称计算机学院 学生姓名04111185指导教师2012年12月15日 至 间2012年12月21日实验题目:校园导游系统一、实验目的① :为了让非本校的同学们,家长们能够充分了解本校 ---西安邮电大学。
② :实践数据结构所学知识。
二、实验内容学校简易的俯视图。
各个景点的简单介绍。
任意两景点之间的所有路径。
任意两景点之间的最少中转景点路径。
任意两景点之间的带权路径长度。
三、需求分析①: ②: ③: ④: ⑤:Init();初始化两个顺序栈Menu();进行选择的模块函数;Intro();景点介绍函数;SearchO;判断是否有此编号的景点;Fin dall path();找路径函数;Fin dallway();找任意两个景点之间的所有路径;(存在栈里面) ShortestwayO;任意两个景点之间中转次数最少的路径;(从栈里面读取出来) NicewayO;任意两个景点之间总权值最小的路径;(从栈里面读取出来) Calculate();(从栈里面读取出来相关数据),进行分析运算;Byebye();你懂得!四、概要设计1、方案设计对系统进行分析,给出景区图+++++++++++牛++++++++¥++++占-I-ILnJ一戸IJ]一(一恃//思想;递归结合循环,然后,找到终点时还要回溯;两点之间的所有路径void findallway(adjlist *G,int m,int n)//int i,t,k;arcnode *p;p a_th rp;p ush(s,m);G->vertex[m-1].flag=1;if(m==n)rp .sumweight=k=calculate(G);rp .sum=s->t op;rp.num=(y+1);p ush1(&z,r p);printf(" 路径%3d 为(途径%2d 个景点,长度为%3d) : ",y+1,s->top,k);for(i=O;iv=s->t op ;i++)p rintf("->%d",s->elem[i]);p rintf("\n");G->vertex[m-1].flag=1;y++;//外部全局变量二for(p=G->vertex[m-1].firstarc ;p!=NULL ;p=p-> nextarc)t=p->num;if(G->vertex[t-1].flag==0)findallway(G,t,n);G->vertex[s->elem[s->to p]-1].flag=0;// pop s(s);}//从文件里读取数据;错误1 ;不知道此节点有几个邻接点,因为%s 的原因,就会只把第一个节点的相关数据读出来,从第二个节点的相关信息处,开始读出错误(即烫烫烫烫烫烫烫烫烫烫烫)不超过m;错误2 ;读文件时,因为有链表的部分,就按照单链表的创建些写,结果总是此节点的 最后一个邻接点没被读到内存里,究其原因,是最后一个 (不仅我把 p2->nextarc=NULL;还把 free(p1);)void readnet(adjlist *G) {int i,count,m;arcnode *head,* p2,* p1; FILE *fp;fp=fo pen(U,"rt"); if(fp==NULL) {printf(-文件打开失败! ! ");exit(0);}for(i=0;i<vnum;i++) {fscanf(fp,"%d %s %s %d %d",&G->vertex[i].num,G->vertex[i].name,G->vertex[i].introduce,&G->vertex[ i].sum,&G->vertex[i].flag);//fprintf()的''后面不加第一个空格也可以。
大学数据结构课程设计

大学数据结构课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点及其应用场景。
2. 学会分析不同数据结构在解决具体问题时的性能差异,能够选择合适的数据结构优化程序性能。
3. 掌握各类数据结构的存储表示方法,以及基本操作算法的实现。
技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够设计和实现小型算法程序。
2. 培养学生运用递归思想解决问题的能力,掌握递归算法的设计与实现。
3. 提高学生的编程实践能力,通过实验和项目练习,熟练运用所学数据结构进行程序设计。
情感态度价值观目标:1. 培养学生积极探究数据结构相关知识的学习兴趣,激发学生的学习热情和主动性。
2. 培养学生的团队协作精神,通过小组讨论和实践项目,提高沟通与协作能力。
3. 培养学生具备良好的程序设计素养,遵循编程规范,注重代码质量和性能优化。
课程性质:本课程为计算机专业核心课程,旨在使学生掌握数据结构的基本理论、方法和技能,为后续算法分析、软件工程等课程打下坚实基础。
学生特点:大学二年级学生,已具备一定的编程基础和算法知识,具备独立思考和学习的能力。
教学要求:结合课程特点和学生实际,注重理论与实践相结合,强调学生动手实践,培养学生解决实际问题的能力。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
通过本课程的学习,使学生能够具备扎实的理论基础和较强的实践能力,为未来从事计算机相关领域工作打下坚实基础。
二、教学内容本课程教学内容主要包括以下几部分:1. 数据结构基本概念:介绍数据结构的基本概念、分类及其应用场景,分析不同数据结构的特点。
- 教材章节:第1章 数据结构绪论- 内容列举:线性结构、非线性结构、抽象数据类型等。
2. 线性表:讲解线性表的定义、存储表示(顺序存储、链式存储),以及基本操作(插入、删除、查找等)。
- 教材章节:第2章 线性表- 内容列举:顺序表、链表、栈、队列等。
西安邮电大学linux操作系统课程设计ls的编写含源码

西安郵電大學操作系统课程设计报告书院系名称:计算机学院学生姓名:专业名称:软件工程班级:班学号:时间:2015 年4月13 日至2015 年4月24 日1实验目的操作系统是控制和管理计算机硬件和软件资源的虚拟机,其中的文件系统是对软件和设备进行管理的系统,文件系统是操作系统中非常重要的一个模块,它的实现占用了操作系统源码的最大编码量,其好坏也直接影响着用户对操作系统的感受程度。
通过对操作系统课程设计的实践,进一步加深对文件系统的认识和理解,并在此基础上培养学生的工程应用能力。
实验分别从用户态和内核态两个层次实践文件系统的部分功能。
2实验任务2.1 ls实现在linux下编程实现带参数的shell命令ls,ls命令必须支持如下功能。
1.基本要求(1)支持-l 参数;(2)输出结果按字典排序;(3)列出“.”文件,支持-a参数,在没有-a时候不显示隐藏文件;(4)显示记录总数。
2.高级要求(1)支持对给定的目录进行操作,如ls /tmp;(2)输出结果分栏排序,每栏的宽度由这一栏最长的文件名决定,显示的栏数还受终端显示器的宽度影响,每一列尽可能的等宽;(3)正确显示文件特殊属性suid、sgid和sticky,参见联机帮助确保程序能处理各种情况;(4)支持标准的ls支持选项-R,它的功能是递归地列出目录中所有的文件包含子目录中的文件;(5)支持标准的ls支持选项-u,它会显示出文件的最后访问时间,如果用了-u而不用-l,会有什么结果?;(6)当关掉一个文件的读权限,就不能打开这个文件来读。
如果从一个终端登录,打开一个文件,保持文件的打开状态,然后从另外的终端登录,去掉文件的读权限,这时有什么事情会发生?编写一个程序,先用open()打开一个文件,用read()读一些内容,调用sleep()等待20s以后,再读一些内容,从另外的终端,再等待的20s内去掉文件的读权限,这样会有什么结果?。
2.2编写内核模块显示目录或文件的信息。
大学数据结构教案设计

课程名称:数据结构授课对象:计算机科学与技术专业、软件工程专业等相关专业学生授课时间:2课时教学目标:1. 了解数据结构的基本概念和分类。
2. 掌握线性表、栈、队列、串、树等基本数据结构及其操作。
3. 理解算法设计的基本原则和常用算法。
4. 培养学生分析和解决实际问题的能力。
教学重点:1. 数据结构的基本概念和分类。
2. 线性表、栈、队列、串、树等基本数据结构及其操作。
教学难点:1. 数据结构的存储实现。
2. 算法设计的基本原则和常用算法。
教学过程:一、导入新课1. 通过实例引出数据结构的概念,如线性表、栈、队列等。
2. 简要介绍数据结构在计算机科学中的应用。
二、讲解基本概念1. 数据结构的基本概念和分类。
2. 线性表、栈、队列、串、树等基本数据结构及其操作。
三、讲解线性表1. 线性表的存储结构:顺序存储和链式存储。
2. 线性表的运算:插入、删除、查找等。
四、讲解栈和队列1. 栈和队列的存储结构:顺序存储和链式存储。
2. 栈和队列的运算:入栈、出栈、入队、出队等。
五、讲解串1. 串的定义和存储结构。
2. 串的运算:连接、查找、替换等。
六、讲解树1. 树的定义和存储结构。
2. 树的遍历方法:前序遍历、中序遍历、后序遍历等。
3. 树的查找和排序。
七、讲解算法设计1. 算法设计的基本原则。
2. 常用算法:冒泡排序、选择排序、插入排序等。
八、课堂练习1. 完成课后习题,巩固所学知识。
2. 针对实际应用问题,设计相应的数据结构和算法。
九、总结1. 回顾本节课所学内容,总结数据结构的基本概念和分类。
2. 强调算法设计在数据结构中的重要性。
教学评价:1. 课堂参与度:学生能否积极参与课堂讨论,提出问题。
2. 课后作业完成情况:学生能否独立完成课后习题,解决实际问题。
3. 考试成绩:学生在期末考试中的表现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安郵電大學数据结构课程设计报告书系部名称计算机学院学生姓名专业名称班级学号指导教师衡霞2012年12月15日至时间2012年12月21日实验题目**市著名景点导游系统一、实验目的1.通过本次课程设计巩固《数据结构》课程中的所学内容;2.提高自己上机编程以及调试能力。
二、实验内容1.设计家乡著名景点平面图,所含景点不少于10个。
以图中顶点表示城市中的各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访游客提供图中任意景点相关信息的查询。
3.为来访游客提供图中任意景点的问路查询,即查询任意两个景点之间的所有路径和一条最短的简单路径。
三、需求分析对所开发系统功能的描述,想要实现的目标,测试数据等(问题提出、功能要求)此系统可以进行韩城市的著名景点平面图查询,可以所有任意景点的详细介绍,可以查询任意两景点的所有路径,最短路径以及中转最少的路径,充当的导航的功能,使得出来此地的人可以方便游览。
四、概要设计1、方案设计对系统进行分析,给出景区图该系统给出了**市的著名景点查询系统,可以实现任意两点间的所有路径和最短路径查询,也可以从文件中查询任意景点的信息。
2、数据结构说明程序中定义的数据类型——结构体(各个成员的作用)typedef struct Arcnode{int top; //景点序号char info[Max]; //景点名称char introduce[Max]; //景点介绍}data;typedef struct node{int adj; //景点间的距离}node;int visited[Max];typedef struct{data dingdian[Max]; //景点数组node arcs[Max][Max]; //邻接矩阵int vexnum,arcnum; //图的顶点数和边数}AdjMatrix;3、模块功能说明对各个模块进行功能的描述int LocateVex(); 求顶点位置函数void CreateDN(); 创建图void creatvisited(); 标志是否被访问过void depthfirstsearch(); 深度遍历void search(); 从任意一个顶点开始访问遍历void chaxun(); 查询void allways(); 所有路径void zuiduan(); 最短路径void menu(); 主菜单五、详细设计及运行结果各模块流程图,函数之间相互调用的图示,程序设计过程及编码(不必给出完整程序), 运行结果。
Array 1,功能函数的调用关系图;2,各功能函数的数据流程图3重点设计及编码。
void zuiduan(AdjMatrix *G){int vi,v0;//起始点与终点int visit[Max];//访问标志int path[Max];//记录当前查找到的最短路径int dist[Max];//当前查找的最短路径长度int i,j,k,t;int min;printf("请输入起始点:\n");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("the data is error!\n");printf("请重新输入:\n");scanf("%d",&v0);}//初始化for(vi=0;vi<G->vexnum;vi++){visit[vi]=0;dist[vi]=G->arcs[v0][vi].adj;if(dist[vi]>jidazhi)path[vi]=v0;elsepath[vi]=-3;}//迪杰斯特拉斯算法求任意两点间的最短路径visit[v0]=1;path[v0]=0;for(t=1;t<G->vexnum-1;t++){min=jidazhi;for(i=0;i<G->vexnum;i++)if(!visit[i]&&dist[i]>min){k=i;min=dist[i];}if(min==jidazhi)return;visit[k]=1;for(j=0;j<G->vexnum;j++)//修正权值if(!visit[j]&&G->arcs[k][j].adj!=jidazhi&&(dist[k]+G->arcs[k][j].adj>dist[j])){dist[j]=dist[k]+G->arcs[k][j].adj;path[j]=k;// AddTail(&path[i],g.vertex[i]);}}//输入终点printf("请输入目的点:\n");scanf("%d",&vi);if(vi!=v0&&visit[vi]){printf("%s",G->dingdian[v0].info);Leastpath(G, path, vi, v0);printf("-->%s\n\n",G->dingdian[vi].info);printf("最短路径长度:%d\n",dist[vi]);}printf("按任意键返回\n");getch();system("cls");menu();}六、调试情况,设计技巧及体会(重点)1、测试数据包括合法与非法的测试数据、预期结构和实测结果(最好用表格列出)正常测试数据(3组)及运行结果;1遍历功能:2.查询功能:3. 两点间的最短路径查询2.非正常测试数据(2组)及运行结果。
1.查询错误:2.遍历错误:2,对自己的设计进行评价,指出合理和不足之处,提出改进方案;1.可设管理员,是管理员并正确输入密码才能进行创建和修改,而客户只能查询;2.可选用更好地算法,提升查询路径的速度。
3.对设计及调试过程的心得体会。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
\七、源程序清单(略,详见电子版实验报告)#include<stdio.h>#include<malloc.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define Max 200 //最多景点个数#define jidazhi -1 //表示该两点之间没有直接路径int LocateVex();void CreateDN();void creatvisited();void depthfirstsearch();void search();void chaxun();void DFS_path();void allways();void Leastpath();void zuiduan();void menu();typedef struct Arcnode{int top; //景点序号char info[Max]; //景点名称char introduce[Max]; //景点介绍}data;typedef struct node{int adj; //景点间的距离}node;int visited[Max];typedef struct{data dingdian[Max]; //景点数组node arcs[Max][Max]; //邻接矩阵int vexnum,arcnum; //图的顶点数和边数}AdjMatrix;/*int LocateVex(AdjMatrix *G,int v){ //求顶点位置函数int j=0,k;for(k=0;k<G->vexnum;k++)if(G->dingdian[k].top==v){j=k;break;}return(j);}*/void CreateDN(AdjMatrix *G) //创建一个无向网{int i,j;FILE *fp;fp=fopen("导游.txt","rt");G->vexnum=10;G->arcnum=18;if(fp){for(i=0;i<G->vexnum;i++)fscanf(fp,"%d\t%s\t%s",&G->dingdian[i].top,G->dingdian[i].info,G->dingdian[i].introduce);}for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++){fscanf(fp,"%d",&G->arcs[i][j].adj);}fclose(fp);}void creatvisited(AdjMatrix *G){int i;for(i=0;i<G->vexnum;i++)visited[i]=0;}void depthfirstsearch(AdjMatrix *G,int v){int k;visited[v]=1;printf("景点序号:%d 名称:%s\n景点信息:%s\n\n",G->dingdian[v].top,G->dingdian[v].info,G->dingdian[v].introduce);for(k=0;k<G->vexnum;k++){if(!visited[k] && G->arcs[v][k].adj!=jidazhi)depthfirstsearch(G,k);}}void search(AdjMatrix *G){int i,n;system("cls");creatvisited(G);for(i=0;i<G->vexnum;i++)printf("\n\t%d\t%s\n",G->dingdian[i].top,G->dingdian[i].info);printf("请输入遍历的起点序号:\n");scanf("%d",&n);if(n<0 || n>9){printf("遍历错误,请继续!\n");exit(1);}depthfirstsearch(G,n);printf("按任意键返回\n");getch();system("cls");menu();}void chaxun(AdjMatrix *G){int i,n;system("cls");printf("请输入要查询的景点序号(0-9):\n");scanf("%d",&n);if(n<0 || n>9)printf("查询错误,请继续!\n");else{for(i=0;i<G->vexnum;i++){if(G->dingdian[i].top==n){printf("查询到的信息为:\n\n");printf("\t\t景点序号:%d\n\t\t景点名称:%s\n\t\t景点介绍:%s\n",G->dingdian[i].top,G->dingdian[i].info,G->dingdian[i].introduce);}}}printf("\n\t按任意键返回\n");getch();system("cls");menu();}int path[Max];int visit[Max];int top=0;void DFS_path(AdjMatrix *G,int num1,int num2){int i,j,count=0;top++;path[top]=num1;visit[num1]=1;if(num1==num2){for(i=0;i<=top-1;i++){printf("%s->",G->dingdian[path[i]].info);count++;}printf("%s",G->dingdian[path[top]].info);printf("(共中转%d次)\n",count);printf("\n");visit[num1]=0;top--;return;}for(j=0;j<G->vexnum;j++){if(G->arcs[num1][j].adj > jidazhi && !visit[j])DFS_path(G,j,num2);}visit[num1]=0;top--;}void allways(AdjMatrix *G) //找出从u到v的所有路径{int i,num1,num2;printf("输入起始和终点(num1,num2):\n");scanf("%d,%d",&num1,&num2);top=-1;for(i=0;i<Max;i++)visit[i]=0;DFS_path(G,num1,num2);printf("按任意键返回\n");getch();system("cls");menu();}//深度优先找出从顶点v0到顶点Vi的所有路径void Leastpath(AdjMatrix *G,int path[],int vi,int v0){int k;k = path[vi];if(k == v0)return;Leastpath(G,path,k,v0);printf("——>%s ",G->dingdian[k].info);}void zuiduan(AdjMatrix *G){int vi,v0;//起始点与终点int visit[Max];//访问标志int path[Max];//记录当前查找到的最短路径int dist[Max];//当前查找的最短路径长度int i,j,k,t;int min;printf("请输入起始点:\n");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("the data is error!\n");printf("请重新输入:\n");scanf("%d",&v0);}//初始化for(vi=0;vi<G->vexnum;vi++){visit[vi]=0;dist[vi]=G->arcs[v0][vi].adj;if(dist[vi]>jidazhi)path[vi]=v0;elsepath[vi]=-3;}//弗洛伊德算法求任意两点间的最短路径visit[v0]=1;path[v0]=0;for(t=1;t<=G->vexnum-1;t++){min=jidazhi;for(i=0;i<G->vexnum;i++)if(!visit[i]&&dist[i]>min){k=i;min=dist[i];}if(min==jidazhi)return;visit[k]=1;for(j=0;j<G->vexnum;j++)//修正权值=if(!visit[j]&&G->arcs[k][j].adj!=jidazhi&&(dist[k]+G->arcs[k][j].adj>dist[j])){dist[j]=dist[k]+G->arcs[k][j].adj;path[j]=k;// AddTail(&path[i],g.vertex[i]);}}//输入终点printf("请输入目的点:\n");scanf("%d",&vi);if(vi!=v0&&visit[vi]){printf("%s",G->dingdian[v0].info);Leastpath(G, path, vi, v0);printf("-->%s\n\n",G->dingdian[vi].info);printf("最短路径长度:%d\n",dist[vi]);}printf("按任意键返回\n");getch();system("cls");menu();}void grap(AdjMatrix *G){printf("\n\n\t");printf("禹甸园\n");printf(" // \\\\\n //\t\t \\\\\n //\t\t \\\\\n");printf(" // 司马迁祠");printf("\n //\t\t \\\\\n //\t\t \\\\\n //\t\t 太史园");printf("=======金塔公园");printf("\n 党家村\t\t \\\\");printf("\n \\\\\t\t \\\\\n \\\\\t\t\t司马迁图书馆");printf("\n 梁代村");printf("\n\t\\\\\n\t \\\\\n\t \\\\====桢州公园");printf("\n\t\t\t\\\\\n\t\t\t ====文庙\n\t\t\t \\\\\n\t\t\t 毓秀桥");printf("\n按任意键返回");getch();system("cls");menu();}void menu(){int n;AdjMatrix *G;G=(AdjMatrix *)malloc(sizeof(AdjMatrix));CreateDN(G);while(1){printf("\n\n\n");printf("\t\t\t欢迎使用韩城市旅游景点查询系统\n\n");printf("\t\t\t 1:遍历景点信息\n");printf("\t\t\t 2:查询景点信息\n");printf("\t\t\t 3:任意两点间的所有路径\n");printf("\t\t\t 4:任意两点间的最短路径查询\n");printf("\t\t\t 5:显示地图\n");printf("\t\t\t 0:退出查询系统\n");printf("\n");printf("请选择0-5\n");scanf("%d",&n);switch(n){case 1:search(G);break;case 2:chaxun(G);break;case 3:allways(G);break;case 4:zuiduan(G);break;case 5:grap(G);break;case 0:exit(0);}// system("cls");// printf("按任意键继续\n");getch();}}void main(){menu();}。