数据结构课设
- 格式:doc
- 大小:7.10 MB
- 文档页数:23
数据结构的课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。
2. 学会分析不同数据结构的存储方式和操作方法,并能运用到实际问题的解决中。
3. 掌握排序和查找算法的基本原理,了解其时间复杂度和空间复杂度。
技能目标:1. 能够运用所学数据结构知识,解决实际问题,提高编程能力。
2. 能够运用排序和查找算法,优化程序性能,提高解决问题的效率。
3. 能够运用数据结构知识,分析并解决复杂问题,培养逻辑思维能力和创新意识。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学习热情,形成主动探索和积极进取的学习态度。
2. 增强学生的团队协作意识,培养合作解决问题的能力,提高沟通表达能力。
3. 培养学生的抽象思维能力,使其认识到数据结构在计算机科学中的重要性,激发对计算机科学的热爱。
本课程针对高中年级学生,结合学科特点和教学要求,注重理论与实践相结合,培养学生的编程能力和逻辑思维能力。
通过本课程的学习,使学生能够掌握数据结构的基本知识,提高解决实际问题的能力,同时培养良好的学习态度和价值观。
在教学过程中,将目标分解为具体的学习成果,以便进行后续的教学设计和评估。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,重点讲解线性结构(线性表、栈、队列)和非线性结构(树、图)的特点。
2. 线性表:讲解线性表的顺序存储和链式存储结构,以及相关操作(插入、删除、查找等)。
3. 栈和队列:介绍栈和队列的应用场景、存储结构及相关操作。
4. 树和二叉树:讲解树的定义、性质、存储结构,二叉树的遍历算法及线索二叉树。
5. 图:介绍图的定义、存储结构(邻接矩阵和邻接表)、图的遍历算法(深度优先搜索和广度优先搜索)。
6. 排序算法:讲解常见排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理、实现及性能分析。
7. 查找算法:介绍线性查找、二分查找等查找算法的原理及实现。
数据结构课程设计学生信息管理系统学生信息管理系统是一种用于管理学生信息的软件系统。
它主要用于学校、教育机构或者其他组织中的学生信息管理工作。
该系统可以匡助学校或者教育机构高效地采集、存储和管理学生的个人信息、学籍信息、成绩信息等。
一、系统架构学生信息管理系统通常由前端界面、后端数据库和服务器组成。
1. 前端界面:提供给用户使用的界面,包括学生信息录入、查询、修改和删除等功能。
界面设计应简洁、直观,方便用户操作。
2. 后端数据库:用于存储学生信息的数据库,可以使用关系型数据库如MySQL或者非关系型数据库如MongoDB。
数据库应具备高效的读写能力和良好的数据结构设计,以提高系统的性能和稳定性。
3. 服务器:用于承载学生信息管理系统的运行,包括前端界面的展示和与后端数据库的交互。
服务器应具备高并发处理能力,以应对大量用户同时访问的情况。
二、功能需求学生信息管理系统应具备以下功能:1. 学生信息录入:提供学生信息的录入界面,包括学生姓名、性别、出生日期、联系方式等基本信息的录入。
2. 学生信息查询:提供学生信息的查询功能,可以根据学生姓名、学号、班级等条件进行查询,并展示查询结果。
3. 学生信息修改:提供学生信息的修改功能,可以根据学生学号或者其他惟一标识符进行信息的修改。
4. 学生信息删除:提供学生信息的删除功能,可以根据学生学号或者其他惟一标识符进行信息的删除。
5. 学生成绩管理:提供学生成绩的录入、查询、修改和删除功能,可以根据学生学号或者其他惟一标识符进行成绩信息的管理。
6. 学生信息统计:提供学生信息的统计功能,可以统计学生的人数、男女比例、年龄分布等信息,并以图表形式展示。
7. 用户权限管理:提供不同用户角色的权限管理功能,如管理员、教师和学生等角色,不同角色具有不同的系统访问权限。
三、数据结构设计为了高效地存储和管理学生信息,需要设计合适的数据结构。
1. 学生信息表:用于存储学生的基本信息,包括学生学号、姓名、性别、出生日期、联系方式等字段。
《数据结构》课程标准一、课程性质与目标数据结构是计算机科学的核心课程,旨在培养学生掌握数据结构的基本概念、基本原理和基本方法,提高学生的程序设计能力和问题解决能力。
本课程的学习目标包括:1. 了解数据结构的基本概念,掌握常见数据结构的特性和实现方法;2. 掌握各种数据结构的运算和操作,能够灵活运用各种数据结构解决实际问题;3. 培养抽象思维和问题解决能力,提高编程技巧和团队合作能力。
二、课程教学内容与要求本课程的教学内容包括:线性结构(如数组、链表、栈、队列等)、树形结构(如二叉树、多叉树等)、图状结构(如邻接表、邻接矩阵等)、集合(如排序、查找等)以及动态规划、贪心算法等算法原理和应用。
在教学过程中,应注重以下要求:1. 强调基本概念和原理的理解,避免单纯记忆;2. 结合实际问题讲解数据结构的用途和应用,提高学生的兴趣和实际应用能力;3. 培养学生的创新思维和问题解决能力,鼓励学生运用多种方法解决问题;4. 强调团队合作,培养学生的协作精神和沟通能力。
三、课程教学方法与手段为了提高教学效果,可以采用多种教学方法和手段:1. 理论讲解与实践操作相结合,通过实例演示和代码实现帮助学生理解数据结构和算法原理;2. 课堂互动,鼓励学生提问和讨论,增强师生互动和交流;3. 引入案例教学和项目实践,通过实际问题的解决提高学生的应用能力和团队合作能力;4. 利用多媒体教学资源,包括视频、图片、课件等,丰富教学手段,提高教学效果。
四、课程评估标准与方式本课程的评估标准包括平时作业、项目实践、期末考试等形式。
具体要求如下:1. 平时作业:根据教学内容布置适量作业,检测学生对基本概念和原理的理解情况;2. 项目实践:要求学生分组完成一个实际问题的解决,锻炼学生的应用能力和团队合作能力;3. 期末考试:采用闭卷考试形式,检测学生对数据结构和算法原理的掌握情况。
五、课程资源与支持为了方便学生的学习和教师的教学,可以提供以下资源与支持:1. 课件、视频等多媒体教学资源;2. 习题库和答案解析,方便学生自学和练习;3. 答疑和辅导,为学生提供学习支持和问题解答;4. 课程网站和论坛,方便学生交流和讨论。
高职计算机专业《数据结构》课程教学设计【摘要】本文主要介绍了高职计算机专业《数据结构》课程的教学设计。
在引言部分中,背景介绍了数据结构在计算机领域的重要性,教学目标明确了学生需要掌握的知识和能力。
在详细介绍了课程内容安排、教学方法选择、教学资源支持、课程评价方式以及教学效果分析。
在总结了教学过程中的反思和教学效果的评估,展望了未来对课程教学的进一步优化和改进。
通过本文的介绍,读者可以更加全面地了解高职计算机专业《数据结构》课程的教学设计和实施,为提高教学质量和学生学习效果提供参考和借鉴。
【关键词】数据结构、高职计算机专业、课程设计、教学目标、课程内容安排、教学方法、教学资源、课程评价、教学效果、总结反思、未来展望。
1. 引言1.1 背景介绍数据结构是计算机科学与技术专业中非常重要的一门课程。
随着信息技术的飞速发展,数据结构的学习和应用变得愈发重要。
在当今社会,数据已经成为无法或缺的资源之一,对数据的处理和管理要求越来越高,而数据结构作为数据的存储、组织和管理方式的基础,因此越来越受到重视。
传统的数据结构课程主要包括线性表、树、图等基本数据结构的基本概念和操作,以及相关的算法设计和分析等内容。
通过学习数据结构,学生可以更好地理解数据的存储和组织方式,提高编程能力和解决问题的能力。
在高职计算机专业中,《数据结构》课程的教学具有重要意义。
通过本课程的学习,可以培养学生对数据结构的理解和运用能力,提高其分析和解决问题的能力,为其日后从事计算机相关工作打下扎实的基础。
高职计算机专业的《数据结构》课程教学设计应该紧跟时代发展的步伐,注重学生的实际需求和能力培养,为他们的学习和发展提供有力支持。
1.2 教学目标明确教学目标明确是《数据结构》课程设计的重要组成部分,通过对教学目标的明确制定,可以帮助教师和学生更好地理解课程的重点和方向,从而提高教学效果。
在设计高职计算机专业《数据结构》课程时,我们需要明确以下教学目标:1. 理解数据结构的基本概念和原理,包括各种数据结构的定义、特点、操作和应用场景。
数据结构的课程设计目的一、课程目标知识目标:1. 掌握数据结构的基本概念,包括线性结构(如数组、链表、栈、队列)和非线性结构(如树、图等)的特点与应用。
2. 学会分析不同数据结构在存储和处理数据时的效率,理解时间复杂度和空间复杂度的概念。
3. 掌握常见数据结构的具体实现方法,并能够运用到实际编程中。
技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够根据问题的特点选择合适的数据结构进行优化。
2. 提高学生的编程实践能力,使其能够熟练编写与数据结构相关的程序代码,并进行调试与优化。
3. 培养学生独立思考和团队协作的能力,通过项目实践和课堂讨论,提高问题分析、解决方案的设计与实现能力。
情感态度价值观目标:1. 培养学生对数据结构学科的兴趣,激发学生的学习热情和主动探究精神。
2. 培养学生严谨、细致、踏实的学术态度,使其认识到数据结构在计算机科学与软件开发领域的重要性。
3. 培养学生具备良好的团队合作精神,学会倾听、沟通、表达与协作,提高人际交往能力。
课程性质:本课程为计算机科学与技术及相关专业的基础课程,旨在培养学生的数据结构知识和编程技能,提高学生解决实际问题的能力。
学生特点:学生已具备一定的编程基础,具有一定的逻辑思维能力和问题解决能力,但可能对数据结构的应用和实现方法了解不足。
教学要求:结合学生特点,课程设计应注重理论与实践相结合,以案例驱动、项目导向的教学方法,引导学生掌握数据结构知识,提高编程实践能力。
同时,注重培养学生的情感态度价值观,使其在学习过程中形成积极的学习态度和良好的团队协作精神。
通过具体的学习成果评估,确保课程目标的达成。
二、教学内容1. 线性结构:- 数组:数组的概念、存储方式、应用场景。
- 链表:单链表、双向链表、循环链表的概念及实现。
- 栈与队列:栈的概念、应用场景、实现方法;队列的概念、应用场景、实现方法。
2. 非线性结构:- 树:树的概念、二叉树、二叉查找树、平衡树(如AVL树)、堆的概念及其应用。
《数据结构》课程整体教学设计数据结构课程整体教学设计一、引言数据结构是计算机科学中的一门重要课程,它是计算机程序设计的基础。
本文旨在设计一套整体教学方案,以帮助学生全面理解数据结构的概念、原理和应用,并培养学生的问题分析和解决能力。
二、教学目标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. 提供适当的学习资源和参考资料,帮助学生进行自主学习。
数据结构课程设计python一、课程目标知识目标:1. 理解数据结构的基本概念,掌握常用数据结构如列表、元组、字典和集合的特点及应用场景。
2. 学习并掌握栈和队列的操作原理及其在Python中的实现方法。
3. 掌握树和图的基本概念,了解二叉树、遍历算法及图的表示方法。
技能目标:1. 能够运用Python语言实现基本数据结构,并对其进行增、删、改、查等操作。
2. 能够利用栈和队列解决实际问题,如递归、函数调用栈、任务调度等。
3. 能够运用树和图解决实际问题,如查找算法、路径规划等。
情感态度价值观目标:1. 培养学生严谨的逻辑思维,提高分析问题和解决问题的能力。
2. 激发学生对数据结构和算法的兴趣,培养良好的编程习惯。
3. 引导学生认识到数据结构在实际应用中的重要性,增强学习热情和责任感。
课程性质:本课程为高年级数据结构课程,旨在使学生掌握Python语言实现数据结构的方法,提高编程能力和解决问题的能力。
学生特点:学生具备一定的Python编程基础,具有较强的逻辑思维能力,对数据结构有一定的了解。
教学要求:结合实际案例,采用任务驱动法,引导学生通过实践掌握数据结构的基本原理和应用方法。
注重培养学生的动手能力和团队协作精神,提高学生的综合素质。
通过本课程的学习,使学生能够具备独立设计和实现小型项目的能力。
二、教学内容1. 数据结构基本概念:介绍数据结构的概念、作用和分类,结合Python语言特点,分析各类数据结构在实际应用中的优势。
- 列表、元组、字典和集合的原理与应用- 栈与队列的操作原理及实现2. 线性表:讲解线性表的概念,重点掌握顺序表和链表的操作方法。
- 顺序表和链表的实现及操作- 线性表的查找和排序算法3. 树与二叉树:介绍树的基本概念,重点讲解二叉树的结构及其遍历算法。
- 树的基本概念和表示方法- 二叉树的性质、存储结构、遍历方法4. 图:讲解图的基本概念,掌握图的存储结构及遍历方法。
- 图的基本概念和表示方法- 图的遍历算法(深度优先搜索、广度优先搜索)- 最短路径和最小生成树算法5. 算法分析与设计:结合实例,分析算法性能,掌握基本的算法设计方法。
杭电数据结构课程设计一、课程目标知识目标:1. 学生能理解数据结构的基本概念,掌握线性表、栈、队列、树、图等常见数据结构的特点与应用。
2. 学生能描述各类数据结构的存储方式和操作方法,了解其时间复杂度和空间复杂度。
3. 学生能运用所学的数据结构知识解决实际问题,如排序、查找、最短路径等。
技能目标:1. 学生能运用编程语言(如C++、Java等)实现常见数据结构及其相关算法。
2. 学生能分析实际问题的数据特征,选择合适的数据结构进行问题求解。
3. 学生能通过课程项目实践,培养团队协作、沟通表达、问题解决等综合能力。
情感态度价值观目标:1. 学生对数据结构产生兴趣,认识到数据结构在计算机科学与软件开发中的重要性。
2. 学生在解决实际问题的过程中,培养积极探究、勇于创新的精神。
3. 学生通过团队协作,学会尊重他人、分享经验,提高沟通能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在培养学生掌握数据结构的基本知识、技能和素养。
学生特点:学生具备一定的编程基础和数学素养,具有较强的逻辑思维能力,但对数据结构的应用和实际操作能力有待提高。
教学要求:结合课程性质和学生特点,注重理论与实践相结合,强调动手实践和实际应用,提高学生的数据结构知识水平和问题解决能力。
通过课程目标分解,将知识、技能和情感态度价值观目标融入教学过程,为后续教学设计和评估提供依据。
二、教学内容1. 线性表:介绍线性表的定义、特点、存储结构(顺序存储、链式存储),以及线性表的相关操作(插入、删除、查找等)。
教材章节:第2章 线性表2. 栈与队列:讲解栈和队列的基本概念、存储结构及操作方法,分析其应用场景。
教材章节:第3章 栈与队列3. 树与二叉树:阐述树的基本概念、存储结构、遍历方法,重点讲解二叉树的性质、存储结构、遍历算法(前序、中序、后序)及二叉树的应用。
教材章节:第4章 树与二叉树4. 图:介绍图的定义、存储结构(邻接矩阵、邻接表),图的遍历算法(深度优先搜索、广度优先搜索),以及最短路径、最小生成树等算法。
数据结构课程设计实例100例1. 设计一个简单的栈数据结构。
2. 实现一个简单的队列数据结构。
3. 设计一个链表数据结构。
4. 实现一个二叉树数据结构。
5. 设计一个哈希表数据结构。
6. 实现一个图数据结构。
7. 设计一个堆数据结构。
8. 实现一个优先队列数据结构。
9. 设计一个有向图数据结构。
10. 实现一个循环链表数据结构。
11. 设计一个红黑树数据结构。
12. 实现一个字典数据结构。
13. 设计一个AVL树数据结构。
14. 实现一个散列表数据结构。
15. 设计一个双端队列数据结构。
16. 实现一个字典树数据结构。
17. 设计一个多叉树数据结构。
18. 实现一个最小生成树算法。
19. 设计一个并查集数据结构。
20. 实现一个图的遍历算法。
21. 设计一个迪杰斯特拉算法。
22. 实现一个Floyd算法。
23. 设计一个拓扑排序算法。
24. 实现一个最短路径算法。
25. 设计一个Kruskal算法。
26. 实现一个插入排序算法。
27. 设计一个快速排序算法。
28. 实现一个希尔排序算法。
29. 设计一个选择排序算法。
30. 实现一个冒泡排序算法。
31. 设计一个堆排序算法。
32. 实现一个归并排序算法。
33. 设计一个桶排序算法。
34. 实现一个基数排序算法。
35. 设计一个计数排序算法。
36. 实现一个递归算法。
37. 设计一个动态规划算法。
38. 实现一个回溯算法。
39. 设计一个哈夫曼编码算法。
40. 实现一个最大子序列和算法。
41. 设计一个最长递增子序列算法。
42. 实现一个最长公共子序列算法。
43. 设计一个贪婪算法。
44. 实现一个深度优先搜索算法。
45. 设计一个广度优先搜索算法。
46. 实现一个信号量算法。
47. 设计一个分治算法。
48. 实现一个枚举算法。
49. 设计一个置换算法。
50. 实现一个位运算算法。
51. 设计一个红黑树插入算法。
52. 实现一个二进制查找算法。
53. 设计一个最小堆插入算法。
数据结构刘畅课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、栈、队列、树等常见数据结构的特点和应用场景。
2. 学会分析不同数据结构在解决实际问题中的效率,并能选择合适的数据结构进行问题求解。
3. 掌握排序和查找算法的基本原理,学会运用算法优化程序性能。
技能目标:1. 能够运用所学数据结构知识,设计并实现小型程序,解决实际问题。
2. 培养良好的编程习惯,提高代码编写和调试能力。
3. 培养学生团队协作和沟通能力,学会在项目中分工合作,共同解决问题。
情感态度价值观目标:1. 培养学生对数据结构学习的兴趣,激发学生主动探索的精神。
2. 培养学生面对复杂问题时,保持耐心、细心的态度,勇于克服困难。
3. 培养学生具备良好的信息素养,认识到数据结构在信息技术领域的重要性。
本课程针对高中年级学生,结合数据结构刘畅课程内容,注重理论与实践相结合,旨在提高学生的编程能力和解决问题的能力。
课程目标具体、可衡量,便于教师进行教学设计和评估。
通过本课程的学习,使学生能够在实际编程中灵活运用数据结构知识,为后续计算机专业课程打下坚实基础。
二、教学内容本课程教学内容紧密结合课程目标,依据教材《数据结构》刘畅版,主要包括以下章节:1. 数据结构概述:介绍数据结构的基本概念、作用和分类,为后续学习打下基础。
- 线性表、栈、队列:分析线性表的实现方式,讲解栈和队列的应用场景及操作方法。
- 树、二叉树:探讨树和二叉树的结构特点,掌握二叉树的遍历算法。
2. 算法设计与分析:学习算法设计的基本原则,分析常见算法的时间复杂度和空间复杂度。
- 排序算法:学习冒泡排序、选择排序、插入排序等常见排序算法,分析其优缺点。
- 查找算法:介绍顺序查找、二分查找等查找方法,并分析其效率。
3. 数据结构应用:结合实际案例,运用所学知识解决实际问题。
- 程序设计与实现:培养学生编写结构清晰、高效运行的程序。
- 项目实践:分组进行项目实践,锻炼学生团队协作能力和实际操作能力。
课程设计报告排序二叉树完成日期:2015/01/03目录一、需求分析1.运行环境;2.程序所实现的功能;3.程序的输入:4.程序的输出:5.测试数据,6.合作人及其分工二、设计说明1.算法设计的思想;2.主要的数据结构设计说明;3.程序的主要流程图;4.程序的主要模块,;5.程序的主要函数及其伪代码说明.6.合作人设计分工。
三、上机结果及体会1.合作人编码分工;2.实际完成的情况说明;3.程序的性能分析;4.打印程序运行时的初值和运行结果,画出相应的图示;5.上机过程中出现的问题及其解决方案;6.程序中可以改进的地方说明;7.收获及体会;8.源程序清单并附上注释。
四、参考文献一、需求分析1.运行环境a软件环境操作系统:windows 7 编译器 microsoft visual studio 2010b硬件环境联想 n4802.程序所实现的功能1.创建二叉树:(1)按提示信息输入一组关键字值,并建立相应的二叉排序树。
(2)按照先序遍历方式显示建立的二叉排序树。
(3)按照中序遍历方式显示建立的二叉排序树。
(4)按照后序遍历方式显示建立的二叉排序树。
2.显示二叉排序树:(1)按照先序遍历方式显示二叉排序树。
(2)按照中序遍历方式显示二叉排序树。
(3)按照后序遍历方式显示二叉排序树。
(4)按照层次遍历方式显示二叉排序树。
3.删除一个结点:要求可以实现删除根结点、叶子结点以及其它任意结点的功能。
(1)按照先序、中序、后序方式显示删除前的二叉排序树。
(2)按提示信息输入被删除结点的值,并在二叉排序树进行删除。
(3)显示删除是否成功的结果。
(4)若删除成功,则按照先序、中序、后序方式显示删除后的二叉排序树。
4.插入一个结点:(1)按照先序、中序、后序方式显示插入前的二叉排序树。
(2)按提示信息输入要插入结点的值,并在二叉排序树进行插入。
(3)显示插入是否成功的结果。
(4)若插入成功,则按照先序、中序、后序方式显示插入后的二叉排序树。
5.查找给定值的结点:(1)按照先序、中序、后序方式显示二叉排序树。
(2)按提示信息输入待查找的值,并在二叉排序树进行查找。
(3)显示查找是否成功的结果。
6.交换二叉排序树:(1)按照先序、中序、后序方式显示初始的二叉排序树。
(2)按照先序、中序、后序方式显示交换左右子树后的二叉排序树。
7.退出:退出整个算法演示程序。
3.程序的输入:输入为整形数据,输入一串数字序列并以-1结束,且以回车键相隔。
4.程序的输出:通过用户手动选择操作指令,经由程序内部处理,输出相应的结果到显示屏。
5.测试数据,用户手动输入一个数字序列进行数据测试二、设计说明1算法设计的思想根据算法的需求,确定算法的主要模块(建立二叉树、显示二叉树,插入结点、删除结点、查找结点、退出系统。
以及主函数模块)对各模块再进行函数的选取与构造,以及变量的控制等。
最后,再将各模块结合,形成完整的算法,由主函数来调用。
并设计界面。
程序运行时在界面上显示及选择。
注意全局变量的选择。
2主要的数据结构设计说明;设计了一个排序二叉树的数据结构,包括查找,删除等功能。
首先使用类模板建立排序二叉树类,及结点类存储结构。
因显示函数中的层次遍历需要用到队列,所以定义了一个链式队列类,二叉树函数成员中包括查找,删除,显示,插入函数。
下面分别写出几个函数的代码。
主函数部分包括一个主函数和一个界面模块。
主函数调用部分1.建立二叉树即循环调用插入函数。
并调用遍历函数,2.遍历显示,调用遍历函数。
3.删除,首先由查找函数查找到关键字的地址,再传递给删除函数,进行删除。
4.插入,插入前,插入后分别调用遍历函数并且调用插入函数即可,插入函数中,调用了查找函数。
5.查找,调用查找函数,并显示查找结果,成功或者失败。
6.退出系统,整个主函数循环选择功能序号的条件是number不等于6。
7.交换功能3.程序的主要流程图;显示删除查找交换插入主函数建树函数定义内部是否查找成功删除失败是否查找到是插入失败先中后序遍历先中后序遍历先中后序遍历先中后序遍历是否找到否a.创建二叉树:循环条件调用插入函数。
b.显示二叉排序树:调用desplayTree 函数,desplayTree 函数调用先中后序遍历。
调用层次遍历函数。
c.删除一个结点:首先由查找函数查找到关键字的地址,再传递给删除函数,进行删除。
并在删除前后显示遍d.插入一个结点:插入前,插入后分别调用遍历函数并且调用插入函数即可,插入函数中,调用了查找函数。
e.查找给定值的结点:查找,调用查找函数,并显示查找结果,成功或者失败。
f.交换二叉排序树:g.退出:5.程序的主要函数及其伪代码说明a.删除函数P定义为叶结点p->leftChild == NULL&&p->rightChild == NULL如果p的左孩子右孩子均为空delete p;直接删除pelse if (p->leftChild == NULL)tmpPtr=p;p=p->rightChild;delete tmpPtr;如果被删除的元素只有右子树,没有左子树,则可以拿他的左孩子顶替他的位置,再释放该元素的存储空间即可;只有左子树没有右子树同理。
tmpF=p;tmpPtr=p->leftChild;while (tmPtr->rightChild != NULL){//查找p在中序序列中直接前驱tmpPtr及其双亲tmpFtmpF=tmpPtr;tmpPtr=tmpPtr->rightChild;}p->data=tmpPtr->data;//将tmpPtr指向结点的数据元素值赋值给被删除的结点if (tmpF->rightChild == tmpPtr) //删除tmpPtr的结点Delete(tmpF->rightChild);elseDelete(tmpF->rightChild);elseDelete(tmpF->leftChild);如果被删除的元素左右孩子都存在的话,则在他的左子树中寻找关键字值最大的数据元素x,用x的值代替被删除元素的值,再来删除数据元素的值x。
b.交换函数(head->leftChild==NULL&&head->rightChild==NULL)如果左右孩子均为空,则不需要交换。
temp=head->leftChild;head->leftChild=head->rightChild;head->rightChild=temp;如果不为空,则定义中间变量,进行左右交换。
if(head->leftChild)ExchangeTree(head->leftChild);如果被交换的结点存在树的左子树上则递归递归调用交换函数。
存在于右子树上同理。
BinTreeNode<ElemType> *p=r;指向当前结点f=NULL;指向p的双亲。
从根节点开始将根节点的关键字与给定值比较如果相同则成功。
if (key < p->data){ f=p;p=p->leftChild;}else{ f=p;p=p->rightChild;f=NULL;如果给定值小于根节点的关键字,则在根节点的左子树上递归查找。
大于则在右子树上递归查找。
d.插入函数(FindTree(e, f) == NULL)首先查找给定值是否在书中已存在。
if (f==NULL) r=p;如果为空树,则新节点为根节点。
else if (e<f->data) f->leftChild=p;else f->rightChild=p;如果小于双亲,则插入结点为左孩子。
大于双亲,则插入结点为右孩子。
return true;elsereturn false;如果查找成功,则插入失败。
e.先中后以及层次遍历函数void BinarySortTree<ElemType>::desplayTree()由该函树调用先中后序遍历,以先序遍历为例。
if(r !=NULL){cout<<r->data<<' ';PreOrder (r->leftChild);PreOrder (r->rightChild);如果以r为跟的二叉树为空,则遍历结束,如不为空,首先访问根节点再先序遍历他的左子树。
然后再先序遍历它的右子树。
中序,首先中序遍历他的左子树,再访问他的根节点,最后中序遍历它的右子树。
后序首先后序遍历他的左子树,再后序遍历它的右子树,最后访问根节点。
层次遍历LinkQueue<BinTreeNode<ElemType> *> q;BinTreeNode<ElemType> *w;if (r!=NULL) q.EnQueue (r);while (!q.IsEmpty()){q.DelQueue(w);cout<<w->data<<' ';if (w->leftChild != NULL)q.EnQueue(w->leftChild);if (w->rightChild != NULL)q.EnQueue(w->rightChild);1.首先初始化队列,并将根节点入队。
2.当队列非空时,取出队头结点转3否则结束遍历。
3.访问结点p如果该节点有左孩子则将其左孩子入队;如果该节点有右孩子,则将其右孩子入队。
4.重复步骤2 3 直到队列为空为止。
6.合作人设计分工经由郭凯迪同学指错改错。
三、上机结果及体会1.实际完成的情况说明所要求的功能均能实现,数据类型为整形数据2.程序的性能分析,包括时空分析3.打印程序运行时的初值和运行结果A.初始界面B.建树C.显示D.删除E.查找F.交换G.退出H.插入4.上机过程中出现的问题及其解决方案出现许多语法问题例如定义函数与声明不匹配,函数名称是否正确,if else的匹配问题,通过一步一步的修改最终实现程序。
界面部分修改的更合理。
创建函数部分,循环调用插入函数时输入是在调用前还是在调用后。
删除函数部分首先需要查找关键字结点,查找返回的为地址,所以中间传递变量应为指针,以及参数数量应相等。
5.程序中可以改进的地方说明界面可以进行进一步优化。
6.收获及体会a.进行程序设计的时候注意模块的划分,从各个小模块开始进行设计b.熟练掌握各函数的成员构成c.交流与合作7.打印一份源程序清单并附上注释。
#include<iomanip>#include<string.h>#include<malloc.h>#include<stdio.h>template<class ElemType>struct Node{ElemType data;Node<ElemType> *next;Node(ElemType &e){data=e;next=NULL;};Node(){next=NULL;}};template<class ElemType>class LinkQueue{public:Node<ElemType> *front, *rear;LinkQueue();virtual ~LinkQueue();bool IsEmpty();void DelQueue(ElemType &e);void EnQueue(const ElemType e);};template<class ElemType>bool LinkQueue<ElemType>::IsEmpty(){if(front==rear)return true;elsereturn false;}template<class ElemType>LinkQueue<ElemType>::LinkQueue(){rear=front=new Node<ElemType>;}template<class ElemType>LinkQueue<ElemType>::~LinkQueue(){}template<class ElemType>void LinkQueue<ElemType>::EnQueue( ElemType e) {Node<ElemType> *p;p=new Node<ElemType>(e);if(p) {rear->next=p;rear=rear->next;}}template<class ElemType>void LinkQueue<ElemType>::DelQueue(ElemType &e) {if (!IsEmpty()){Node<ElemType> *p=front->next;e=p->data;front->next=p->next;if (rear == p)rear=front;delete p;}}template <class ElemType>struct BinTreeNode//声明树结构{ElemType data;BinTreeNode<ElemType> *leftChild;//存放左子树的指针BinTreeNode<ElemType> *rightChild;BinTreeNode();BinTreeNode( ElemType &e);};template <class ElemType>BinTreeNode<ElemType>:: BinTreeNode(ElemType &e){data=e;leftChild=NULL;rightChild=NULL;}template <class ElemType>BinTreeNode<ElemType>:: BinTreeNode(){leftChild=NULL;rightChild=NULL;}template <class ElemType>class BinarySortTree{public:BinTreeNode<ElemType> *r;BinarySortTree();void desplayTree(void);//显示这个数bool insertTree( ElemType &e);//在树中插入一个节点virtual~BinarySortTree();BinTreeNode<ElemType> *head;void PreOrder(BinTreeNode<ElemType> *r);void InOrder(BinTreeNode<ElemType> *r);void PostOrder(BinTreeNode<ElemType> *r);void LevelOrderTree();BinTreeNode<ElemType>* buildTree(BinTreeNode<ElemType>* head,int number);//建立一个树bool DeleteTree(BinTreeNode< ElemType> * &p, BinTreeNode< ElemType> * &fq);void ExchangeTree(BinTreeNode<ElemType> *head);BinTreeNode<ElemType> *FindTree( ElemType &key,BinTreeNode<ElemType> *&f) const;void destroyTree(BinTreeNode<ElemType> * &r);};template <class ElemType>BinarySortTree<ElemType>::BinarySortTree(){r=NULL;}template <class ElemType>BinarySortTree<ElemType>::~BinarySortTree() //调用析构函数,运用递归删除所有的new节点{cout<<"已?经-消?除y了?一?棵?树骸?!!!"<<endl;destroyTree(r);}template <class ElemType>bool BinarySortTree<ElemType>::DeleteTree(BinTreeNode< ElemType> * &p, BinTreeNode< ElemType> * &fq){BinTreeNode<ElemType> *tmpPtr, *tmpF;if (p->leftChild==NULL&&p->rightChild==NULL&&fq!=NULL) //叶子结点?{delete p;if (fq != NULL){if (fq->leftChild == p)fq->leftChild = NULL;else fq->rightChild = NULL;p = NULL;}}else if (p->leftChild == NULL) //有右子树结点{if(fq==NULL){r=p->rightChild;}else if (fq->leftChild == p)fq->leftChild = p->rightChild;else fq->rightChild = p->rightChild;delete p;p = NULL;}else if (p->rightChild == NULL) //有左子树结点{if(fq==NULL){r=p->leftChild;}if (fq->leftChild == p)fq->leftChild = p->leftChild;else fq->rightChild = p->leftChild;delete p;p = NULL;}else//左右子树都有{tmpF = p;tmpPtr = p->leftChild;while (tmpPtr->rightChild != NULL) //找左子树的右子树最后一个结点循环结束tmpPtr指向目标结点,tmpF指向目标结点的父母.{tmpF = tmpPtr;tmpPtr = tmpPtr->rightChild;}p->data = tmpPtr->data;if (tmpF->rightChild == tmpPtr)DeleteTree(tmpF->rightChild, tmpF);elseDeleteTree(tmpF->leftChild, tmpF);}return true;}template <class ElemType>void BinarySortTree<ElemType>::ExchangeTree(BinTreeNode<ElemType> *head){BinTreeNode<ElemType>* temp=NULL;if(head->leftChild==NULL&&head->rightChild==NULL)return;else{temp=head->leftChild;head->leftChild=head->rightChild;head->rightChild=temp;}if(head->leftChild)ExchangeTree(head->leftChild);if(head->rightChild)ExchangeTree(head->rightChild);}template <class ElemType>BinTreeNode<ElemType> *BinarySortTree<ElemType>::FindTree( ElemType&key,BinTreeNode<ElemType> *&f) const{BinTreeNode<ElemType> *p=r;//指向当前节点f=NULL;//指向p的双亲while (p != NULL && p->data != key){//查找关键字为key的节点if (key < p->data){//key比p的值小,则在p的左子树上进行查找f=p;p=p->leftChild;}else{//key比p的值大,则在p的右子树上进行查找f=p;p=p->rightChild;}}return p;}template <class ElemType>bool BinarySortTree<ElemType>::insertTree(ElemType &e){//f=NULL;// 指向被查找节点的双亲BinTreeNode<ElemType> *f;BinTreeNode<ElemType> *p;if (FindTree(e, f) == NULL) {// 查找失败,插入成功。