数据结构课程设计

合集下载

数据结构的课程设计

数据结构的课程设计

数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。

3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。

技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。

2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。

3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。

情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。

2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。

3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。

本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。

通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。

在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。

2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。

3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。

4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。

5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。

6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。

7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。

数据结构课程设计完整版

数据结构课程设计完整版

通讯录操作系统一.需求分析当今时代是飞速发展的信息时代。

在各行各业中离不开信息管理以及处理,这正是计算机被广泛应用于管理系统的原因。

计算机管理的好处在于利用它能够进行信息储存以及信息编辑。

用计算机储存和控制,大大提高了工作效率也减少了好多人的工作量。

通讯录信息系统不仅仅帮助了人们记忆,同时也为不少管理者提供了方便。

其设计理念较简单,将传统的纸张与笔录方式改为计算机自动化进行通讯录信息管理,既省时间又提高工作效率。

用c语言构建的通讯录系统设计,通过课上学到一些关于结构体、数组、指针、函数以及循环函数的运用和字符串的处理等基本知识可以初步的实现通讯录的输入、显示、查找、删除等简单实用功能,给人们带来更多的方便。

通讯录信息系统的主要功能清单如下:1) 建立通讯录链表;2) 通讯者结点的插入(按编号的次序插入有序通讯录表);3) 通讯者信息的查询(按编号或姓名查找通讯者信息);4) 通讯者信息的删除(按编号或姓名删除通讯者信息);5) 通讯录的显示(显示所有通讯者信息列表);6) 通讯录信息系统的退出测试数据见调试分析。

二.详细设计算法分析:↓↓↓↓↓↓主函数流程图:主函数流程图创建函数流程图:显示通讯录流程图:查找函数流程图(1)find函数:find函数流程图(2)search函数Search函数流程图删除操作流程图:插入函数流程图:退出函数流程图:图11退出函数流程图3)调试分析及测试结果进入系统后,系统会出现图所示菜单:在主菜单中输入1后,系统会给出提示,如图所示:在主菜单中输入3后,输入要找的姓名。

在系统没有要找信息时或链表为空时,系统会给出提示,确认用户是否继续查找,如图所示:(链表为空时的查找)若要继续查找则按1 ,不是则按0,如图所示:(链表非空的查找)在主菜单中输入0后,系统会给出提示,提示用户输入相关信息,如图所示:依次输入提示信息输入信息:1wuyifeinv139********Wuhan2wwnv132********Wuhan再在主菜单输入1后,程序显示如图所示:在主菜单中输入2后输入要删除的编号,系统便自动删除要删除的通讯录信息,如图15所示:按1显示查看是否删除如图:输入4进行插入操作,如图所示:插入信息如下2wyfnv12345678912wuhan按1进行显示如下图:现在如果没有其他的操作则可按5退出,操作如图所示:实验心得:通过这次课程设计,我熟练的掌握了结构体、数组、指针、函数以及循环函数的运用和字符串的处理,了解代码中出现错误寻找错误的方法,初步了解到了一个完整的应用程序,应该如何处理美观与实用之间的关系,如何处理实际需求与操作难度之间的关系,并让我深刻了解到数据结构这门课的重要性和实用性,在以后的学习中,我将更加努力的学习并动手实践这门课程。

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。

作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。

一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。

2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。

3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。

4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。

5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。

二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。

1、图书信息和读者信息可以使用结构体数组来存储。

结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。

2、对于图书的分类和索引,可以使用二叉查找树或哈希表。

二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。

3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。

三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。

管理员可以进行所有操作,读者只能进行查询和借阅相关操作。

2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。

图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。

图书删除:按照指定条件删除图书记录。

图书查询:提供多种查询条件,快速检索图书信息。

数据结构课程设计(5篇)

数据结构课程设计(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. 性能分析:学生需要对设计的数据结构和算法进行性能分析,评估其时间复杂度和空间复杂度,并根据分析结果进行优化。

6. 测试与验证:学生需要设计充分的测试用例来验证程序的正确性和性能,确保解决方案的可行性和有效性。

二、设计方案1. 数组:数组是一种线性数据结构,可用于存储一组相同类型的数据。

在课设中,可以使用数组来实现各种结构和算法,如栈、队列、图等。

2. 链表:链表是一种动态数据结构,可用于解决插入和删除操作频繁的问题。

课设中的链表设计可以包括单链表、双链表、循环链表等。

3. 栈和队列:栈和队列是两种常用的数据结构,栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。

可以利用栈和队列解决许多实际问题。

4. 树:树是一种非线性数据结构,具有分层和层次结构。

可以使用二叉树、红黑树、AVL树等来解决与树相关的问题,如查找、排序、遍历等。

5. 图:图是一种复杂的数据结构,用于表示各种实际问题中的关系和连接。

可以使用邻接矩阵或邻接表来表示图,并利用图的各种算法解决相关问题。

6. 其他数据结构:除了上述常见的数据结构,还有许多其他数据结构可以应用于数据结构课设,如哈希表、堆、并查集等。

数据结构课程设计

数据结构课程设计

数据结构课程设计1. 引言数据结构是计算机科学中非常重要的一门课程,它研究将数据组织和存储在计算机中的方法。

为了更好地掌握数据结构的理论知识和实践能力,本课程设计将帮助学生深入了解和应用各种常见的数据结构。

2. 课程设计目标本课程设计的主要目标是帮助学生掌握以下内容:- 理解不同数据结构的特点和适用场景;- 掌握常见数据结构的实现原理和相关算法;- 能够灵活运用数据结构解决实际问题;- 培养学生的编程能力和问题解决能力。

3. 课程设计内容3.1 线性数据结构线性数据结构是数据元素之间存在一对一关系的数据结构,包括数组、链表、队列和栈等。

学生需要通过实例讲解和编程实践来理解它们的概念和实现方法,例如使用数组实现队列和栈等。

3.2 树形数据结构树形数据结构是一种重要的非线性数据结构,包括二叉树、二叉搜索树、堆和哈希表等。

学生需要学习树的基本概念、遍历算法和相关实现方式,如平衡二叉树的调整和哈希函数的设计等。

3.3 图形数据结构图形数据结构是由节点和边组成的复杂数据结构,包括有向图和无向图等。

学生需要了解图的基本概念、图的遍历算法和最短路径算法等。

通过编程实践,学生可以实现常见的图算法,如深度优先搜索和广度优先搜索等。

4. 课程设计实践4.1 编程作业学生将通过完成一系列编程作业来应用所学的数据结构知识。

每个作业都与实际问题密切相关,例如实现一个通讯录管理系统,利用二叉搜索树实现一个字典等。

通过这些作业,学生将深入理解数据结构的应用和实现。

4.2 小组项目学生将分组进行一个小组项目,用于解决一个与数据结构相关的实际问题。

例如,通过利用图算法实现地图导航系统,或者使用哈希表进行文本搜索和替换等。

这些项目将要求学生合作解决问题,提高他们的团队合作能力和创新能力。

5. 课程设计评估为了评估学生对数据结构的掌握程度,将进行以下评估方式:- 编程作业的完成情况和代码质量;- 小组项目的展示和实际应用效果;- 期末考试,包括理论知识和问题解决能力的考察。

数据结构刘畅课程设计

数据结构刘畅课程设计

数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。

2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。

3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。

技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。

2. 培养良好的编程习惯,提高代码编写和调试能力。

3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。

情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。

2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。

3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。

本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。

课程目标具体、可衡量,便于教师进行教学设计和评估。

通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。

二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。

- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。

- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。

2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。

- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。

- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。

3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。

- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。

- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。

数据结构课程设计目录及正文

数据结构课程设计目录及正文

数据结构课程设计目录及正文一、课程设计目的数据结构是计算机科学中的一门重要基础课程,通过课程设计,旨在让学生更深入地理解和掌握数据结构的基本概念、原理和算法,并能够将其应用到实际问题的解决中。

培养学生的问题分析能力、算法设计能力、程序编写能力和调试能力,提高学生的综合素质和创新能力。

二、课程设计要求1、学生需独立完成课程设计任务,不得抄袭他人成果。

2、课程设计应具有清晰的结构和良好的可读性,代码规范,注释详细。

3、选择合适的数据结构和算法解决给定的问题,并对算法的时间复杂度和空间复杂度进行分析。

4、完成课程设计报告,包括问题描述、算法设计、程序实现、测试结果和总结等内容。

三、课程设计题目1、图书管理系统实现图书的添加、删除、查询、修改等功能。

按照图书的分类、作者、书名等进行排序和查找。

2、学生成绩管理系统录入学生的成绩信息,包括学号、姓名、课程名称、成绩等。

计算学生的平均成绩、总成绩,并按照成绩进行排序。

3、公交线路查询系统建立公交线路的网络模型。

实现站点之间的最短路径查询和换乘方案查询。

4、停车场管理系统模拟停车场的车辆进出管理。

计算停车费用,显示停车场的当前状态。

四、课程设计目录1、引言2、需求分析问题描述功能需求数据需求性能需求3、总体设计系统架构模块划分数据结构设计4、详细设计模块功能描述算法设计界面设计5、编码实现代码框架关键代码实现6、测试与调试测试用例测试结果调试过程7、总结课程设计的收获遇到的问题及解决方法对数据结构课程的进一步理解8、参考文献9、附录源程序代码五、正文内容(一)引言随着信息技术的不断发展,计算机在各个领域的应用越来越广泛。

数据结构作为计算机科学的重要基础,对于提高程序的效率和质量起着至关重要的作用。

本次课程设计旨在通过实际项目的开发,让学生将所学的数据结构知识运用到实践中,提高解决实际问题的能力。

(二)需求分析1、问题描述以图书管理系统为例,系统需要对图书馆中的图书进行有效的管理,包括图书的基本信息(书名、作者、出版社、出版日期、ISBN 号等)、图书的库存数量、借阅状态等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录1.需求分析 .......................................... 错误!未定义书签。

2.概要设计 .......................................... 错误!未定义书签。

3.详细设计 . (2)4.调试分析 (4)5.使用说明 (4)6.心得体会 (6)附录:源程序清单 (7)校园导航问题摘要:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径关键字:校园景点最短路径一、需求分析本次实验设计的任务是实现一个南京信息工程大学的校园导航平面图。

设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)。

本课题实现校园多个场所(至少10个)的最短路径求解。

(1)输入的形式和输入值的范围:本系统主要数据类型为字符型char及整形int,char型主要包括单位编号,单位名称,单位简介,功能编号;输入功能编号与单位编号进行操作。

(2)输出的形式:输出则通过已有的信息数据,通过相关的操作输出相应信息。

(3)程序所能达到的功能:本程序可供任何人使用,主要功能1.浏览各单位及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看某一单位信息。

(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

二、概要设计本系统包含一个文件。

设计分有菜单,显示信息,弗洛伊德算法,迪杰斯特拉算法,查找景点信息等程序段。

主程序为整系统的入口处,菜单主要实现显示系统功能,显示信息主要实现显示景点信息,弗洛伊德算法主要实现求两景点之间最短路径,迪杰斯特拉算法实现求两景点之间最短路径,查找景点信息主要实现显示某一景点信息。

系统首先通过主程序调用void main( );进入系统主菜单函数,根据用户的选择可分别进入:1.浏览各景点及简介;2.查看所有游览路线;3.选择出发点和目的地求出最佳路径;4.查看景点信息;5.退出系统。

选择“浏览各景点及简介”项,显示十个景点的有关信息,包括景点编号,景点名称,景点简介。

选择“查看所有游览路线”项,会进入输入起始景点编号的界面,输入正确编号后会显示起始景点到其余九个景点的最短路线的方案。

选择“选择出发点和目的地”项,会进入输入起始景点与目的景点的界面,输入起始景点与目的景点,并有空格隔开就得到两景点之间的最佳路径。

选择“查看景点信息”项,会进入输入要查看的景点的界面,如入后会显示该景点的有关信息。

选择“退出系统”项,就会退出程序。

三、详细设计0:大活1:宾馆2:明德楼3:校史馆4:老图书馆5:沁园6:食堂7:鸳鸯楼8:新食堂9:田径场10:新图书馆11:北辰楼12:电子楼2、主程序流程图:(3)弗洛伊德的算法:void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];//定义参数for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){cout<<"请输入出发点和目的地的编号(用空格隔开):";cin>>k>>j;if(k<0||k>G->vexnum||j<0||j>G->vexnum) //判断输入的景点编号正确与否{cout<<"景点编号不存在!请重新输入出发点和目的地的编号:";cin>>k>>j;}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}cout<<G->vexs[k].name; //输出景点名称for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u) //输出路线cout<<"-->"<<G->vexs[u].name;cout<<"-->"<<G->vexs[j].name;cout<<" 总路线长"<<D[k][j]<<endl; //输出总路线长度}四、调试分析在程序设计中遇到了输出景点信息的表不整齐,用setw()解决了;默认的界面太小,不能完整的看到输出信息,用了system("mode con: cols=100 lines=40")命令语句设置了行数和列数。

刚开始做系统缺乏全局观念,分工也不是很合理,做得很零碎,所以在组合的时候也出现了很多问题。

五、使用说明与测试结果打开系统,首先会进入系统的主菜单:1.浏览各景点及简介2.查看所有游览路线3.选择出发点和目的地4.查看景点信息5.退出系统用户可以进行如下操作:1、如果你想浏览各景点及简介的话,请输入“1”,并回车。

此时界面上将显示出各景点的编号、名称及其简介。

2、如果你想查看某一景点的所有游览路线,可选择2操作。

输入“2”,并回车。

此时,系统会提示你输入某景点的编号。

输入编号后,回车,便可以看到该景点的所有游览路线。

若输入的景点编号错误就会有提示重新输入。

3、如果你想查看两个景点之间的最短路线的,可选择3操作。

输入“3”,并回车。

此时,系统会提示你要输入起始景点与终点的编号。

输入编号后,回车,此时,便可以见到这两个景点之间的最短路径。

4、如果你想查看具体某些景点的简介及信息,可以选择4操作。

输入“4”,并回车。

此时,系统会提示全部景点的对应的编号,选择你要查看的景点信息,输入其编号,回车,此时,屏幕上将会显示出该景点的各种信息。

若输入的景点编号错误就会有提示重新输入。

5、在主菜单键入“5”,退出程序。

测试结果1、菜单界面2、进入“浏览各景点及简介”后,输出景点信息的界面。

3、进入“查看所有游览路线”,显示输出景点编号为0的景点到其余九个景点的最佳路线。

4、进入“选择出发点和目的地”,输入出发点2和目的点9后输出的的最佳路线的界面。

5、进入“查看景点信息”,输入要查看的景点编号,输出景点信息的界面。

6、输入要查询的景点编号错误,提示重新输入。

7、退出程序界面。

六、心得体会经过两个星期的课程设计实习,我从中学会了许多东西。

首先,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据集,编写大型程序的能力。

程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。

再总体解决大的问题。

这样做起来不仅有条理,也使问题可以得到轻松的解决。

,其次,通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。

需要多花时间上机练习。

这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。

最后,这次的课程设计使我对专业课的学习有了更加深刻的认识,曾以为现在学的知识用不上,就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。

我决定以后要加倍努力学好专业课,让自己的基础知识更扎实,同时不断提高自己的实践操作能力,为以后的工作学习打下坚实的基础。

总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的认识和理解。

参考文献:[1]《数据结构》(C语言版)作者:严蔚敏、吴伟民清华大学出版社[2]《C程序设计》(第二版)作者:谭浩强清华大学出版社[3]《数据结构题集》(C语言版)作者:严蔚敏、吴伟民、米宁清华大学出版社附录:源程序清单#define INFINITY 10000 /*无穷大*/#define MAX_VERTEX_NUM 40#define MAX 40#include<stdlib.h>#include<string.h>#include <iostream>using namespace std;#include <iomanip>typedef struct ArCell{int adj; //路径长度}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct //图中顶点表示主要景点,存放景点的编号、名称、简介等信息,{char name[30];int num;char introduction[100];//简介}infotype;typedef struct{infotype vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;MGraph InitGraph(void);void Menu(void);void Browser(MGraph *G);void ShortestPath_DIJ(MGraph * G);void Floyd(MGraph *G);void Search(MGraph *G);/***********************主函数*******************************/void main(void){system("color 1f");system("mode con: cols=100 lines=40");int i;b=InitGraph();Menu();cin>>i;while(i!=5){switch(i){case 1:system("cls");Browser(&b);Menu();break;case 2:system("cls");ShortestPath_DIJ(&b);Menu();break;case 3:system("cls");Floyd(&b);Menu();break;case 4:system("cls");Search(&b);Menu();break;case 5:exit(1);break;default:break;}cin>>i;}}/*************************************************************//*************************定义景点编号,名称及简介************/MGraph InitGraph(void){MGraph G;int i,j;G.vexnum=13; //十个景点G.arcnum=14; //邻接矩阵for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;//各景点的代码,名称及简介strcpy(G.vexs[0].name,"大活");strcpy(G.vexs[0].introduction," 大学生活动中心,举办各种活动的主要场所"); strcpy(G.vexs[1].name,"宾馆");strcpy(G.vexs[1].introduction," 可给开学时的家长提供便利,且价格优惠"); strcpy(G.vexs[2].name,"明德楼");strcpy(G.vexs[2].introduction,"学校的特色教学楼,共六层,可容纳多人");strcpy(G.vexs[3].name,"校史馆");strcpy(G.vexs[3].introduction,"学校历史资料的展览室");strcpy(G.vexs[4].name,"老图书馆");strcpy(G.vexs[4].introduction," 拥有全校机房,环境舒适");strcpy(G.vexs[5].name,"沁园");strcpy(G.vexs[5].introduction," 男生公寓");strcpy(G.vexs[6].name,"食堂");strcpy(G.vexs[6].introduction," 标准食堂,两层,清洁卫生");strcpy(G.vexs[7].name,"鸳鸯楼");strcpy(G.vexs[7].introduction," 男女混合公寓");strcpy(G.vexs[8].name,"新食堂");strcpy(G.vexs[8].introduction," 标准食堂,两层,清洁卫生");strcpy(G.vexs[9].name,"田径场");strcpy(G.vexs[9].introduction," 全新塑胶跑道,中间为人工草皮足球场,排球场和篮球场");strcpy(G.vexs[10].name,"新图书馆");strcpy(G.vexs[10].introduction," 藏书几十万册,设施良好,每层楼均有阅览室");strcpy(G.vexs[11].name,"北辰楼");strcpy(G.vexs[11].introduction," 计软院大一新生晚自习教室楼");strcpy(G.vexs[12].name,"电子楼");strcpy(G.vexs[12].introduction,"计软院的院办与学办");for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=INFINITY;// 各景点之间的距离,没有的均为无穷大G.arcs[0][1].adj=20;G.arcs[0][2].adj=20;G.arcs[1][5].adj=20;G.arcs[1][6].adj=30;G.arcs[2][3].adj=10;G.arcs[2][5].adj=30;G.arcs[3][4].adj=10;G.arcs[4][11].adj=10;G.arcs[5][6].adj=30;G.arcs[6][7].adj=10;G.arcs[7][8].adj=20;G.arcs[8][9].adj=10;G.arcs[9][10].adj=20;G.arcs[10][12].adj=100;G.arcs[11][12].adj=20;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;return G;}/******************************************************************************************* //********************************主菜单(显示输入提示)****************************************/void Menu(){cout<<" 南京信息工程大学导游图"<<endl;cout<<" ┏━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<" ┃ 1.浏览各景点及简介┃"<<endl;cout<<" ┃ 2.查看所有游览路线┃"<<endl;cout<<" ┃ 3.选择出发点和目的地┃"<<endl;cout<<" ┃ 4.查看景点信息┃"<<endl;cout<<" ┃ 5.退出系统┃"<<endl;cout<<" ┗━━━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<"Option-:";}/************************************显示景点编号、名称、简介****************************************/void Browser(MGraph *G){int v;cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}/********************迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点***********************/void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;while(flag){cout<<"请输入一个起始景点编号:";cin>>v0;if(v0<0||v0>G->vexnum){cout<<"景点编号不存在!请重新输入景点编号:";cin>>v0;}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=INFINITY;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) cout<<G->vexs[v0].name;for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0) cout<<"-->"<<G->vexs[w].name; t++;}if(t>G->vexnum-1&&v0!=v) cout<<" 总路线长"<<D[v]<<endl;}}/*********************************Floyd函数***************************************/void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10][10],D[10][10];cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<G->vexs[v].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w][u]=0;if(D[v][w]<INFINITY){p[v][w][v]=1;p[v][w][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w][i]=p[v][u][i]||p[u][w][i];}while(flag){cout<<"请输入出发点和目的地的编号(用空格隔开):";cin>>k>>j;if(k<0||k>G->vexnum||j<0||j>G->vexnum){cout<<"景点编号不存在!请重新输入出发点和目的地的编号:";cin>>k>>j;}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}cout<<G->vexs[k].name;for(u=0;u<G->vexnum;u++)if(p[k][j][u]&&k!=u&&j!=u)cout<<"-->"<<G->vexs[u].name;cout<<"-->"<<G->vexs[j].name;cout<<" 总路线长"<<D[k][j]<<endl;}//Floyd end/************************************查找景点*******************************************************/void Search(MGraph *G){int k,v,flag=1;cout<<"┏━━┳━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃"<<endl;for(v=0;v<G->vexnum;v++)cout<<"┃"<<G->vexs[v].num<<setw(5)<<"┃"<<G->vexs[v].name<<setw(10)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┛"<<endl;while(flag){cout<<"请输入要查询的景点编号:";cin>>k;if(k<0||k>G->vexnum){cout<<"景点编号不存在!请重新输入景点编号:";cin>>k;}if(k>=0&&k<G->vexnum)flag=0;}cout<<"┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃编号┃景点名称┃简介┃"<<endl;cout<<"┃"<<G->vexs[k].num<<setw(5)<<"┃"<<G->vexs[k].name<<setw(10)<<"┃"<<G->vexs[k].introduction<<setw(3)<<"┃"<<endl;cout<<"┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;}//Search end。

相关文档
最新文档