数据结构
Emily静
无愧于心
展开
-
(STL) vector的简单用法和实现
vector:能够操作多种数据结构和算法的模板类和函数库的C++标准模板库;是一个容器可以存放任意类型的对象,所以可以看作是一个能够存放任意类型的动态数组或顺序表。STL里的vector是由三个指针来维护的:_start(数据存放开始的位置),_finish(数据存放结束位置的下一个),_endofstorage(容量的最后一个位置)。Vector的简单使用:^使用vector需要加上头文件#inc原创 2017-12-17 22:36:03 · 1326 阅读 · 0 评论 -
红黑树原理及实现
红黑树: 一颗二叉搜索树,每个节点上增加了一个存储位来表示节点的颜色,通过对任意一条叶子节点到根节点的路径上的颜色进行约束,保证最长路径不超过最短路径的两倍,因此红黑树是近似平衡。 红黑树因为是近似平衡,在构建红黑树的时候触发的旋转自然要比AVL树少(AVL树触发旋转是左子树和右子树高度之差的绝对值大于1),构建树的效率降低; 红黑树的时间复杂度是O(n*logN),AVL树的时间...原创 2018-05-03 16:45:28 · 5126 阅读 · 0 评论 -
AVL树(平衡搜索二叉树)
二叉搜索树具有很高的灵活性,,对其进行优化可以生成平衡搜索二叉树。 AVL树为高度平衡的二叉搜索树,能保持二叉树的高度平衡,尽量降低二叉树的高度,减少树的平均搜索长度。 AVL树增删查改的效率都是O(lgN)。AVL树的特性: 左子树和右子树高度之差绝对值不超过1; 树中的每个左子树和右子树都应该是AVL树;每个节点都有一个平衡因子,任一节点的平衡因子都等于右子树高度减去左子树高度,且...原创 2018-05-01 17:40:59 · 307 阅读 · 0 评论 -
哈夫曼树原理和实现
哈夫曼树: n个带权值节点构造的二叉树中带权路径长度最短的二叉树,并且n个节点都是叶子节点,只有叶子节点才是有效的节点,又称为最优二叉树; 带权路径长度(WPL): 树中所有叶子节点到根节点的路径长度和该叶子节点权值乘积之和。 WPL=W1*L1+W2*L2+…+Wi*Li; Wi:表示第i个叶子节点的权值; Li:表示第i个叶子节点到根节点的路径长度。构造哈夫曼树: ...原创 2018-05-01 10:48:58 · 735 阅读 · 0 评论 -
专题:二叉搜索树节点的删除
二叉搜索树节点的删除较节点的插入和查找难以理解,涉及到以下情况: 节点为空时直接返回false; if (_root == NULL) { return false; } 有一个节点的时候,判断要删除的值是否和节点的权值相等,相等删除并返回true;不想等删除失败返回false; if (_ro...原创 2018-03-21 16:03:41 · 358 阅读 · 0 评论 -
线索化二叉树(前序线索化,中序线索化)
为什么要对二叉树进行线索化? 对二叉树进行遍历是以一定的规则将二叉树的节点排列成一个线性序列,这些线性序列有且仅有一个直接前驱和直接后继,但是以二叉链表进行存储的时候,只能找到节点的左右孩子信息,不能直接得到节点在任一序列的前驱和后继信息,前驱和后继信息只能在遍历的动态过程中才能得到。如何获取到前驱和后继的信息呢? 在有n个节点的二叉链表中必定存在n+1个空链域,利用这些空链域存放节点的前原创 2018-03-13 10:15:21 · 32799 阅读 · 4 评论 -
堆实现及堆的基本接口
堆的实质是一个完全二叉树并具有以下属性:每一个子树的父节点都大于或等于左右孩子节点,这种堆称为大堆;每一个子树的父节点都小于或等于左右孩子节点,这种堆称为小堆。由于堆的父节点和子节点之间有清楚地表示方法,所以堆可以不采用链式存储,这时堆是用顺序结构进行存储的,用STL中的vector存储数据。 设父节点的编号是m,则左孩子节点的编号是m*2+1,右孩子节点的编号是m*2+2; 设...原创 2018-03-16 09:18:47 · 607 阅读 · 0 评论 -
二叉树的递归和非递归遍历
二叉树的遍历 前序遍历: 遍历顺序:根节点,左子树,右子树 递归遍历:访问根节点,递归调用再访问左子树,右子树//前序遍历 void PrevOrder() { _PrevOrder(_root); cout << endl; } void _PrevOrder(Node* root) { if (r原创 2018-01-02 18:13:31 · 1512 阅读 · 1 评论 -
二叉树建立,复制,销毁及简单接口
二叉树:节点最多只有两个子树,有左右之分,次序不可颠倒。 二叉树的建立利用先序序列递归建立二叉树:给定一个先序遍历数组用链表创建二叉树。 建立一个二叉树节点类://二叉树节点的类template<class T>struct BinaryTreeNode{ //节点的构造函数 BinaryTreeNode(const T& x) :_data(x) ,原创 2018-01-02 09:19:34 · 681 阅读 · 0 评论 -
(STL) list的简单用法和实现
List是由数据结构中的双向链表实现的可以高效地支持任意地方的删除和插入;内存空间可以是不连续的,只能通过指针来进行数据的访问,使得它的随机存取变的非常没有效率。 使用C++标准库里面的list时需加头文件#include<list>,且是属于std域,所以还应加上using namespace std.list的部分函数操作: begin() 返回容器中第一个元素的迭代器,和fro原创 2017-12-18 11:58:10 · 229 阅读 · 0 评论 -
快速排序
在排序的数据中选取一个基准值,根据自身需要将大于或小于该基准值的数据放在对应的左右两边,再对左右两边进行如上的分区,直到区间里面只剩下一个是数据 快速排序分为三种: 左右指针法: 给定一个数组,左指针left指向数组的开始位置,右指针right指向数组的最后一个位置,left指针向后找比基准值大的数据,right指针向前找比基准值小的数据,找到之后进行交换,现在将数组分为两部分,再分别对两个...原创 2018-08-02 16:11:54 · 119 阅读 · 0 评论