专升本数据结构课程总结 (1)
- 格式:doc
- 大小:41.50 KB
- 文档页数:8
“数据结构与算法”课程学习总结报告“数据结构与算法”课程学习总结报告数据结构课程总结孙博110401104511计本3班如何合理的组织数据、高效的处理数据是扩大计算机应用领域、提高软件效率的关键。
而在软件开发过程中人们会要求软件工程师们使程序有更高的运行效率。
因此要成为一名合格的软件编程员,必须具备数据结构领域和算法设计领域的专门知识。
本学期我们在李红老师的带领下学习了《数据结构结构与算法》一书。
这本书安排十分合理,在第一章对全书进行导引和学习的基础知识、预备知识。
在26章中使逻辑结构为“线性”的数据结构及其应用知识内容。
在7、8章中使逻辑结构中的为“树形”的数据结构及应哟就能够只是内容。
在第九章中使逻辑结构为“集合性”的数据元素在三列存储下的数据结构及其应用知识内容。
在第十章使逻辑结构为“图形”的数据数据结构及其应用知识内容。
下面将对各章的内容惊醒总结:第一章:首先介绍了数据的相关知识,讲述了数据的概、构成等,数据的最小组成单位。
然后讲述了数据类型与数据结构。
数据类型包括概念及定义,数据类型包括简单数据类型和复杂数据。
简单数据类型有:整数,实属,字符,指针,枚举量等。
而复杂数据类型包括:数组,结构图,共用体。
而数据结构主要使讨论元素之间的关系,数据结构包括三方面内容,及逻辑结构,存储结构以及一组运算集合。
数据的逻辑结构有四种基本结构:集合性结构,线性结构,树形结构,图形结构。
数据的存储结构是指数据严肃在存储器中的存储方式包括顺序存储,链表存储,索引存储,散列存储。
然后介绍以前学习的C语言(及本教材的使用的算法描述工具)知识锦兴路回顾包括指针、结构比阿亮、函数、递归、动态存储分配、文件操作等内容。
第二章:顺序表及其应用主要介绍的是线性逻辑结构的呼声几乎在顺序存储方法下的数据结构顺序标的概念、数据类型、数据结构、基本运算及相关应用问题。
应用一:查找介绍了两种方法:简单顺序查找(从书序标的一端来时扫描,将待查找元素与数据节点中的个元素比较。
专升本《数据结构》在当今数字化的时代,数据结构作为计算机科学中的重要基石,对于想要通过专升本提升自己学历和专业能力的同学来说,是一门至关重要的课程。
数据结构是什么呢?简单来说,它是研究数据的组织、存储和操作的方式。
就好像我们整理房间,需要有合理的方式来摆放物品,以便于快速找到和使用它们。
在计算机中,数据结构就是帮助我们高效地管理和处理大量数据的方法。
常见的数据结构有很多种,比如数组、链表、栈、队列、树和图等等。
先来说说数组,它是一种最简单也最常用的数据结构。
想象一下一排整齐的格子,每个格子里都能存放一个数据,这就是数组。
数组的优点是查找速度快,如果你知道要找的数据在哪个位置,一下子就能找到。
但它也有缺点,比如插入和删除数据时比较麻烦,因为可能需要移动大量的数据。
链表则与数组不同,它就像是一串珠子,每个珠子(节点)里不仅存放着数据,还包含指向下一个节点的指针。
链表在插入和删除数据时非常方便,只需要修改指针就行,但查找数据就相对较慢,需要从头开始一个一个节点地找。
栈和队列也很有意思。
栈就像一个只有一个出入口的桶,先放进去的东西最后才能拿出来,这叫“后进先出”。
队列则像排队买票的队伍,先到的先服务,是“先进先出”。
树是一种层次结构,比如二叉树,它就像一棵倒立的树,每个节点最多有两个子节点。
树结构在查找、插入和删除数据时都有比较高效的算法。
图则更加复杂,它可以用来表示各种关系,比如城市之间的道路连接。
学习数据结构,不仅要理解这些基本的结构,还要掌握它们的操作算法。
比如如何在数组中查找特定的元素,如何在链表中插入新节点,如何遍历一棵树等等。
这需要我们具备一定的逻辑思维和编程能力。
对于专升本的同学来说,学习数据结构可能会遇到一些挑战。
首先,可能之前的基础不够扎实,对计算机编程的概念和语法还不够熟悉。
这时候,就需要多花时间去复习和巩固基础知识,比如编程语言的语法、控制结构等。
其次,数据结构的概念比较抽象,需要我们通过大量的实例和练习来加深理解。
专升本计算机科学的数据结构与算法数据结构与算法是计算机科学专业中的核心课程,也是专升本计算机科学专业的重点学习内容之一。
它是计算机科学中最基础的学科之一,也是计算机程序设计的基础。
数据结构与算法的学习可以帮助我们更好地理解和设计计算机程序,提高程序的效率和性能。
一、数据结构数据结构是计算机存储、组织和管理数据的方式,它描述了数据元素之间的关系,以及对数据的操作。
常见的数据结构包括数组、链表、栈、队列、树和图等。
这些数据结构可以用来解决不同的问题,并在实际应用中发挥重要作用。
1. 数组数组是一种线性数据结构,它由一组相同类型的元素组成,并按照一定的顺序存储在内存中。
通过索引可以快速访问数组中的元素。
2. 链表链表也是一种线性数据结构,它由一组节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
链表的插入和删除操作非常高效,但是访问元素的效率较低。
3. 栈栈是一种特殊的数据结构,它遵循先进后出(LIFO)的原则。
栈可以使用数组或链表实现,常见的栈操作包括压栈和弹栈。
4. 队列队列是一种容器,它遵循先进先出(FIFO)的原则。
队列可以使用数组或链表实现,常见的队列操作包括入队和出队。
5. 树树是一种非线性数据结构,它由一组节点组成,节点之间存在层次关系。
树的常见应用包括二叉树、二叉搜索树和平衡二叉树等。
6. 图图是一种非线性数据结构,它由一组节点和边组成,节点之间的关系可以是任意的。
图常用来描述网络、社交关系等复杂的关系结构。
二、算法算法是解决问题的方法和步骤的描述,是实现特定功能的一组指令。
算法是计算机程序的核心,它决定了程序的效率和性能。
计算机科学中有许多常用的算法,例如查找算法、排序算法和图算法等。
1. 查找算法查找算法用来在数据集合中寻找指定的元素或位置。
常见的查找算法有线性查找和二分查找。
线性查找逐个比较数据元素,直到找到目标元素或遍历完整个数据集合。
二分查找是一种分治算法,它将数据集合分成两部分,每次比较中间元素,从而缩小查找范围。
数据结构实验总结及心得体会引言数据结构作为计算机科学的基础课程,是理解和应用计算机编程的重要部分。
通过实验的形式,我们可以更加深入地理解不同数据结构的特点和应用场景。
本文将总结我在数据结构实验中的学习经验和心得体会。
实验一:线性表在线性表实验中,我学习了顺序表和链表两种基本的线性表结构。
顺序表使用数组来存储数据,具有随机访问的特点;链表使用指针来连接数据元素,具有插入和删除操作方便的特点。
通过这个实验,我深刻认识了线性表的存储结构和操作方法。
我遇到的难点是链表的插入和删除操作,因为涉及到指针的重新指向。
通过调试和分析代码,我逐渐理解了指针指向的含义和变化规律。
在实验结束后,我还进一步学习了循环链表和双向链表的特点和应用。
实验二:栈和队列栈和队列是两种常用的数据结构,可以用来解决很多实际问题。
在这个实验中,我学习了顺序栈、链式栈、顺序队列和链式队列四种基本实现方式。
实验中我遇到的最大困难是队列的循环队列实现,因为需要处理队列尾指针的位置变化。
我通过画图和调试发现了队列尾指针的变化规律,并在实验中成功实现了循环队列。
熟练掌握了栈和队列的操作方法后,我进一步学习了栈的应用场景,如表达式求值和括号匹配等。
队列的应用场景还有优先级队列和循环队列等。
实验三:串串是由零个或多个字符组成的有限序列,是实际应用中十分常见的数据类型。
在这个实验中,我学习了串的存储结构和常规操作。
实验中最具挑战性的部分是串的模式匹配。
模式匹配是在一个主串中查找一个子串的过程,可以使用暴力匹配、KMP 算法和BM算法等不同的匹配算法。
在实验中,我实现了KMP算法,并在实际应用中进行了测试。
从实验中我学到了使用前缀表和后缀表来提高模式匹配的效率。
同时,在应用中也了解到了串的搜索和替换等常见操作。
实验四:树和二叉树树是一种重要的非线性数据结构,应用广泛。
在这个实验中,我学习了树的基本概念、存储结构和遍历方式。
实验中最困难的部分是二叉树的遍历。
数据结构与算法课程学习总结熟练运用常见数据结构与算法解决问题数据结构与算法课程的学习是计算机科学与技术专业中非常重要的一门课程,它是我们在编程过程中所必须掌握的基础知识。
在这门课程中,我学到了许多常见的数据结构与算法,并且通过实践的方式熟练地运用这些知识解决问题。
本文将对我的学习总结以及对于常见数据结构与算法的应用进行详细的阐述。
首先,在学习数据结构与算法的过程中,最基础的内容就是各种数据结构的概念与实现。
我学习了数组、链表、栈、队列、树等常见的数据结构,并且在实践中熟练地应用它们解决问题。
例如,在解决一个排序问题时,我可以选择使用数组或链表来存储数据,然后使用快速排序、归并排序等算法来实现排序功能。
通过学习这些数据结构的原理与实现方式,我能够更加清楚地理解它们的特点和适用场景,能够根据问题的需求选择最合适的数据结构来解决问题。
其次,算法是数据结构的灵魂。
在课程中,我学习了常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
通过掌握这些排序算法的原理和实现方式,我能够在解决排序问题时快速地选择最适合的算法,并且熟练地实现它们。
除了排序算法,我还学习了查找算法、图算法等其他常见算法。
通过学习这些算法,我能够更好地理解算法的思想和实现方式,为解决各种问题提供了良好的基础。
在实际应用中,数据结构与算法常常被用于解决各种实际问题。
例如,在一个学生成绩管理系统中,我们可以使用链表来存储学生的信息,使用排序算法对学生成绩进行排序,使用查找算法找到特定学生的成绩等。
又如,在一个图像处理软件中,我们可以使用图算法来实现图片的旋转、缩放等操作。
通过学习数据结构与算法,我能够更加灵活地运用它们解决各种实际问题,并且能够根据问题的特点选择最优的算法来提高程序的效率。
除了基础的数据结构与算法,我还学习了一些进阶的内容,如动态规划、贪心算法、回溯算法等。
这些内容通常被用于解决一些复杂的问题,例如0/1背包问题、旅行商问题等。
专升本《数据结构》数据结构是计算机科学中的一门基础课程,它主要涉及数据的组织、存储和操作等内容。
在计算机科学与技术领域中,数据结构被广泛应用于算法设计与分析、系统设计与优化、数据库管理等诸多领域。
对于想要进一步提升自己的专业素养和扩展自己的职业发展空间的人来说,学习数据结构是十分重要的。
首先,学习数据结构能够提高算法设计与分析的能力。
数据结构是算法的基础,正确选择合适的数据结构能够在很大程度上提高算法的效率和性能。
学习数据结构可以使我们了解各种数据结构的特点、适用范围和实现方式,从而在解决实际问题时能够将算法与数据结构相结合,设计出更加高效的解决方案。
其次,学习数据结构能够提高系统设计与优化的能力。
在软件开发过程中,经常需要处理不同类型和规模的数据结构,如树、图、队列、栈等。
熟练掌握和运用这些数据结构,能够使程序更加健壮、高效且易于维护。
此外,学习数据结构还能够提高我们对系统性能和资源利用的认识,能够针对不同的应用场景选择合适的数据结构,从而提高系统的吞吐量和响应速度。
再次,学习数据结构能够提高数据库管理的能力。
现代数据库管理系统通常使用各种数据结构来存储和管理大量的数据,如B树、哈希表等。
学习数据结构能够使我们更好地理解数据库管理系统的原理和实现方式,能够设计出更加高效的数据库结构和查询算法,从而提高数据库的性能和可用性。
此外,学习数据结构还能够提高我们对数据一致性和完整性的认识,能够更好地保证数据的安全性和可靠性。
最后,学习数据结构还能够提高编程能力和解决问题的能力。
数据结构是程序设计的基础,不仅能够教会我们如何设计和实现高效的数据结构,还能够培养我们分析和解决复杂问题的能力。
通过学习数据结构,我们可以学会如何对问题进行抽象和建模,如何选择和应用合适的数据结构和算法,如何优化程序的性能和可读性。
这些能力对于提高编程效率和质量,解决实际问题非常有帮助。
总之,学习数据结构对于提升专业素养和扩展职业发展空间非常重要。
数据结构实训总结一、引言数据结构是计算机科学中非常重要的一门课程,它研究了数据的组织、存储和管理方式,为解决实际问题提供了基础。
本文将对我在数据结构实训课程中所学到的知识和经验进行总结和归纳,以便更好地理解和应用数据结构。
二、实训内容本次数据结构实训主要包括以下几个部分:1. 线性表在线性表的实训中,我们学习了顺序表和链表两种数据结构的实现和应用。
顺序表是一种基于数组的数据结构,它可以高效地进行随机访问;链表则是一种基于指针的数据结构,它可以灵活地进行插入和删除操作。
通过实际编程和调试,我对线性表的插入、删除和查找等操作有了更深入的理解。
2. 栈和队列栈和队列是两种重要的数据结构,它们都属于线性表的扩展。
栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。
在实训中,我们实现了栈和队列的基本操作,并通过实际案例分析了它们在计算机系统中的应用。
3. 树和二叉树树是一种非线性的数据结构,它由节点和边组成,具有层次性和分支性。
在实训中,我们学习了树的基本概念和遍历算法,并实现了二叉树的创建、插入和删除操作。
通过实际编程和调试,我对树和二叉树的结构和操作有了更深入的理解。
4. 图图是一种非常复杂的数据结构,它由节点和边组成,可以表示多对多的关系。
在实训中,我们学习了图的基本概念和遍历算法,并实现了图的创建、插入和删除操作。
通过实际编程和调试,我对图的结构和操作有了更深入的理解。
三、实训经验在数据结构实训中,我积累了一些宝贵的经验和教训,总结如下:1. 理论与实践结合数据结构是一门理论与实践相结合的课程,光靠理论是远远不够的。
在实训中,我发现通过实际编程和调试,才能真正理解和掌握数据结构的实现原理和应用方法。
2. 多思考多实践数据结构是一门需要大量思考和实践的课程,不能光靠记忆和死记硬背。
在实训中,我经常遇到一些难题,需要多方面思考和实践才能解决。
通过不断地思考和实践,我逐渐掌握了解决问题的方法和技巧。
数据结构与算法课程学习总结报告计科系 10级计本一、数据结构与算法知识点《数据结构与算法》这本书共有十一个章节。
从第一章的数据结构和算法的引入,介绍了数据和数据类型、数据结构、算法描述工具、算法和算法评价四个方面的知识。
第二章则介绍了顺序表及其应用的相关知识。
从顺序表的基本概念开始,分别介绍了顺序表基本算法、顺序表基本算法性能分析、顺序表的应用。
顺序表应用又涉及多方面,有查找问题、排序问题、字符处理问题。
其中查找分简单顺序查找,有序表的二分查找,分块查找三种。
排序中分插入排序(直接插入排序、希尔排序)、交换排序(冒泡排序、快速排序)、选择排序(直接选择排序)、归并排序。
第三章链表及其应用,分为链表的基本概念、单链表的数据结构、单链表的基本算法、循环链表、链表的应用。
第四章堆栈及其应用,分为堆栈堆的基本概念、顺序栈及其基本算法、链栈及其基本算法、堆栈的应用。
第五章队列及其应用,分为队列的基本概念、顺序队列及其基本算法、链队列及其基本算法、基数排序问题。
第六章特殊矩阵和广义表及其应用,分为数组与矩阵,特殊矩阵的压缩存储、矩阵的应用实例、广义表。
第七章二叉树及其应用。
分为二叉树的基本概念、二叉树存储结构、二叉树的遍历算法、线索二叉树、二叉树的应用(基本算法、哈夫曼树、二叉排序树、堆和堆排序)。
第八章树和森林及其应用。
分为树和森林的基本概念,树的存储结构、树的基本算法及性能分析、树的应用(B树)。
第九章散列结构及其应用。
分为散列结构的概念等。
着重学习了散列表、散列函数、冲突处理方法(开放定址法和链地址法)。
第九章图及其应用。
分为图的概念、图的存储结构及其基本算法、图的遍历及算法、有向图的连通性和最小生成树、图的最小生成树、非连通图的生成森林算法、最短路径、有向无环图及其应用。
第十一章算法性能分析和算法设计方法简介。
二、对各知识点的掌握情况综合以上知识点,我对自我学习成果作如下总结:对于第一章对数据结构的概念理解颇深,大概是每次都要谈论到吧。
数据结构与算法课程学习总结2010年05月20日班级:姓名:学号:一、课程学习内容总结(1)第一章知识点及主要知识:本章的重点是数据结构中的逻辑结构、存储结构、数据的运算3个方面的概念及相互关系,难点是算法复杂度的分析方法。
基本概念和术语有数据、数据元素、数据项、数据结构。
特别是数据结构的逻辑结构、存储结构及运算的含义及其相互关系;数据的结构的两大类逻辑结构和4个常用的存储表示方法;算法、算法的时间复杂度和空间复杂度、最坏的和平均时间复杂度等概念,算法描述和算法分析的方法、对一般的算法要能分析出时间复杂度和空间复杂度。
本人掌握知识情况及分析:通过对这一章的学习,我理解了数据和数据结构的有关概念,熟悉了数据结构的逻辑结构和存储结构。
但对算法的时间、空间性能分析还不太熟练,尤其是空间性能分析需要加强。
(2)第二章知识点及主要知识:本章介绍了顺序表、顺序串的结构、数据类型、基本运算及相关应用。
顺序表是一种具有线性逻辑结构、顺序存储结构的数据集合,它的一些基本运算包括初始化表、求表长、查找表中元素、插入元素及删除元素等。
其中,实现顺序表的插入与删除运算时要大量移动元素,算法的时间复杂度为O(n)。
顺序串是顺序表的一个特列。
其特别之处在于组成顺序串的数据元素是一组字符。
顺序串的运算主要是针对字符串来进行的,其基本运算大多数都比较简单,只有“子串定位”(串的模式匹配)运算较为复杂。
模式匹配时各种串处理系统中重要的操作之一,本章介绍了模式匹配的简单算法思想。
本人掌握知识情况及分析:通过对这一章的学习,对于顺序表的概念、生成算法理解较为清晰,并且熟悉简单顺序查找和二分查找,不过对于分块查找较为含糊;在排序问题中,因为冒泡排序在大一C语言课上已经学习过了,再来学习感觉很轻松。
对于插入排序和选择排序理解的不错,但是,在实际运用中仍然出现明显不熟练的现象。
在学习归并排序过程中感觉较吃力,现在对这种排序方法仍然非常模糊,所以需要花较多的时间来补习。
数据结构实训总结1. 简介数据结构是计算机科学中非常重要的一门课程,通过学习数据结构可以帮助我们更好地理解和处理数据。
本文将对我在数据结构实训中所学到的内容进行总结和回顾。
2. 实训内容本次数据结构实训主要包括以下几个方面的内容:2.1 线性表线性表是数据结构中最基础的一种结构,它包括顺序表和链表两种实现方式。
在实训中,我们学习了如何使用数组和指针来实现顺序表和链表,并掌握了它们的基本操作,如插入、删除、查找等。
2.2 栈和队列栈和队列是两种特殊的线性表结构。
在实训中,我们学习了如何使用数组和链表来实现栈和队列,并掌握了它们的基本操作,如入栈、出栈、入队、出队等。
同时,我们还学习了栈的应用,如括号匹配、逆波兰表达式等。
2.3 树和二叉树树是一种非线性的数据结构,它包括树的定义、二叉树的定义以及二叉树的遍历方式。
在实训中,我们学习了树和二叉树的基本概念,并实现了二叉树的前序、中序和后序遍历算法。
此外,我们还学习了二叉搜索树的定义和操作。
2.4 图图是一种复杂的非线性数据结构,它由节点和边组成。
在实训中,我们学习了图的基本概念,包括有向图和无向图的定义,以及图的遍历算法,如深度优先搜索和广度优先搜索。
同时,我们还学习了最短路径算法和最小生成树算法。
3. 实训经验在完成数据结构实训的过程中,我积累了一些宝贵的经验和体会:3.1 理论与实践结合数据结构是一门理论性很强的课程,但实践是巩固理论知识和提高编程能力的关键。
通过实训,我深刻体会到了理论与实践相结合的重要性。
在实践中,我通过编写代码实现各种数据结构和算法,加深了对理论知识的理解和应用。
3.2 多思路解决问题在实训过程中,我们会遇到各种问题和挑战。
有时候,我们需要尝试多种思路来解决同一个问题。
通过与同学们的讨论和思考,我学会了灵活运用不同的算法和数据结构,找到最优解决方案。
3.3 良好的编码习惯在实训中,良好的编码习惯是非常重要的。
我学会了注重代码的可读性和可维护性,编写规范的注释和命名规范,养成了良好的编码习惯。
路漫漫其修远兮,吾将上下而求索 - 百度文库 1 课 程 总 结(提要) 一、 数据结构和抽象数据类型ADT 定义:一个数学模型以及定义在该模型上的一组操作。 构成一个抽象数据类型的三个要素是: 数据对象、数据关系、基本操作
数据结构(非数值计算程序设计问题中的数学模型) ·逻辑结构 (描述数据元素之间的关系) 线性结构—— 线性表、栈、队列、串、数组、广义表 非线性结构 —— 树和森林、二叉树、图 集合结构 —— 查找表、文件 ·存储结构(逻辑结构在存储器中的映象) 按“关系”的表示方法不同而分:
顺序结构—以数据元素在存储器中的一个固定的相对位置来表示“关系” 链式结构—以指针表示数据元素的“后继”或“前驱” ·基本操作(三类) 结构的建立和销毁 查找 —— 引用型操作(不改变元素间的关系) 按“关系”进行检索 按给定值进行检索 遍历——访问结构中的每一个数据元素,且对每个元素只访问一次 修改 —— 加工型操作(改变元素间的关系) 插入 删除 更新(删除+插入) 路漫漫其修远兮,吾将上下而求索 - 百度文库 2 二、线性结构 ·线性表和有序表 —— 不同存储结构的比较 顺序表:可以实现随机存取;(1) 插入和删除时需要移动元素;(n) 需要预分配存储空间; 适用于“不常进行修改操作、表中元素相对稳定”的场合。 链表:只能进行顺序存取;(n) 插入和删除时只需修改指针; (1) 不需要预分配存储空间; 适用于“修改操作频繁、事先无法估计最大表长”的场合。 —— 应用问题的算法时间复杂度的比较 例如,以线性表表示集合进行运算的时间复杂度为(n2),
而以有序表表示集合进行运算的时间复杂度为(n) ·栈和队列 —— 数据类型的特点及其应用范畴 ·串 —— 和线性表的差异: 数据对象不同(数据元素限定为单个字符)、基本操作集不同(串整体作为操作对象)、存储结构不同 串的模式匹配算法 ·数组 —— 只有引用型的操作,∴只需要顺序存储结构 多维到一维的不同映象方法: 以行序为主序(低下标优先) 以列序为主序(高下标优先) ·广义表 —— 多层次的线性结构 特性:次序性、长度、层次性、深度、递归等 独有的特性:共享 存储结构的特点 路漫漫其修远兮,吾将上下而求索 - 百度文库 3 三、非线性结构 树和森林、二叉树、图 • 数据类型的定义(结构特点和基本操作) • 存储结构 • 二叉树的特性及其证明方法 • 遍历 ·何谓“遍历”?对结构中的每个元素都访问到,且只被访问一次 ·对非线性结构的遍历需要确定一条搜索路径 ·两条搜索路径:深度优先搜索和广度优先搜索 ·逻辑定义 深度优先搜索 —— 以结构中的某个数据元素为起始点,首先访问该数据元素,然后依次以它的各个“后继”为起始点进行“深度优先搜索遍历”。 其特点为:在访问了起始数据元素之后,沿着某一条“路径”(后继)向前,直至“到底”,然后退回一步找另一个后继,再向前继续,……,直至所有通路都走遍。 广度优先搜索 ——以结构中的某个数据元素为起始点,首先访问该数据元素,然后先访问其所有后继;之后其它结点的访问次序由已被访问的结点的访问次序决定:先被访问的结点的后继“优先于”后被访问的结点的后继。 其特点为:在访问了起始数据元素之后,先访问它的所有后继,然后再依这些后继被访问的先后次序访问它们的后继,……,直至没有后继未被访问为止。
·算法的形式描述 深度优先搜索 ——通常采用递归的形式 二叉树(先序、中序、后序)、树/图(先根、后根) 一般形式算法的描述: 路漫漫其修远兮,吾将上下而求索 - 百度文库
4 void DFSearch(ADT DS, ElemType v) { // 从v开始,对DS进行深度优先搜索遍历 if (DS) { visit(v); (visited[v]=true;) w=FirstSucc(v); while (w) { if (!visited[v]) DFSearch(DS, w); w=NextSucc(DS, v, w); }//while }//if }//DFSearch
不同数据结构(逻辑和存储)有不同写法。 例如对森林,起始点只有一个(第一棵树的根),只有两个后继,且各棵树互不相交,按搜索路径上的访问次序有先序遍历和中序遍历之分。 void PreOrder_F(CSTree T) { // 对以T为根指针的森林进行先序遍历 if (T) { visit(T->data); PreOrder_F( T->firstchild ); // 先序遍历第一棵树的子树森林 PreOrder_F( T->nextsibling ); // 先序遍历其余树构成的森林 }//if } // PreOrder_F 或者从森林是树的集合角度来看遍历(依次从左至右依次先根遍历各棵子树) while(树) do PreOrder_T(树);
void PreOrder_T(CSTree T) { 路漫漫其修远兮,吾将上下而求索 - 百度文库 5 // 对以T为根指针的树进行先根遍历 if (T) { visit(T->data); p=T->firstchild; while(p) { PreOrder_T(p); // 对以 p 为根指针的子树进行先根遍历 p=p->next; }//while } // PreOrder_T ·由“访问”操作的不同可以实现不同的操作 具体问题具体分析,按分割求解的思想: “递归基”考虑最简单的结构(“空集”/“只含一个元素”) “归纳项”分析原问题和子问题之间的关系 ·不同的问题要求不同的搜索路径 ·“线索化”的过程即为在遍历过程中建立结点之间的线性关系
广度优先搜索 —— 不能用递归(先进先出) 必须利用“队列”记下访问次序,以便由此确定以后的元素的访问次序
·对不同的存储结构,算法的差异 不同的存储结构表现在表示“后继”的方法不同 二叉树 —— 二叉链表(静态、动态)、顺序表(只适用于完全二叉树) 树 —— 孩子-兄弟链表、孩子链表(≡≡图的邻接表)、双亲链表 图 —— 邻接表、邻接矩阵 具体算法采用何种存储结构由算法需要解决的问题而定 四、查找表—— 集合结构 ·根据查找表所需进行的操作种类和期望达到的ASL来选择构造查找表的方法 路漫漫其修远兮,吾将上下而求索 - 百度文库 6 顺序表、有序表(静态查找树)、索引顺序表 —— 静态查找表 二叉排序树、B-树和B+树、键树 —— 查找树 哈希表 —— 动态查找表也可用于表示静态查找表 各自的特点、操作的实现方法,注意 它们之间的相同点和不同点 例如:顺序表的特点是:结构简单,便于插入但不便于删除;平均查找长度较大ASL=O(n),查找树?哈希表?静态查找树和折半查找的关系?和动态查找树的区别? —— 平均查找长度的计算公式对任何查找表都适用
下只考虑查找成功的平均查找长度,即npnii11,一般情况
关键在于如何计算Ci
·判定树和ASL的计算方法
——判定树用于描述查找方法,关键字在判定树上的层次恰为找到它时和给定值进行比较的次数。注意判定树的画法取决于查找方法的本身而不是具体的算法。 判定树非程序流图
·哈希表的特点 是在关键字和记录的存储地址之间建立了一个映象关系,以此减少查找的盲目性,哈希表的最大特点是它的平均查找长度不是表长的函数,因此利用它可以设计出使平均查找长度控制在期望值范围内的查找表。 —— 如何构造哈希表以及如何计算它的Ci。 —— 在特殊的情况下,可以做到ASL=0
—— 无法画出它的判定树 —— 掌握各种构造哈希表的方法以及处理冲突的方法 五、内部排序
ninii'CiqiCipASL111路漫漫其修远兮,吾将上下而求索 - 百度文库
7 ·进行排序的目的:得到有序表 排序和查找相互关联,有时排序的过程也可以看成是一个动态造表的过程,如:插入排序;二叉查找树 ·了解各种排序方法的特点以便灵活应用 例如:直接插入排序适用于“近似有序序列”; 快排的思想可用以“调整”; 选择排序、起泡排序和堆排序可用以“选出若干满足条件元素”; 各种排序方法的混合使用 ·排序算法的描述 例如:一次划分、建堆 算法和存储结构的关系 注意排序时采用的链表为什么不是动态链表 ·排序算法的时间复杂度及其简单分析方法 ·各种排序方法的综合比较 时间性能——平均情况、最坏情况、最好情况 (从关键字的比较和记录的移动两个方面进行分析) 空间性能——需要的辅助空间
六、外部排序 ·外部排序的基本过程及其访问外存的次数 ·多路归并 ·置换-选择排序 和 归并树
七、文件 ·文件的各种组织方法的特点及其操作 顺序文件 索引文件