数据结构
文章平均质量分 67
寂寂寂寂寂蝶丶
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
平衡二叉树(AVL树)
平衡二叉树是一种,其中每一个节点的,它是一种高度平衡的二叉排序树,我们将二叉树上节点的左子树深度减去右子树深度的值称为,那么平衡二叉树上所有结点的平衡因子只可能是。只要二叉树上有一个节点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。平衡二叉树的查找,是比较理想的一种动态查找表算法。距离,且平衡因子的绝对值大于1的结点为根的子树,称为。原创 2024-11-13 19:00:53 · 508 阅读 · 0 评论 -
二叉排序树
在说二叉排序树之前先考虑这样一个例子,假设我们的数据集开始只有一个数{62},然后现在需要将88插入数据集,于是数据集成了{62,88},还保持着从小到大有序,再查找有没有58,没有则插入,可此时要想在线性表的顺序存储中有序,就得移动62和88的位置,如图所示,可不可以不移动呢?当然是可以,那就是二叉树结构,当我们用二叉树的方式时,首先将第一个数62定为根结点,88因为比62大,因...原创 2024-11-13 16:53:28 · 846 阅读 · 0 评论 -
用俩个队列实现一个栈,实现压栈和出栈的功能
用俩个队列实现一个栈,实现压栈和出栈的功能#include <stdio.h>#include <iostream>#include <queue>using namespace std;class MyStack{public: //入栈 void push(const char & c) { q1.push(c)...原创 2018-04-09 16:34:09 · 407 阅读 · 0 评论 -
用俩个栈实现队列
用俩个栈实现一个队列,实现它的俩个函数appendTail和deleteHead。分别完成在队列尾部插入节点和在队列头部删除节点的功能#include <stdio.h>#include <iostream>#include <stack>using namespace std;class CQueue{public: CQueue(...原创 2018-04-09 14:51:21 · 159 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出它的二叉树,并输出它的头结点。#include <stdio.h>#include <iostream>using namespace ...原创 2018-04-09 13:56:16 · 179 阅读 · 0 评论 -
树的双亲孩子表示法、二叉链表
双亲孩子表示法:把每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空,然后n个头指针又组成一个线性表,采用顺序存储结构,存放一个一维数组中#define MAX_TREE_SIZE 100typedef struct ChildNode //孩子结点{ int childIndex; //孩子结点所在数组的下...原创 2019-03-15 14:00:32 · 3482 阅读 · 0 评论 -
满二叉树、完全二叉树、二叉树的性质
满二叉树:单是每个结点都存在左右子树不能算是满二叉树,还必须要所有的叶子都在同一层上,这就做到了整棵树的平衡,因此满二叉树的特点有:1.叶子只能出现在最下一层,出现在其他层就不可能达成平衡2.非叶子结点的度一定是23.在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多完全二叉树:对一棵具有n结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深...原创 2019-03-15 14:04:54 · 2242 阅读 · 0 评论 -
红黑树的效率比较高的原因
红黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。红黑树(red-black tree)是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。2. 根结点是黑色的。3. 所有叶子结点都是黑色的(实际上都是Null指针,下图用NIL表示)。叶子结点不包含...转载 2019-09-23 11:38:01 · 873 阅读 · 0 评论 -
反转链表 -剑指offer
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点思路:需要定义3个指针 分别指向 前一个节点、当前节点、后一个节点 循环的同时不仅需要更改3个节点相互指向的关系 还要注意 3个指针的移动问题 指针也要随着循环的进行 同时后移 才能保证程序正确执行注:此题的反转链表与 文章分类中:c/链表list/自实现链表相关操作 下的链表反转方法不同#includ...原创 2018-04-11 23:03:52 · 271 阅读 · 0 评论 -
合并俩个排序的链表
输入俩个递增排序的链表,合并这俩个链表并使新链表中的节点仍然是按照递增排序的#include <stdio.h>#include <iostream>using namespace std;struct ListNode{ int _value; struct ListNode* next;};ListNode* createList()...原创 2018-04-12 12:35:12 · 217 阅读 · 0 评论 -
剑指——二叉树的镜像
请完成一个函数,输入一个二叉树,该函数输出它的镜像思路:先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的俩个子节点。当交换完所有非叶子节点的左右子节点之后,就得到了树的镜像#include <stdio.h>#include <iostream>#include <string>using namespace std;stru...原创 2018-04-16 13:03:48 · 271 阅读 · 1 评论 -
顺序表查找以及优化
顺序表查找以及优化#include "stdafx.h"#include <iostream>#include <string>using namespace std;bool search1(int *a, int n, int key){ for (int i = 0; i <= n; i++) { if (a[i] == key) ...原创 2018-04-19 22:38:57 · 406 阅读 · 0 评论 -
添加头结点管理二叉树线索链表
添加头结点管理二叉树线索链表#include "stdafx.h"#include <iostream>#include <string>using namespace std;struct ThreadBinaryTree{ char data; struct ThreadBinaryTree* leftChild; struct ThreadBi...原创 2018-04-19 20:06:42 · 1055 阅读 · 4 评论 -
线索二叉树的结构实现
线索二叉树的结构实现#include "stdafx.h" #include <iostream> #include <string> using namespace std;struct ThreadBinaryTree{ char data; struct ThreadBinaryTree* leftChild; struct Thread...原创 2018-04-19 15:06:14 · 453 阅读 · 0 评论 -
剑指——二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意俩个数字都互不相同思路:后序遍历得到的序列中,最后一个数字是树的根节点的值,数组中前面的数字可以分为俩部分 第一部分是左子树节点的值,它们都比根节点的值小 第二部分是右子树节点的值,它们都比根节点大#include <stdio.h>#include...原创 2018-04-16 16:29:16 · 265 阅读 · 0 评论 -
剑指——从上往下打印二叉树(按层遍历)
从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。思路:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾,接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直至队列中所有节点都被打印出来为止#include <stdio.h>#include <iostream>#include <dequ...原创 2018-04-16 14:37:30 · 291 阅读 · 0 评论 -
二叉树的建立与遍历
二叉树的遍历:是指从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树的遍历方法:1.前序遍历(中左右):规则是若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再前序遍历右子树如图所示遍历顺序为:ABDGHCEIF2.中序遍历(左中右):中序遍历根结点的左子树,然后是访问个根结点,最后中序遍历右子树遍历顺序为:GD...原创 2018-04-14 12:12:07 · 444 阅读 · 0 评论 -
剑指——栈的压入、弹出序列
输入俩个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列 1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不是该压栈序列的弹出序列思路:定义一个协助栈stack 先往stack中放入push序列中的值,并将stack的栈顶与pop序列中的值进行比较,一定要先比较不相...原创 2018-04-13 22:44:23 · 213 阅读 · 0 评论 -
剑指——判断树的子结构
输入俩颗二叉树A和B,判断B是不是A的子结构。思路:1.在树A中找到和B的根节点的值一样的节点R 2.再判断树A中以R为根节点的子树是不是包含和树B一样的结构#include <stdio.h>#include <iostream>#include <string>using namespace std;struct BinaryTr...原创 2018-04-16 12:26:58 · 263 阅读 · 0 评论 -
有序表查找(折半查找与插值查找)
有序表查找(折半查找与插值查找)#include "stdafx.h"#include <iostream>#include <string>using namespace std;//折半查找的时间复杂度为O(logn) 但对于需要频繁执行插入或删除操作//的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用int Binary_Search...原创 2018-04-19 23:22:47 · 403 阅读 · 0 评论
分享