数据结构
xiaodu655
这个作者很懒,什么都没留下…
展开
-
动态栈的实现,括号匹配问题,逆波兰表达式
1.动态顺序栈的实现#include<iostream>using namespace std;template<class T>class Stack{public: Stack() :_array(new T[3]) , _size(0) , _capacity(3) {} Stack(T*array, size原创 2017-11-16 19:32:05 · 187 阅读 · 0 评论 -
优先级队列
1.概念: 优先级队列允许用户以任何次序将任何元素堆入容器内,但取出时一定是从优先权最高的(也就是数值最高)的元素开始取,binary max heap正是具有这样的性质,适合作为优先级队列的底层结构。所谓binary heap就是一种完全二叉树,正操二叉树除了最底层的叶节点之外,是填满的,而最底层的叶节点由左至右又不得有空隙。那么堆算法在STL中的是:push_heap...原创 2018-08-20 11:05:59 · 983 阅读 · 1 评论 -
二叉树的相关概念
一、概念: 二叉树:二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两颗分别称为左子树和右子树的二叉树组成。 二叉树的特点: 1.每个结点最多有两颗子树,即二叉树不存在度大于2的结点。 2.二叉树的子树有左右之分,其子树的次序不能颠倒。满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上。 ...原创 2018-08-16 21:08:27 · 231 阅读 · 0 评论 -
栈和队列面试题
1.实现一个栈,要求实现Push(出栈)、pop(入栈)、min(返回最小值的操作)的时间复杂度为O(1)。 //方法:如果两个栈s1,s2作为辅助栈,每次压入s2都是s1的最小值,元素x入栈时,将x和s2栈顶元素进行比较,如果小于等于s2的栈顶,将x分别push到s1,s2,若x大于s2的栈顶,则将x push到s1中,如果s1.top()==s2.top(),s1和s2都执行pop操作,否则...原创 2018-08-16 19:59:47 · 252 阅读 · 0 评论 -
B树的基本定义与B树的插入
B树: 1.B树的概念: B树是平衡的多叉树,一个节点有多于两个(不能小于)结点的平衡多叉树。 缺点:浪费空间 2.B树的基本性质: <1>.根节点至少有两个孩子 <2>.每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子。 <3>.每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字。并以升序排列。 <4>.k...原创 2018-03-20 20:59:54 · 3653 阅读 · 1 评论 -
哈弗曼树
在介绍哈弗曼树之前先来看几个简单的概念: 在一个二叉树中: 定义一个从A结点到B结点所经过的分支序列为从A结点到B结点的路径。 定义从A结点到B结点所经过的分支个数为从A结点到B结点的路径长度。 从二叉树的根节点到二叉树中所有节点的路径长度之和为该二叉树的路径长度。 Huffman树:带权路径长度最短的树称为哈夫曼树。 Huffman树的创建:(用小堆来保存二叉树森林中的树)如in原创 2018-01-23 11:55:40 · 178 阅读 · 0 评论 -
排序(直接排序,快排,希尔排序,归并排序)
1.直接插入排序:基本算法:将第i个记录插入到前面第i-1个已经排好序的记录中。当插入第i(i>.=1)个元素时,前面的元素已经排好序,此时用array[i]与前面的元素进行比较,找到插入位置之后将array[i]插入,原来的位置上的元素顺序后移。 具体代码实现为:#includeusing namespace std;void InsertSort(int *array, si原创 2018-02-01 16:35:17 · 844 阅读 · 0 评论 -
二叉搜索树的递归形式
二叉树的非递归在上篇博客中已经写过了,现在来看递归形式。#includeiostream>#includeassert.h>using namespace std;templateclass k, class v>struct BSTreeNode{ BSTreeNode(const k&key, const v&value) :_pLeft(NULL)原创 2018-01-25 14:23:26 · 187 阅读 · 0 评论 -
堆的创建与应用以及堆排序
1.堆的概念: 如果有一个关键码的集合K={k0,k1,k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki=k2*i+1且ki>=k2*i+2)。(i=0,1,2,…)则称这个堆为最小堆(或最大堆)堆的特性: 用来存数据——>完全二叉树形式 任意结点满足:1.leftchild=2*i+1; 2.rightchild=2*i+2; 最原创 2018-01-22 19:24:44 · 243 阅读 · 0 评论 -
二叉搜索树
二叉搜索树:其又叫做二叉排序树,它或是一个空树,或是具有以下性质: 1、若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。 2、若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。 3、它的左右子树也分别为二叉搜索树。如下图所示的二叉搜索树: 给出具体的树的节点的结构如下:(左子树,右子树,key值,value值)templateclass k,class原创 2018-01-21 13:16:47 · 217 阅读 · 0 评论 -
二叉树部分相关练习题
二叉树:一颗二叉树是节点的的一个有限集合,此集合可为空可由一个根节点及左子树、右子树组成。原创 2017-12-02 20:30:06 · 598 阅读 · 0 评论 -
TopK问题
问题描述:100W个数中找出最大的前K个数。 问题解决方式: 找最大的数要建立小堆,原因是:若建大堆的话,其他更大的数没办法进入堆内。//TopK问题://100W个数中找出最大的前K个数。//建小堆#include<iostream>#include<vector>#include<assert.h>using nam...原创 2018-08-20 11:17:44 · 180 阅读 · 0 评论