![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 77
大彤小忆
永远不要停下前进的脚步^o^
展开
-
浙大版数据结构学习系列内容汇总
一、基本概念二、线性结构三、树四、图五、排序六、散列查找一、基本概念数据结构(一)—— 基本概念数据结构(一)基本概念 —— 编程作业 01:最大子列和问题数据结构(一)基本概念 —— 编程作业 02 :Maximum Subsequence Sum数据结构(一)基本概念 —— 编程作业 03 :二分查找二、线性结构数据结构(二)—— 线性结构(1):线性表数据结构(二)—— 线性结构(2):堆栈数据结构(二)—— 线性结构(3):队列数据结构(二)—— 线性结构(4):应用实例.原创 2021-06-09 17:55:40 · 3650 阅读 · 0 评论 -
数组和链表
当需要将数据存储到内存时,请求计算机提供存储空间,计算机会给出一个存储地址。需要存储多项数据时,有两种基本方式 —— 数组和链表。 假如需要在内存中存储一系列元素,使用数组进行存储的话,意味着所有待插入的元素在内存中都是相连的。 例如需要在内存中存储3个元素,向计算机申请一块存储空间将这3个元素存储后,又需要存储第4个元素,但发现后面的内存被占用了,这个时候就得请求计算机重新分配一块可以容纳4个元素的内存,在将所有元素都移到那里。这时如果又需要多存储1个元素,而后面也没有空间,就得再次全部转移!原创 2021-06-10 16:10:14 · 695 阅读 · 0 评论 -
数据结构(六)散列查找 —— 编程作业04 :Hashing - Hard Version
题目描述: 给定一个大小为N的哈希表,定义一个哈希函数H(x)=x%N,假设使用线性探测来解决冲突,我们可以很容易地获得给定输入数字序列的哈希表的状态。 但是,现在要求您解决相反的问题:从哈希表的给定状态重建输入序列。每当有多个选择时,总是取最小的数。 输入格式: 每个输入文件包含一个测试用例。 对于每个测试用例,第一行包含一个正整数N (≤1000),是哈希表的大小。 下一行包含N个整数,用空格隔开。负整数表示哈希表中的空单元格。保证表中所有非负整数原创 2021-06-09 15:46:12 · 1085 阅读 · 0 评论 -
数据结构(六)散列查找 —— 编程作业03 :QQ帐户的申请与登录
题目描述: 实现QQ新帐户申请和老帐户登录的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。 输入格式: 输入首先给出一个正整数N(≤105^55),随后给出N行指令。 每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登录,后面是登录信息。 QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是原创 2021-06-09 10:36:57 · 2226 阅读 · 0 评论 -
数据结构(六)散列查找 —— 编程作业02 :Hashing
题目描述: 这个问题的任务很简单,在哈希表中插入一系列截然不同的正整数,并输出输入数字的位置。哈希函数被定义为H(key)=key%TSize,其中TSize是哈希表的最大尺寸。平方探测(仅正增量)用于解决冲突。 请注意,表的大小最好是素数。如果用户给出的最大尺寸不是素数,必须将表的尺寸重新定义为比用户给出的尺寸大的最小素数。 输入格式: 每个输入文件包含一个测试用例。 对于每种情况,第一行包含两个正数:MSize (≤104^44)和N (≤MSize ),它们分别是用户定义的原创 2021-06-09 09:21:26 · 1067 阅读 · 0 评论 -
数据结构(六)散列查找 —— 编程作业01 :电话聊天狂人
题目描述: 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N(≤105^55 ),为通话记录条数。 随后N行,每行给出一条通话记录。 简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。 输出格式: 在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。 如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。 输入样例:413原创 2021-06-08 22:55:56 · 2419 阅读 · 1 评论 -
数据结构(六)—— 散列查找(5):应用实例 —— 词频统计
5. 应用实例 —— 词频统计5. 应用实例 —— 词频统计 应用: 文件中单词词频统计 例: 给定一个英文文本文件,统计文件中所有单词出现的频率,并输出词频最大的前10%的单词及其词频。 假设单词字符定义为大小写字母、数字和下划线,其它字符均认为是单词分隔符,不予考虑。 分析: 关键是对新读入的单词在已有单词表中查找,如果已经存在,则将该单词的词频加1,如果不存在,则插入该单词并记词频为1。 如何设计该单词表的数据结构才可以进行快速地查找和插入? 散列表!int m.原创 2021-06-08 21:25:20 · 1331 阅读 · 0 评论 -
数据结构(六)—— 散列查找(4):散列表的性能分析
4. 散列表的性能分析4.1 线性探测法的查找性能4.2 平方探测法和双散列探测法的查找性能4.3 分离链接法的查找性能4.4 开放地址法 vs 分离链法4. 散列表的性能分析 ⋆\star⋆ 平均查找长度(ASL)用来度量散列表查找效率:成功、不成功 ⋆\star⋆ 关键词的比较次数,取决于产生冲突的多少 影响产生冲突多少有以下三个因素: (1)散列函数是否均匀; (2)处理冲突的方法; (3)散列表的装填因子α。 分析: 不同冲突处理方法、装填因子对效率的.原创 2021-06-08 21:07:14 · 2272 阅读 · 1 评论 -
数据结构(六)—— 散列查找(3):冲突处理方法
3. 冲突处理方法3.1 处理冲突的方法3.2 开放定址法3.2.1 线性探测法(Linear Probing)3.2.2 平方探测法(Quadratic Probing)3.2.3 双散列探测法(Double Hashing)3.2.4 再散列(Rehashing)3.3 分离链接法(Separate Chaining)3.4 冲突处理方法的实现3.4.1 平方探测法处理冲突3.4.2 分离链接法处理冲突3. 冲突处理方法3.1 处理冲突的方法 常用处理冲突的思路: ⋄\diamo.原创 2021-06-08 17:07:38 · 2985 阅读 · 0 评论 -
数据结构(六)—— 散列查找(2):散列函数的构造方法
2. 散列函数的构造方法2.1 数字关键词的散列函数构造2.2 字符关键词的散列函数构造2. 散列函数的构造方法 一个 “好”的散列函数一般应考虑下列两个因素: 1. 计算简单,以便提高转换速度; 2. 关键词对应的地址空间分布均匀,以尽量减少冲突。2.1 数字关键词的散列函数构造 1.直接定址法: 取关键词的某个线性函数值为散列地址,即h(key)=a×key+bh(key) = a \times key + bh(key)=a×key+b.原创 2021-06-08 10:15:18 · 1344 阅读 · 0 评论 -
数据结构(六)—— 散列查找(1):散列表
1. 散列表1.1 散列表概述1.2 散列表的抽象数据类型定义1.3 散列的基本思想1. 散列表1.1 散列表概述 散列表(Hash table),也叫哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,.原创 2021-06-07 22:31:40 · 2597 阅读 · 0 评论 -
数据结构(五)—— 排序
常用的排序算法:冒泡排序算法简单选择排序算法直接插入排序算法折半插入排序算法希尔排序算法快速排序算法归并排序算法堆排序算法计数排序算法桶排序算法基数排序算法十大排序算法总结...原创 2021-06-07 18:23:20 · 1254 阅读 · 0 评论 -
数据结构(四)—— 图(5):拓扑排序
5. 拓扑排序5. 拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。 例: 计算机专业排课如下表所示。假定一个计算机专业的学生必须完成列出的全.原创 2021-06-06 17:53:04 · 1298 阅读 · 0 评论 -
数据结构(四)图 —— 编程作业 07 :公路村村通
题目描述: 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)。 随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。 为简单起见,城镇从1到N编号。 输出格式: 输出村村通需要的最低成本。 如果输入数据不足以保证畅通,则输出−1,表示需要建设更原创 2021-06-06 15:31:54 · 2050 阅读 · 0 评论 -
数据结构(四)—— 图(4):最小生成树问题
4. 最小生成树问题4.1 什么是最小生成树4.2 贪心算法4.2.1 Prim算法4.2.2 Kruskal算法4.3 最小树生成问题的实现4.3.1 Prim算法的实现4.3.2 Kruskal算法的实现4. 最小生成树问题4.1 什么是最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 最小生成树(Minimum Spanning .原创 2021-06-06 10:49:13 · 2637 阅读 · 2 评论 -
数据结构(四)图 —— 编程作业 06 :旅游规划
题目描述: 有了一张自驾旅游路线图,就会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。 输入格式: 输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。 随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2原创 2021-06-05 16:51:09 · 1516 阅读 · 0 评论 -
数据结构(四)图 —— 编程作业 05 :Saving James Bond - Hard Version
题目描述: 在电影"Live and Let Die"(Live and Let Die)中有一个情节,世界上最著名的间谍007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 他跳到离他最近的鳄鱼的头上,在鳄鱼还没意识到发生了什么之前,又跳到下一个鳄鱼的头上… …最后,他在最后一条鳄鱼咬住他之前上岸,成功逃脱! 假设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布原创 2021-06-05 11:16:33 · 967 阅读 · 0 评论 -
数据结构(四)图 —— 编程作业 04 :哈利·波特的考试
题目描述: 哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。 现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这只动物变成任意一只指定原创 2021-06-04 23:12:59 · 1091 阅读 · 0 评论 -
数据结构(四)—— 图(3):最短路径问题
3. 最短路径问题3.1 最短路径问题的抽象3.2 问题分类3.3 单源最短路算法3.3.1 无权图的单源最短路算法3.3.2 有权图的单源最短路算法3.4 多源最短路算法3. 最短路径问题3.1 最短路径问题的抽象 在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径: ⋄\diamond⋄ 这条路径就是两点之间的最短路径(shortestPath) ⋄\diamond⋄ 第一个顶点为源点(Source) ⋄\diamond⋄ 最后一个顶点为终点(Des.原创 2021-06-04 11:24:40 · 1413 阅读 · 0 评论 -
数据结构(四)图 —— 编程作业 03 :六度空间
题目描述: “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”,如下图所示。 “六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时原创 2021-06-02 22:59:46 · 2276 阅读 · 2 评论 -
数据结构(四)图 —— 编程作业 02 :Saving James Bond - Easy Version
题目描述: 在电影"Live and Let Die"(Live and Let Die)中有一个情节,世界上最著名的间谍007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 他跳到离他最近的鳄鱼的头上,在鳄鱼还没意识到发生了什么之前,又跳到下一个鳄鱼的头上… …最后,他在最后一条鳄鱼咬住他之前上岸,成功逃脱! 假设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄原创 2021-06-02 21:09:11 · 1213 阅读 · 0 评论 -
数据结构(四)图 —— 编程作业 01 :列出连通集
题目描述: 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数N(0 < N ≤ 10)和E,分别是图的顶点数和边数。 随后E行,每行给出一条边的两个端点。 每行中的数字之间用1空格分隔。 输出格式: 按照"{v1,v2,...,vk}\{v_{1}, v_{2},...,v_{k}\}{v1,原创 2021-06-02 16:10:58 · 1170 阅读 · 0 评论 -
数据结构(四)—— 图(2):图的遍历
2. 图的遍历2.1 深度优先搜索2.2 广度优先搜索2.3 广度优先搜索与深度优先搜索的对比2.4 图不连通怎么办?2. 图的遍历2.1 深度优先搜索 深度优先搜索(Depth First Search, DFS)属于图算法的一种,是一个针对图和树的遍历算法。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再.原创 2021-06-02 10:40:43 · 1607 阅读 · 2 评论 -
数据结构(四)—— 图(1):什么是图
1. 什么是图1.1 图的概述1.2 抽象数据类型定义1.3 常见术语1.4 怎么在程序中表示一个图1.4.1 邻接矩阵1.4.2 邻接表1. 什么是图1.1 图的概述 图(Graph): ∙\bullet∙ 表示“多对多”的关系 ∙\bullet∙ 包含 ⋄\diamond⋄ 一组顶点:通常用 V(Vertex)表示顶点集合 ⋄\diamond⋄ 一组边:通常用 E(Edge)表示边的集合 ⋅\cdot⋅ 边是顶点对:(v, w)∈∈∈ E,其中 v,w ∈.原创 2021-06-01 20:22:55 · 1551 阅读 · 0 评论 -
数据结构(三)—— 树(11):红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 红黑树作为一棵二叉查找树,满足二叉查找树的一般性质,二叉查找树的性质见数据结构(三)—— 树(5):二叉搜索树。 红黑树虽然本质上是一棵原创 2021-06-01 22:14:30 · 1310 阅读 · 1 评论 -
数据结构(三)树 —— 编程作业 11 :Huffman Codes
题目描述: 1953年,David A. Huffman发表了他的论文“A Method for the Construction of Minimum-Redundancy Codes”,因此他的名字被印在了计算机科学史上。作为一个期末考试题目是关于哈夫曼编码的教授,我遇到了一个大问题:哈夫曼编码不是唯一的。例如,给定一个字符串“aaaxuaxz”,我们可以观察到字符a、x、u和z的频率分别为4,2,1和1。我们可以将符号编码为{a =0, x =10, u =110, z =111},或者用另一种方原创 2021-05-31 17:28:06 · 1509 阅读 · 1 评论 -
数据结构(三)树 —— 编程作业 10 :File Transfer
题目描述: 我们有一个计算机网络和一个双向连接列表。这些连接中的每一个都允许文件从一台计算机传输到另一台计算机。是否有可能将文件从网络上的任何一台计算机发送到任何其他计算机? 输入格式: 每个输入文件包含一个测试用例。 对于每个测试用例,第一行包含N (2 ⩽\leqslant⩽ N ⩽\leqslant⩽ 10410^{4}104),表示网络中计算机的总数。网络中的每台计算机都用1到N之间的一个正整数表示。 然后在下面几行中,输入以这种格式给出:I c1 c2原创 2021-05-31 11:20:00 · 1366 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 09 :堆中的路径
题目描述: 将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。 输入格式: 每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。 下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。 最后一行给出M个下标。 输出格式: 对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。 数字间以1个空格分隔,行末原创 2021-05-29 21:53:22 · 1981 阅读 · 1 评论 -
数据结构(三)—— 树(10):集合及运算
10. 集合及运10.1 集合的表示10.2 集合运算10.3 并查集的实现10. 集合及运10.1 集合的表示 集合运算: 交、并、补、差,判定一个元素是否属于某一集合。 并查集: 集合并、查某元素属于什么集合。并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。 并查集问题中集合存储如何实现? ⋄\diamond⋄ 可以用树结构表示集合,树的每个结点代表一个集合元素。 例如,有三个整数集合S1={1,2,4,7}、S2={3,5.原创 2021-05-29 17:28:29 · 2163 阅读 · 0 评论 -
数据结构(三)—— 树(9):哈夫曼树和哈夫曼编码
9. 哈夫曼树和哈夫曼编码9.1 什么是哈夫曼树9.2 哈夫曼树的构造9.3 哈夫曼编码9.4 最小堆实现哈夫曼树9. 哈夫曼树和哈夫曼编码9.1 什么是哈夫曼树 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 例: 将百分制的考试成绩转换成五分制的成绩。if(score < 60 ) grade =1;else if(scor.原创 2021-05-29 11:50:40 · 2127 阅读 · 1 评论 -
数据结构(三)—— 树(8):堆
8. 堆8.1 什么是堆8.2 堆的抽象数据类型描述8.3 最大堆的操作8.3.1 最大堆的创建8.3.2 最大堆的插入8.3.3 最大堆的删除8.3.4 最大堆的建立8.3.5 最大堆的操作实现8. 堆8.1 什么是堆 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆总是满足下列性质: 1. 堆中某个结点的值总是不大于或不小于其父结点的值; 2. 堆总是一棵完全二叉树。 将根结点最大的堆叫做最大堆或大根堆,根结点最小的.原创 2021-05-28 21:46:07 · 2054 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 08 :二叉搜索树的操作集
题目描述: 本题要求实现给定二叉搜索树的5种常用操作。 函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST ); 其中BinTree结原创 2021-05-27 21:17:59 · 1733 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 07 :Complete Binary Search Tree
题目描述: 一棵二叉搜索树(BST)被递归定义为具有以下特性的一棵二叉树: ∙\bullet∙ 一个结点的左子树只包含键值小于该结点键值的结点; ∙\bullet∙ 一个结点的右子树只包含键值大于或等于该结点键值的结点; ∙\bullet∙ 左子树和右子树也必须是二叉搜索树。 完全二叉树(CBT)是一棵完全填充的树,除了底层,它是从左到右填充的。 现在给定一个不同的非负整数序列,如果要求树必须也是CBT,则可以构造一个原创 2021-05-27 17:50:16 · 1622 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 06 :Root of AVL Tree
题目描述: AVL树是一种自平衡二叉搜索树。在AVL树中,任意节点的两个子树的高度最多相差1。如果在任何时候它们的差超过1,则会进行重新平衡以恢复此属性。旋转规则如下图所示。 现给定一个插入序列,需要得到的AVL树的根。 输入格式: 每个输入文件包含一个测试用例。 对于每种情况,第一行包含一个正整数N(⩽\leqslant⩽ 20),为要插入的元素的总数。 然后在下一行给出N个不同的整数元素。 一行中的所有数字都用空格隔开。 输出格式: 对于原创 2021-05-27 15:39:39 · 1730 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 05 :是否同一棵二叉搜索树
题目描述: 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。任务是对于输入的各种插入序列,判断它们是否能生成一样的二叉搜索树。 输入格式: 输入包含若干组测试数据。 每组数据的第1行给出两个正整数 N (≤10) 和 L,分别是每个序列插入元素的个数和需要检查的序列个数。 第2行给出N个以空格分隔的正整数,作为初始插原创 2021-05-27 11:40:43 · 1991 阅读 · 0 评论 -
数据结构(三)—— 树(7):是否同一棵二叉搜索树
题意理解: ⋆\star⋆ 给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如,按照序列{2,1,3}和{2,3,1}插入初始为空的二叉搜索树,都得到一样的结果。 ⋆\star⋆ 问题: 对于输入的各种插入序列,需要判断它们是否能生成一样的二叉搜索树。 输入和输出样例: 输入样例第一行的4 2中4代表第一组的二叉搜索树有4个结点,2代表后面有两棵树需要与前面比较是否一样;第二行3 1 4 2代表输入的第一组序列;后面的第三原创 2021-05-23 23:02:18 · 5517 阅读 · 0 评论 -
数据结构(三)—— 树(6):平衡二叉树
6. 平衡二叉树6.1 什么是平衡二叉树6.2 平衡二叉树的调整6.2.1 RR旋转6.2.2 LL旋转6.2.3 LR旋转6.2.4 RL旋转6. 平衡二叉树6.1 什么是平衡二叉树 平衡二叉树一般指平衡树。平衡树(Balance Tree,BT) 指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。平衡树可以完成集合的一系列操作,时间复杂度和空间复杂度相对于“2-3树”要低,在完成集合的一系列操作中始终保持平衡,为大型数据库的组.原创 2021-05-23 17:32:11 · 2628 阅读 · 1 评论 -
数据结构(三)—— 树(5):二叉搜索树
这里写目录标题5. 二叉搜索树5.1 什么是二叉搜索树5.2 二叉搜索树操作5.2.1 查找5.2.2 插入5.2.3 删除5.2.4 二叉搜索树操作实现5. 二叉搜索树5.1 什么是二叉搜索树 查找问题: 1. 静态查找与动态查找 2. 针对动态查找,数据如何组织? 二叉搜索树(Binary Search Tree, BST)又称二叉查找树或二叉排序树。一棵二叉搜索树是以二叉树来组织的,可以使用一个链表数据结构来表示,其中每一个结点就是一个对象。一般地,除了key和卫星数据之外原创 2021-05-23 13:05:07 · 2083 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 04 :根据后序和中序遍历输出先序遍历
题目描述: 本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。 输入格式: 第一行给出正整数N(≤30),是树中结点的个数。 随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。 题目保证输入正确对应一棵二叉树。 输出格式: 在一行中输出Preorder: 以及该树的先序遍历结果。 数字间有1个空格,行末不得有多余空格。 输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7原创 2021-05-27 10:55:46 · 2431 阅读 · 0 评论 -
数据结构(三)树 —— 编程作业 03:Tree Traversals Again
题目描述: 可以使用堆栈以非递归的方式实现二叉树的中序遍历。例如,假设在遍历一棵6结点的二叉树(值从1到6)时,堆栈操作为:push(1); push(2); push(3); pop(); pop(); push(4); pop(); pop(); push(5); push(6); pop(); pop(),然后可以从这个操作序列生成一个唯一的二叉树(如图1所示)。任务是给出这棵树的后序遍历序列。图1 输入格式: 每个输入文件包含一个测试用例。 对于每个样例,第一行包含一个正整原创 2021-05-26 22:39:57 · 1802 阅读 · 0 评论