数据结构课程设计

合集下载

数据结构的课程设计

数据结构的课程设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据结构(JAVA)课程设计

数据结构(JAVA)课程设计

数据结构(JAVA)课程设计数据结构(JAVA)课程设计一、项目背景和目的1.1 项目背景这个课程设计是为了让学生在学习数据结构的过程中,能够运用所学的知识,实际完成一个具体的项目。

通过设计和实现一个基于JAVA的数据结构,帮助学生加深对数据结构的理解。

1.2 项目目的通过完成这个项目,学生将能够:- 熟悉和理解数据结构的基本概念和原则- 掌握JAVA编程语言的基本语法和使用方法- 设计和实现一个完整的数据结构,包括各种基本操作和功能- 加深学生对数据结构的应用和解决问题的能力二、项目需求和功能2.1 项目需求本项目需要实现一个基于JAVA的数据结构,可以包括但不限于以下需求:- 实现各种基本数据结构,如栈、队列、链表、树等- 提供基本的操作和功能,如插入、删除、查找、排序等- 可以处理各种不同类型的数据,如整数、字符、字符串等- 可以实现数据结构的可视化和交互功能- 提供良好的使用界面和用户体验2.2 功能划分根据项目需求,可以将功能分为以下几个部分:- 基本数据结构的实现:栈、队列、链表、树等- 数据结构的基本操作和功能:插入、删除、查找、排序等- 数据类型的处理:整数、字符、字符串等- 可视化和交互功能的实现- 用户界面和用户体验的设计三、项目实现和设计3.1 数据结构的实现在这一部分,需要具体实现各种基本的数据结构,包括但不限于栈、队列、链表、树等。

可以根据不同的数据结构,选择合适的实现方式和算法。

3.2 基本操作和功能的实现在这一部分,需要实现数据结构的基本操作和功能,如插入、删除、查找、排序等。

可以根据具体的需求,选择合适的算法和方法。

3.3 数据类型的处理在这一部分,需要实现对不同类型数据的处理功能,如整数、字符、字符串等。

可以考虑使用面向对象的思想,设计合适的类和方法。

3.4 可视化和交互功能的实现在这一部分,需要实现数据结构的可视化和交互功能,可以考虑使用图形界面或者命令行界面,提供友好的用户界面和用户体验。

《数据结构》课程整体教学设计

《数据结构》课程整体教学设计

《数据结构》课程整体教学设计数据结构课程整体教学设计一、引言数据结构是计算机科学中的一门重要课程,它是计算机程序设计的基础。

本文旨在设计一套整体教学方案,以帮助学生全面理解数据结构的概念、原理和应用,并培养学生的问题分析和解决能力。

二、教学目标1. 理解数据结构的基本概念,如数组、链表、栈、队列、树、图等。

2. 掌握各种数据结构的实现方式,包括顺序存储和链式存储。

3. 熟悉数据结构的基本操作,如插入、删除、查找、排序等。

4. 理解算法与数据结构之间的关系,能够灵活地选择适合的数据结构解决实际问题。

5. 培养学生的团队协作和沟通能力,通过小组项目实践提升实际应用能力。

三、教学内容及安排1. 基础知识教学(2周)a) 介绍数据结构的定义、分类和基本概念。

b) 详细讲解数组、链表、栈和队列的基本原理和实现方法。

c) 引导学生通过编程实践掌握基础数据结构的使用。

2. 高级数据结构教学(3周)a) 介绍树、图等高级数据结构的定义和应用场景。

b) 分析树、图的特点和基本操作,包括遍历、搜索和最短路径等算法。

c) 引导学生通过实例理解和实现高级数据结构及其相关算法。

3. 算法与数据结构的关系(1周)a) 介绍算法的基础概念,如时间复杂度和空间复杂度。

b) 分析常用算法与数据结构之间的关系,如排序算法与数组、查找算法与树等。

c) 培养学生运用不同数据结构解决实际问题的能力。

4. 小组项目实践(4周)a) 学生自行组成小组,选定一个实际问题进行分析和解决方案设计。

b) 引导学生选择合适的数据结构和算法,实现项目需求。

c) 指导学生撰写项目报告,总结项目经验和收获。

四、教学方法与策略1. 合理运用多媒体技术,辅助教学内容的讲解和演示。

2. 结合示例和实践,引导学生进行课堂互动和编程实践。

3. 组织小组合作学习,促进学生的团队协作和沟通能力。

4. 鼓励学生积极参与讨论和提问,激发学习兴趣和思考能力。

5. 提供适当的学习资源和参考资料,帮助学生进行自主学习。

数据结构课程设计(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. 掌握各类数据结构的存储表示方法,以及基本操作算法的实现。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够设计和实现小型算法程序。

2. 培养学生运用递归思想解决问题的能力,掌握递归算法的设计与实现。

3. 提高学生的编程实践能力,通过实验和项目练习,熟练运用所学数据结构进行程序设计。

情感态度价值观目标:1. 培养学生积极探究数据结构相关知识的学习兴趣,激发学生的学习热情和主动性。

2. 培养学生的团队协作精神,通过小组讨论和实践项目,提高沟通与协作能力。

3. 培养学生具备良好的程序设计素养,遵循编程规范,注重代码质量和性能优化。

课程性质:本课程为计算机专业核心课程,旨在使学生掌握数据结构的基本理论、方法和技能,为后续算法分析、软件工程等课程打下坚实基础。

学生特点:大学二年级学生,已具备一定的编程基础和算法知识,具备独立思考和学习的能力。

教学要求:结合课程特点和学生实际,注重理论与实践相结合,强调学生动手实践,培养学生解决实际问题的能力。

在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。

通过本课程的学习,使学生能够具备扎实的理论基础和较强的实践能力,为未来从事计算机相关领域工作打下坚实基础。

二、教学内容本课程教学内容主要包括以下几部分:1. 数据结构基本概念:介绍数据结构的基本概念、分类及其应用场景,分析不同数据结构的特点。

- 教材章节:第1章 数据结构绪论- 内容列举:线性结构、非线性结构、抽象数据类型等。

2. 线性表:讲解线性表的定义、存储表示(顺序存储、链式存储),以及基本操作(插入、删除、查找等)。

- 教材章节:第2章 线性表- 内容列举:顺序表、链表、栈、队列等。

数据结构课程设计python

数据结构课程设计python

数据结构课程设计python一、课程目标知识目标:1. 理解数据结构的基本概念,掌握常用数据结构如列表、元组、字典和集合的特点及应用场景。

2. 学习并掌握栈和队列的操作原理及其在Python中的实现方法。

3. 掌握树和图的基本概念,了解二叉树、遍历算法及图的表示方法。

技能目标:1. 能够运用Python语言实现基本数据结构,并对其进行增、删、改、查等操作。

2. 能够利用栈和队列解决实际问题,如递归、函数调用栈、任务调度等。

3. 能够运用树和图解决实际问题,如查找算法、路径规划等。

情感态度价值观目标:1. 培养学生严谨的逻辑思维,提高分析问题和解决问题的能力。

2. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。

3. 引导学生认识到数据结构在实际应用中的重要性,增强学习热情和责任感。

课程性质:本课程为高年级数据结构课程,旨在使学生掌握Python语言实现数据结构的方法,提高编程能力和解决问题的能力。

学生特点:学生具备一定的Python编程基础,具有较强的逻辑思维能力,对数据结构有一定的了解。

教学要求:结合实际案例,采用任务驱动法,引导学生通过实践掌握数据结构的基本原理和应用方法。

注重培养学生的动手能力和团队协作精神,提高学生的综合素质。

通过本课程的学习,使学生能够具备独立设计和实现小型项目的能力。

二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,结合Python语言特点,分析各类数据结构在实际应用中的优势。

- 列表、元组、字典和集合的原理与应用- 栈与队列的操作原理及实现2. 线性表:讲解线性表的概念,重点掌握顺序表和链表的操作方法。

- 顺序表和链表的实现及操作- 线性表的查找和排序算法3. 树与二叉树:介绍树的基本概念,重点讲解二叉树的结构及其遍历算法。

- 树的基本概念和表示方法- 二叉树的性质、存储结构、遍历方法4. 图:讲解图的基本概念,掌握图的存储结构及遍历方法。

- 图的基本概念和表示方法- 图的遍历算法(深度优先搜索、广度优先搜索)- 最短路径和最小生成树算法5. 算法分析与设计:结合实例,分析算法性能,掌握基本的算法设计方法。

数据结构课程设计

数据结构课程设计

数据结构课程设计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. 树与二叉树:讲解树的基本概念、二叉树的性质、遍历方法以及常见的树结构,如二叉排序树、平衡二叉树等。

教材章节:第三章《树与二叉树》4. 图:介绍图的基本概念、存储结构、遍历方法以及最短路径、最小生成树等算法。

教材章节:第四章《图》5. 查找与排序:讲解常见的查找算法(如二分查找、哈希查找等)和排序算法(如冒泡排序、快速排序等)的原理和实现。

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

西安文理学院软件学院课程设计报告设计名称:数据结构课程设计设计题目:对给定的图结构和起点,深度优先搜索学生学号:1402120324专业班级:12级软工3班学生姓名:孙晓发学生成绩:指导教师(职称):任强(讲师)课题工作时间:2014.6.16 至2014.6.27说明:1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个学生。

2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。

3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律按不及格处理。

答辩由指导教师实施。

4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设计的情况另行规定。

5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按不及格处理。

软件学院课程设计任务书[1]程杰.指导教师:院长:日期:2014年6月16日软件学院课程设计进度安排表学生姓名:孙晓发学号:1402120324 专业:软件工程班级:12级3班指导教师签名:2014年6月16日成绩评定表学生姓名:孙晓发学号:1402120324 专业:软件工程班级:12级3班摘要摘要:深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

本次程序目的在于实现对于给定图结构和起点,产生其所有深度优先遍历序列。

本程序将采用图的邻接矩阵的存储方法,用C语言实现遍历的全过程。

关键词:C语言;图的遍历;邻接矩阵存储;深度优先遍历目录摘要 (VI)第一章课题背景 (1)1.1 背景 (1)1.2 目的 (1)第二章设计简介及设计方案论述 (2)2.1设计思路及方案 (2)第三章详细设计 (3)3.1创建邻接矩阵 (3)3.1.1利用二维数组来创建邻接矩阵 (3)3.2创建图 (4)3.3深度优先遍历 (4)第四章设计结果及分析 (5)4.1结果 (5)4.2分析 (5)总结 (8)参考文献 (9)附录(代码) (10)第一章课题背景1.1 背景图是一种比树更为复杂的非线性结构。

在树状结构中,结点间具有分层次关系每一层上的结点只能和上一层中的至多一个结点相关,但是可能和下一层的多个结点相关。

而在图中,任意两个结点之间可能相关,既结点之间的邻接关系可以是任意的。

因此,常用图状结构来描述各种复杂的数据对象,在自然科学、社会科学和人文科学等许多领域有着非常广泛的应用。

深度优先搜索是一种在开发爬虫早期使用较多的方法。

它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。

在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。

深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML 文件中的其他超链。

当不再有其他超链可选择时,说明搜索已经结束。

1.2 目的涉及到数据结构遍会涉及到对应存储方法的遍历问题。

本次程序采用邻接矩阵的存储方法,并且以深度优先实现遍历的过程得到其遍历序列。

深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

第二章 设计简介及设计方案论述2.1设计思路及方案设计流程如图:图2-1 设计流程利用二维矩阵创建邻接矩阵,同时还需要一个一维数组来存储顶点信息。

之后利用创建的邻接矩阵来创建图,最后用深度优先的方法来实现遍历。

图 2-2 原始图 1.从0开始,首先找到0的关联顶点32.由3出发,找到1;由1出发,没有关联的顶点。

3.回到3,从3出发,找到2;由2出发,没有关联的顶点。

4.回到4,出4出发,找到1,因为1已经被访问过了,所以不访问。

所以最后顺序是0,3,1,2,4第三章详细设计3.1创建邻接矩阵3.1.1利用二维数组来创建邻接矩阵:int main(void){//动态创建存放边的二维数组int(*edge)[VERTEXNUM]=(int(*)[VERTEXNUM])malloc(sizeof(int)*VERTEXNUM*VERTEXNUM);int i,j;for(i=0;i<VERTEXNUM;i++){for(j=0;j<VERTEXNUM;j++){edge[i][j] = 0;}}邻接矩阵还需要一个一维数组来存储各个顶点的信息,以便于在后面遍历的过程中判断该顶点是否已遍历过:int* vertexStatusArr = (int*)malloc(sizeof(int)*VERTEXNUM); for(i=0;i<VERTEXNUM;i++){vertexStatusArr[i] = 0;}printf("after init:\n");displayGraph(edge);创建图:createGraph(edge,0,3);createGraph(edge,0,4);createGraph(edge,3,1);createGraph(edge,3,2);createGraph(edge,4,1);printf("after create:\n");displayGraph(edge);深度优先遍历声明:DFT(edge,vertexStatusArr);free(edge);return 0;}3.2创建图因为创建的图必须与一维数组的标志相符合,因此此函数已在前面声明并确定,在这里试对于二维数组正确性的判断,以方便在前面的应用:void createGraph(int (*edge)[VERTEXNUM], int start, int end){edge[start][end] = 1;}打印存储的图void displayGraph(int (*edge)[VERTEXNUM]){int i,j;for(i=0;i<VERTEXNUM;i++){for(j=0;j<VERTEXNUM;j++){printf("%d ",edge[i][j]);}printf("\n");}}3.3深度优先遍历void DFT(int (*edge)[VERTEXNUM], int* vertexStatusArr){printf("start BFT graph:\n");int i;for(i=0;i<VERTEXNUM;i++){DFTcore(edge,i,vertexStatusArr);}printf("\n");}深度遍历并判断顶点是否被遍历过,对于未访问的邻接递归调用DFTcore:void DFTcore(int (*edge)[VERTEXNUM],int i,int* vertexStatusArr){if(vertexStatusArr[i] == 1){return;}printf("%d ",i);vertexStatusArr[i] = 1;int j;for(j=0;j<VERTEXNUM;j++){if(edge[i][j] == 1){DFTcore(edge, j, vertexStatusArr);}}}第四章设计结果及分析4.1结果结果如图所示:图4-1 运行结果4.2分析此程序的图如下:图4-2 原始图遍历从0开始,第一步到3图4-3 第一次遍历与3相连的有1和2,在此先遍历1图4-4 第二次遍历而与1相关的没有,则返回到3,与3相连的有1和2,1遍历过,所以遍历2图4-5 第三次遍历2没有与之相关的顶点返回3,3的所有相关都遍历过,返回0,只剩下4图4-6 第四次遍历与4相关的1已遍历过,返回0,0的所有相关都已遍历,则深度优先遍历结束。

遍历顺序:0 3 1 2 4总结本次课程设计是对上课内容的实践,由于大部分内容教材或上课都有讲过或提到,所以程序内容大多才用课本上的方法。

个别部分如有向图的定义部分教材上的程序逻辑复杂所以采用《大话数据结构》上的代码。

东挪西挪算是凑到了代码主体部分,后面则统一变量使代码成为一个完整的整体。

过程烦是烦了点,但是还是完成了设计及运行,经过本次设计对于课本内容的理解又得到一次加深,但是也暴漏出一些问题。

比如,代码是照抄的,不是很理解,所以在后面运行出错时变的束手无策,但是通过请教舍友及再次认真翻阅课本和资料,最终完成设计。

看来在学习的过程中态度是第一位的,认真并善于在恰当的时机请教他人,能提高自己的学习效率和更快的解决问题。

所以态度很重要!参考文献[1]程杰.大话数据结构[M].北京:清华大学出版社,2011[2]韩利凯、李军.数据结构[M].浙江:浙江大学出版社,2013[3]谢若阳.数据结构[M].北京:清华大学出版社,2010[4]黄国瑜、叶乃菁.数据结构[M].北京:清华大学出版社,2009附录(代码)#include <stdio.h>#include <malloc.h>#define VERTEXNUM 5void createGraph(int (*edge)[VERTEXNUM], int start, int end);void displayGraph(int (*edge)[VERTEXNUM]);void DFT(int (*edge)[VERTEXNUM],int* vertexStatusArr);void DFTcore(int (*edge)[VERTEXNUM],int i,int* vertexStatusArr);int main(void){//动态创建存放边的二维数组int (*edge)[VERTEXNUM] = (int (*)[VERTEXNUM])malloc(sizeof(int)*VERTEXNUM*VERTEXNUM);int i,j;for(i=0;i<VERTEXNUM;i++){for(j=0;j<VERTEXNUM;j++){edge[i][j] = 0;}}//存放顶点的遍历状态,0:未遍历,1:已遍历int* vertexStatusArr = (int*)malloc(sizeof(int)*VERTEXNUM); for(i=0;i<VERTEXNUM;i++){vertexStatusArr[i] = 0;}printf("after init:\n");displayGraph(edge);//创建图createGraph(edge,0,3);createGraph(edge,0,4);createGraph(edge,3,1);createGraph(edge,3,2);createGraph(edge,4,1);printf("after create:\n");displayGraph(edge);//深度优先遍历DFT(edge,vertexStatusArr);free(edge);return 0;}//创建图void createGraph(int (*edge)[VERTEXNUM], int start, int end){edge[start][end] = 1;}//打印存储的图void displayGraph(int (*edge)[VERTEXNUM]){int i,j;for(i=0;i<VERTEXNUM;i++){for(j=0;j<VERTEXNUM;j++){printf("%d ",edge[i][j]);}printf("\n");}}//深度优先遍历void DFT(int (*edge)[VERTEXNUM], int* vertexStatusArr){printf("start BFT graph:\n");int i;for(i=0;i<VERTEXNUM;i++){DFTcore(edge,i,vertexStatusArr);}printf("\n");}void DFTcore(int (*edge)[VERTEXNUM],int i,int* vertexStatusArr){ if(vertexStatusArr[i] == 1){return;}printf("%d ",i);vertexStatusArr[i] = 1;int j;for(j=0;j<VERTEXNUM;j++){if(edge[i][j] == 1){DFTcore(edge, j, vertexStatusArr);}}}PS代码来自于网络,非原创。

相关文档
最新文档