数据结构读书笔记
- 格式:doc
- 大小:46.50 KB
- 文档页数:7
“数据结构”读书笔记示例:第2章线性表学习线索:逻辑结构→基本运算定义→存储结构→基本运算实现(复杂度分析→应用实例)1. 逻辑结构:是由n(n≥0)个数据元素组成的有限序列。
2. 基本运算定义:(P.16)(1)Init_List(L),线性表初始化;(2)Length _ List (L),求线性表的长度;(3)Get_ List (L,i),取表元;(4)Locate_ List (L,x),按值查找;(5)Insert_ List (L,x,i);插入操作;(6)Delete_ List (L,i),删除操作。
3. 存储结构:(1)顺序表:把线性表的结点按逻辑次序存放在一组地址连续的存储单元里。
顺序存储的结构体定义:typedef struct{ datatype data[MAXSIZE]; /* 一维数组子域*/int last; /* 表长度子域*/} SeqList; /* 顺序存储的结构体类型*/4-1. 顺序表的基本运算的实现(算法及其复杂度分析、应用实例:顺序表的划分、合并、比较大小)(2)单链表:只有一个链域的链表称单链表。
结点结构:Data(节点值)Next(后继结点地址)其中data是数据域,next是指针域链式存储的结构体定义:typedef struct lnode{ datatype data; /* 数据子域*/struct lnode *next; /* 指针子域*/} LNode,*LinkList; /* 链式存储的结点结构类型*/4-2. 单链表的基本运算的实现(算法及其复杂度分析、应用实例:链表逆置、归并)单链表的发展:循环链表、双向链表顺序表和链表的比较1)基于空间:2)基于时间:“数据结构”读书笔记(线性结构部分)第1章绪论1. 数据:信息的载体,能被计算机识别、存储和加工处理。
2. 数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。
数据结构c语言版读后感《数据结构C语言版读后感》读完《数据结构C语言版》这本书之后,真的是感慨万千。
首先,在读到数组这一章节的时候,我感觉这就像是我编程生涯中的一剂强心针。
书中对数组的定义、声明和使用讲得非常细致。
以前我在写程序用到数组时总是一知半解,很多时候都是照葫芦画瓢。
例如在做一个简单的学生成绩统计系统时,只是知道要创建一个数组来存放成绩,但是对于数组在内存中的存储方式等内在原理却不清楚。
通过这本书,我明白了数组在内存中是连续存储的这一特性,这让我对它的操作产生了全新的认识。
而且在后续涉及到二维数组的时候,书里借助图形的方式展示其逻辑结构,就像是给我打开了一扇新的大门,让我能够更深入地理解多维数组的应用场景。
链表这部分的内容特别触动我。
链表这个概念之前总是让我感到非常的模糊和神秘。
书中深入浅出地介绍了单链表、双链表的结构和操作。
在我尝试去实现一个简单的链表插入和删除操作的过程中,我才真正体会到了这种数据结构的灵活性。
记得在模拟一个栈的操作时,我用链表的方式构建,与用数组构建的版本进行对比,能够明显感觉到链表在处理动态变化数据量的优势。
尽管在初期理解起来比较吃力,经常写着写着就逻辑混乱了,后来我明白了除了要理解代码的表层结构,更重要的是掌握指针在链表中的作用,以及各个节点之间的关联是如何通过指针来维系的。
而栈和队列部分,则像是对前面所学知识的一种升华应用。
这让我想起在学习操作系统课程时,内存管理中的栈帧结构就像是栈这种数据结构在实际系统中的投影。
书中对栈和队列操作的限制讲解得非常到位,也通过简单的示例告诉我们如何运用这些限制来确保数据处理的顺序性。
我觉得作者想表达的不仅仅是这两种数据结构本身,更是一种对待数据处理顺序这一概念的编程思维。
树结构就像是整个数据结构中的一片茂密的森林,刚开始进入这个章节的时候,我有点不知所措。
各种术语,像节点、叶子节点、分支节点等一下子涌过来。
但是随着书中详细地开展对二叉树、森林的讲解,我逐步地构建起了对树结构的理解框架。
《数据结构》读后感
在现代社会,数据已经成为了我们生活中不可或缺的一部分。
数据的存储、管理和处理方式对我们的生活和工作都产生了巨大的影响。
而数据结构作为计算机科学中的重要基础知识,更是在这个信息时代中扮演着至关重要的角色。
《数据结构》这本书,深入浅出地介绍了数据结构的基本概念、常用算法和数据结构的应用。
通过学习这本书,我对数据结构有了更深入的理解,也对计算机科学的发展有了更清晰的认识。
首先,本书对数据结构的基本概念进行了详细的介绍,包括数组、链表、栈、队列、树等常见数据结构。
通过对这些数据结构的学习,我了解到不同数据结构适用于不同的场景,如何选择合适的数据结构对于提高程序的效率和性能至关重要。
其次,本书还介绍了常用的算法,如排序算法、查找算法等。
通过学习这些算法,我了解到算法的设计和优化对于提高程序的效率和性能至关重要。
同时,本书还通过实例和练习题的方式帮助读者加深对算法的理解和掌握。
最后,本书还介绍了数据结构在实际应用中的一些案例,如数据库、图论等。
通过学习这些案例,我了解到数据结构在不同领域的应用,也对数据结构的实际意义有了更深入的认识。
总的来说,通过阅读《数据结构》,我不仅对数据结构有了更深入的理解,也对计算机科学的发展有了更清晰的认识。
数据结构是计算机科学的基础,掌握好数据结构对于提高程序的效率和性能至关重要。
希望通过不断学习和实践,能够更好地运用数据结构,为我们的生活和工作带来更多的便利和效率。
数据结构读书笔记在学习计算机科学的过程中,数据结构无疑是一座重要的基石。
它不仅影响着程序的运行效率,还决定着我们解决问题的思路和方法。
通过对数据结构相关书籍的研读,我有了许多深刻的体会和收获。
数据结构,简单来说,就是数据的组织方式和存储方式。
它就像是一个仓库,我们需要根据货物的特点和使用需求,选择最合适的存放方式,以便能够快速、准确地找到和处理它们。
在常见的数据结构中,数组是我们最先接触到的。
数组是一种线性的数据结构,它将相同类型的元素按照顺序存储在连续的内存空间中。
就好像是一排整齐排列的盒子,每个盒子里都装着相同类型的物品。
使用数组的好处是访问元素的速度非常快,因为我们可以通过索引直接定位到对应的元素。
但它也有缺点,比如在插入和删除元素时,如果涉及到中间位置,就需要移动大量的元素,这会导致效率低下。
链表则是另一种常见的数据结构,它与数组有着很大的不同。
链表中的元素不是连续存储的,每个元素除了存储自身的数据外,还包含一个指向下一个元素的指针。
这就像是把一个个珠子用线串起来,我们通过线来找到下一个珠子。
链表在插入和删除元素时非常方便,只需要修改相邻元素的指针即可,不需要移动大量的数据。
但链表的缺点是访问特定位置的元素时,需要从头开始逐个遍历,效率相对较低。
栈和队列是两种特殊的线性数据结构。
栈就像是一个只能从一端进出的容器,遵循“后进先出”的原则。
想象一下往一个桶里放东西,最后放进去的会最先被拿出来。
而队列则像是排队买票的人群,遵循“先进先出”的原则,先排队的人先得到服务。
栈和队列在很多算法和程序中都有广泛的应用,比如表达式求值、页面的回退和前进、任务的调度等。
除了线性数据结构,树形结构也是非常重要的一类数据结构。
二叉树是树形结构中最基本也是最重要的一种。
它每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉搜索树是一种特殊的二叉树,它的左子树中的节点值都小于根节点的值,右子树中的节点值都大于根节点的值。
数据结构读书笔记在计算机科学的领域中,数据结构无疑是一块基石。
它不仅仅是理论知识,更是解决实际问题的有力工具。
通过对数据结构的学习,我仿佛打开了一扇通往高效编程和算法设计的大门。
数据结构,简单来说,就是数据的组织方式。
它决定了我们如何存储、管理和操作数据,以实现各种计算任务。
就好像我们整理房间一样,不同的物品需要以合适的方式摆放,才能方便我们取用和管理。
在众多的数据结构中,数组是我们最先接触到的。
数组是一种线性的数据结构,它将相同类型的元素依次存储在连续的内存空间中。
这使得数组在随机访问元素时具有极高的效率,只需要通过索引就能快速定位到目标元素。
但与此同时,数组的插入和删除操作却相对复杂,因为可能需要移动大量的元素来保持数据的连续性。
与数组不同,链表则在插入和删除操作上表现出色。
链表中的元素通过指针连接,不需要连续存储。
当我们需要在链表中间插入或删除元素时,只需要修改相关节点的指针即可,无需移动大量数据。
然而,链表在随机访问方面却存在不足,要访问特定位置的元素,需要从链表的头部开始逐个遍历。
栈和队列也是常见的数据结构。
栈遵循着“后进先出”的原则,就像一个堆满盘子的桶,最后放进去的盘子总是最先被拿出来。
栈在函数调用、表达式求值等场景中发挥着重要作用。
而队列则是“先进先出”,类似于排队买票,先到的人先得到服务。
队列常用于任务调度、消息传递等系统中。
树是一种层次结构的数据结构,其中二叉树尤为常见。
二叉树的每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉搜索树是一种特殊的二叉树,它的左子树中的节点值小于根节点值,右子树中的节点值大于根节点值。
这使得在二叉搜索树中查找、插入和删除元素的平均时间复杂度为 O(log n),效率很高。
但如果二叉树不平衡,可能会导致性能下降,这时就需要通过平衡树的算法来保持树的平衡,如 AVL 树和红黑树。
图则是更加复杂的数据结构,用于表示对象之间的关系。
图可以分为有向图和无向图。
数据结构c语言版读后感《数据结构(C语言版)读后感》读完《数据结构(C语言版)》这本书,真的是感慨万千。
读到数组这部分的时候,我感觉就像是打开了一扇通往有序数据存储世界的大门。
例如,在处理学生成绩的场景中,我们可以用数组很方便地存储每个学生的各科成绩。
这时候C语言里面数组的索引就像是每个学生对应的学号一样,能够准确地定位到每一个数据。
但是,当涉及到多维数组的时候,我一开始有点迷糊,像二维数组表示图像像素的时候,那个行列的索引关系总是搞混。
后来我明白了,其实可以把二维数组想象成一个棋盘,行就是每一行的棋子,列就是这一行中的某个棋子的位置,这样理解起来就方便多了。
特别触动我的是链表这一章节。
链表这种数据结构和数组相比非常灵活。
它就像一群手拉手的小伙伴,可以随时断开某两个人的手,再牵上别人的手组成不同的序列。
我想到在构建一个动态的人员信息系统时,员工信息可能随时增加或者删除,用链表结构就可以轻松应对这种变化,而不需要像数组一样预先设定好大的存储空间,避免了空间的浪费。
栈和队列这部分也很有趣。
栈是一种后进先出的数据结构,这让我想起了装子弹的弹匣,最后装进去的子弹最先被打出来。
而队列则相反,是先进先出的,就像排队买东西,先来的人先得到服务。
在编程中遇到解析表达式或者任务调度之类的问题时,这两种数据结构都能派上大用场。
树结构也让我印象深刻。
书中从二叉树再到平衡二叉树和哈夫曼树的介绍,让我看到了同一类型数据结构的不同优化方向。
将树结构用于文件系统的存储结构理解上是一件有意思的事情。
比如说一个目录就像是树的节点,它下面的子目录或者文件就是这个节点延伸出去的分支或者树叶。
最后关于图结构,它描述了很多事物之间复杂的关系。
就像社交网络中的人际关系一样,每个人是一个节点,人与人之间的关系就是图的边。
虽然图的一些算法例如最短路径算法有些复杂,但理解了之后会发现它在很多领域都能找到应用场景,像物流的配送路线优化等。
总的来说,这本书给我的数据结构知识构建起了一个坚实的框架,虽然在阅读过程中有不少磕磕绊绊,但收获真的超值。
郝斌——数据结构数据结构概述(1)定义:我们如何把现实中大量而复杂的问题已特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上位实现某个功能二执行的相应操作,这个相应的操作也叫算法。
解释:数据结构要解决的问题就是把现实中大量复杂的问题存储到内存中,把单个数据的类型确定,再把数据之间关系确定,这样就可以存储到内存中去了,算法就是对数据结构的操作。
比如数组是一个数据结构,单个数据类型就确定,数据之间关系就是连续存储,操作数组就是一个算法。
侠义的算法是依附于某个数据结构上,也就是说同样对数组遍历和对链表遍历,算法肯定不一样。
数据结构解决存储问题,算法解决数据间的关系。
数据结构=个体+个体的关系算法=对存储数据的操作。
狭义的算法算法:解题的方法和步骤(2)衡量算法的标准:1时间复杂度大概程序要执行的次数,而非执行的时间:运行步骤最多的最关最核心的要运行的次数可以大概代表2空间复杂度:算法执行过程中大概所占有的最大内存。
3 难易程度4健壮性前两个最重要(一般算法有循环)(3)第三个内容:数据结构的地位(数据结构是软件中最核心的课程)数据库和数据结构的区别:数据库是数据结构的简化版程序:数据的存储+数据段操作+可以被计算机之行的语言(4)预备知识:伪算法不是真正的算法通过语言来实现伪算法,希望编程语言实现要通过指针。
链表的知识很重要,以后都会用到。
C++的指针不够,学C语言的用途是为了以后能看懂更高级的语言*p就代表一个变量,例如i 。
int*p表示定义一个存放整形变量的地址的指针变量。
程序运行完,内存就终止了。
复习:1:指针:int *p//p 是个变量名字,用来存放地址,只能存储int型变量的地址指针的重要性:是C语言的灵魂,定义地址线cpu 内存0控制线 1。
数据线地址内存单元的编号(cpu只能访问内存,不能访问硬盘)从0开始的非负整数,范围为0——4g-1指针就是地址,地址就是指针指针变量是存放内存单元地址的变量指针和指针变量不一样指正的本质是一个操作受限的非负整数分类:Int *p;Int *j;Int i=10;P=&I;//(1).把i的地址赋给i,*p就指向了I (2).p和i没有任何的关系(3)*p就是iP=10//errorI=*j//error1 基本类型的指针(p=&i表示指针变量存储i的地址,但是p为p,i为i 两者无任何关系,但是*p和i却是等效的两者可以互换)变量不进行初始化,会是一个随机数的原因。
数据结构c语言版读后感《数据结构C语言版读后感》初次拿起《数据结构C语言版》这本书的时候,心里是既期待又有些担忧的。
期待是因为知道数据结构在编程中的重要性,担忧则是害怕被那些复杂的概念和算法难倒。
读到数组这一章节的时候,我感觉就像是开启了一扇门,进入到一个有序存储数据的世界。
书中详细地介绍了数组的定义、初始化以及如何在C语言里用数组解决一些简单的问题。
特别触动我的是,当看到用数组来实现学生成绩的存储和管理这个例子的时候,我马上就联想到大学时候同学们的成绩统计程序。
那时候自己对数据的组织非常懵懂,如果当时能好好钻研数据结构里关于数组这部分知识,肯定能写出更高效更有逻辑的程序。
不过,在这里我也遇到了疑惑,关于二维数组在内存中的存储方式,书上的解释在一开始让我有点迷糊,感觉它像是一个神秘的布局。
后来我明白了,二维数组实际上也是线性存储的,只是按照一定的行优先或者列优先的顺序连续地存放在内存中。
这就好像是住在公寓里的居民,尽管你可能分层分室地去划分他们,但实际上都是沿着一条长长的走廊(内存空间)顺序排列的居住。
再往后看到链表部分。
链表这个概念,我觉得作者想表达一种更加灵活的数据组织形式,相对于数组死板的顺序存储而言。
链表的节点添加和删除操作让我看到了它动态管理数据的优势。
对了还想说,在理解指针指向节点,然后进行链表操作的那些代码时,真的费了不少精力。
当时我不断地自己画图去理解一个节点如何链接到下一个节点,就像是在拼接乐高积木一样,每一块的连接(指针的指向)都必须精确无误。
这部分内容让我意识到编写逻辑再复杂的程序,都离不开对基础数据结构的扎实掌握。
树和图这两部分对我来说感觉像是进入到了数据结构的“高级领域”。
树的层级结构以及遍历算法,说实话理解起来真的很有挑战性。
但当我一点点啃下这些知识,我就发现它在文件系统的表示以及家族族谱这样的实例中能够得到很好的体现。
比如说文件系统,磁盘下有文件夹,文件夹里又可能有子文件夹或者文件,这就像树的节点和子树的关系。
数据结构读书笔记【第⼀章】这⼀部分内容是关于数据结构的⼀些基础概念,这有助于我们理解后续的内容:【1】数据:对客观事物的符号表⽰,在计算机中是指所有能输⼊到计算机处理的符号的总称。
【2】数据元素:数据组成的基本单位,元素⼀般作为数据结构中的⼀个整体考虑和处理,可能包含多个数据项,例如表中的⼀条记录为⼀个数据元素,但含有多个数据项。
【3】数据对象:指的是性质相同的数据元素组成的集合,是数据的⼀个⼦集。
【4】数据结构:相互之间存在⼀种或多种特定关系的数据元素的集合。
【逻辑结构】这⾥元素之间的关系可以分为⼏类:第⼀种是集合关系,第⼆种是线性的关系,单链表就是这样⼀种关系,第三种和第四种分别是树形关系和图形关系,也就是对应于树和图。
上⾯描述这么多,最关键就是为了说明数据和关系两个概念。
这⾥的关系指的是逻辑关系,例如两个数据a,b按照复数的逻辑关系组织且a为实部,b为虚部。
【存储结构】有了数学上的数据结构概念,我们还需要把数据映射到计算机中表⽰(存储结构),也就是将数据和关系⽤计算机语⾔来表⽰出来,⼀个位串可以表⽰⼀个数据元素(8位可以⽤来表⽰字符),通常称这个位串为元素,如果⼀个位串包含多个数据项,对应于每个数据项的被称为数据域。
根据不同表⽰⽅法可以得到顺序和链式两种存储结构。
总结上⾯的内容就是⼀个算法的设计取决于逻辑结构,算法的实现依赖存储结构。
【数据类型】为了⽅便表⽰存储结构,⾼级程序语⾔借助数据类型来对它进⾏描述。
数据类型的定义是⼀个值的集合和这个值集上⼀组操作的总称。
根据值的不同特性,数据类型⼜可以分为两类:⼀类是⾮结构的“原⼦类型”(整形、指针),另⼀类是”结构类型“(数组),结构类型的值是若⼲成分按照某种结构组成,这⾥的成分既可以是结构的也可以是⾮结构的。
由于数据结构可以看作是⼀组具有相同结构的值,所以结构类型也可以看作是数据结构和定义在上⾯的⼀组操作来构成的。
数据类型不仅可以表⽰存储关系,还可以定义⼀组该类型的操作。
数据结构读书笔记
第一章是绪论部分,因为大家都是刚刚接触这门课,所以还有很多不是很多的了解,随着计算机的迅速发展,计算机的应用领域已经不再只是科学计算领域,而更多的应用于控制管理以及数据处理等非数值计算的处理工作,与此对应,计算机加工处理的对象由纯粹的数值发展到字符,表格和图像等各种具有一定结构的数据,这就给程序设计带来了一些新的问题,为了编写出一个好的程序,必须分析待处理的对象的特性以及各处理对象之间存在的关系。
所以在这种环境下,数据结构这门课就诞生了。
第二章.线性表的相关基本概念,如:前驱、后继、表长、空表、首元结点,头结点,头指针等概念。
2.线性表的结构特点,主要是指:除第一及最后一个元素外,每个结点都只有一个前趋和只有一个后继。
3.线性表的顺序存储方式及其在具体语言环境下的两种不同实现:表空间的静态分配和动态分配。
静态链表与顺序表的相似及不同之处
4.线性表的链式存储方式及以下几种常用链表的特点和运算:单链表、循环链表,双向链表,双向循环链表。
其中,单链表的归并算法、循环链表的归并算法、双向链表及双向循环链表的插入和删除算法等都是较为常见的考查
方式。
此外,近年来在不少学校中还多次出现要求用递归算法实现单链表输出(可能是顺序也可能是倒序)的问题。
5.线性表的顺序存储及链式存储情况下,其不同的优缺点比较,即其
各自适用的场合。
单链表中设置头指针、循环链表中设置尾指针而不设置头指针以及索引存储结构的各自好处。
第三章本章主要重点是1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈,链栈,共享栈循环队列,链队等。
栈与队列存取数据(请注意包括:存和取两部分)的特点。
2.递归算法。
栈与递归的关系,以及借助栈将递归转向于非递归的经典算法
:n!阶乘问题,fib数列问题,hanoi问题,背包问题,
3.栈的应用:数值表达式的求解,括号的配对等的原理
4.循环队列中判队空、队满条件,循环队列中入队与出队算法。
第四章1.串的基本概念,串与线性表的关系(串是其元素均为字符型数据的特殊线
性表),空串与空格串的区别,串相等的条件
2.串的基本操作,以及这些基本函数的使用,包括:取子串,串连接,串替换,求串长等等。
运用串的基本操作去完成特定的算法是很多学校在基本操作上的考查重点。
3.顺序串与链串及块链串的区别和联系,实现方式。
4.KMP算法思想。
KMP中next数组以及nextval数组的求法。
明确传统模式匹配算法的不足,明确next数组需要改进之外。
其中,理解算法是核心,会求数组是得分点。
查方式是:求next和nextval数组值,根据求得的next或nextval数组值给出运用KMP算法进行匹配的匹配过程。
第五章广义表的概念,是数据结构里第一次出现的。
它是线性表或表元素的有限序列,构成该结构的每个子表或元素也是线性结构
1.多维数组中某数组元素的position求解。
一般是给出数组元素的首元素地址和每个元素占用的地址空间并组给出多维数组的维数,然后要求你求出该数组中的某个元素所在的位置。
2.明确按行存储和按列存储的区别和联系
3.将特殊矩阵中的元素按相应的换算方式存入数组中。
这些矩阵包括:对称矩阵,三角矩阵,具有某种特点的稀疏矩阵等。
熟悉稀疏矩阵的三种不同存储方式:三元组,带辅助行向量的二元组,十字链表存储。
掌握将稀疏矩阵的三元组或二元组向十字链表进行转换的算法。
4.广义表的概念,特别应该明确表头与表尾的定义。
这一点,是理解整个广义表一节算法的基础。
5.与广义表有关的递归算法。
由于广义表的定义就是递归的,所以,与广义表有关的算法也常是递归形式的。
比如:求表深度,复制广义表等。
这种题
目,可以根据不同角度广义表的表现形式运用两种不同的方式解答:一是把一个广义表看作是表头和表尾两部分,分别对表头和表尾进行操作;二是把一个广义表看作是若干个子表,分别对每个子表进行操作。
第六章1.二叉树的概念、性质和存储结构
考查方法可有:直接考查二叉树的定义,让你说明二叉树与普通双分支树的区别;考查满二叉树和完全二叉树的性质,普通二叉树的五个性质:第i层的最多结点数,深度为k的二叉树的最多结点数,n0=n2+1
的性质,n个结点
的完全二叉树的深度,顺序存储二叉树时孩子结点与父结点之间的换算关系(左为:2*i,右为:2*i+1)。
2.二叉树的三种遍历算法
二叉树的遍历算法有三种:先序,中序和后序。
其划分的依据是视其每个算法中对根结点数据的访问顺序而定。
不仅要熟练掌握三种遍历的递归算法,理解其执行的实际步骤,并且应该熟练掌握三种遍历的非递归算法。
由于二叉树一章的很多算法,可以直接根据三
种递归算法改造而来(比如:求叶子个数),所以,掌握了三种遍历的非递归算法后,对付诸如:“利用非递归算法求二叉树叶子个数”
3.可在三种遍历算法的基础上改造完成的其它二叉树算法:
求叶子个数,求二叉树结点总数,求度为1或度为2的结点总数,复制二叉树,建立二叉树,交换左右子树,查找值为n的某个指定结点,删除值为n的某个指定结点,诸如此类等等等等。
如果你可以熟练掌握二叉树的递归和非递
归遍历算法,那么解决以上问题就是小菜一碟了。
4.线索二叉树:
线索二叉树的引出,是为避免如二叉树遍历时的递归求解。
对于线索二叉树,应该掌握:线索化的实质,三种线索化的算法,线索化后二叉树的遍历算法,基本线索二叉树的其它算法问题(如:查找某一类线索二叉树中指定结点的前驱或后继结点就是一类常考题)。
5.最优二叉树(哈夫曼树):
最优二叉树是为了解决特定问题引出的特殊二叉树结构,它的前提是给二叉树的每条边赋予了权值,这样形成的二叉树按权相加之和是最小的。
6.树与森林:
二叉树是一种特殊的树,这种特殊不仅仅在于其分支最多为2以及其它特征,一个最重要的特殊之处是在于:二叉树是有序的!即:二叉树的左右孩子是不可交换的,如果交换了就成了另外一棵二叉树,这样交换之后的二叉树与原二叉树我们认为是不相同的两棵二叉树。
但是,对于普通的双分支树而言,不具有这种性质。
树与森林的遍历,不像二叉树那样丰富,他们只有两种遍历算法:先根与后根(对于森林而言称作:先序与后序遍历)。
在难度比较大的考试中,也有基于此种算法的基础上再进行扩展要求你利用这两种算法设计其它算法的,但一般院校很少有这种考法,最多只是要求你根据先根或后根写出他们的遍历序列。
此二者的先根与后根遍历与二叉树中的遍历算法是有对应关系的:先根遍历对应二叉树的先序遍历,而后根遍历对应二叉树的中序遍历。
第七章图
图这一章的特点是:概念繁多,与离散数学中图的概念联系紧密,算法复杂与图两章的知识这一章的重点是:图的定义和特点,
无向图,有向图,入度,出度,完全图,生成子图,路径长度,回路,连通图,(强)连通分量等概念。
2.图的几种存储形式:
图的存储形式包括:邻接矩阵,(逆)邻接表,十字链表及邻接多重表。
3.图的两种遍历算法:深度遍历和广度遍历
深度遍历和广度遍历是图的两种基本的遍历算法,这两个算法对图一章的重要性等同于“先序、中序、后序遍历”对于二叉树一章的重要性。
在考查时,图一章的算法设计题常常是基于这两种基本的遍历算法而设计的,比如:“求最长的最短路径问题”和“判断两顶点间是否存在长为K的简单路径问题”,就分别用到了广度遍历和深度遍历算法。
4.生成树、最小生成树的概念以及最小生成树的构造RIM算法和KRUSKAL
7.最短路径问题:
最短路径问题分为两种:一是求从某一点出发到其余各点的
最短路径;二是求图中每一对顶点之间的最短路径。
主要还是体现在平时做实验的时候,因为做其他课的实验最起码会知道一些基本的做法,但是遇到数据结构就会发现真的很难,有时真的什么都不会,看也看不懂,感觉很吃力,就感觉数据结构这个模块不简单,有点复杂,总体感觉学不好,但是上次期中考试时候,发现也不是传说中的那么难,有些题真的很死,可以用固定的方法去写,但是那种题不多,大部分的题还是要自己去构造一种思想,并用代码实现它!感觉这样的题不好做,有点难度!其实,刚开始讲的时候,因为课下没有预习,上课节奏也没有跟上,所以就失去信心了。
这几天,因为考试在即,所以花了一些功夫复习,自我感觉收获还算不小,最起码了解了一些,学到了一些!但是课程已经结束了,还
是感觉缺少很多,所以自己还是要其他方面多多努力,接下来的复习还是要靠自己理解,如果理解好了以后对做题的帮助确实不小,所以说,理解透彻了就好办了!现在大多是自学,相比以前的学习方法,感觉有点不一样,但是我相信如果努力还会有很大的提高的。