数据结构
文章平均质量分 83
BeingLucky
未来再远,远不过我一路向前的步伐!
展开
-
使用栈完成中缀表达式转后缀表达式
后缀表达式也称为逆波兰表达式。求后缀表达式的过程有很多种,这里给出利用栈实现的过程。现代编译器不会直接将算术表达式转化成机器层的代码。而是使用一个中间形式,成为后缀表达法。在后缀表达式中,运算符紧随在它的操作数的后面,例如,给出中缀表达式a+b它的后缀形式就是ab+,对于a+b*c,后缀形式就是abc*+,说白了就是表达式树的后序遍历。有了后缀表达式可以很容易的进行表达式求值。上面的例子中计算原创 2017-01-28 12:44:17 · 727 阅读 · 0 评论 -
中缀表达式转前缀表达式
在前缀表达式中,运算符直接放在操作数的前面。例如:a+b +ab。a-b*c -a*bc。a+(c-h)/(b*d) +a/-ch*bd。其实就是表达式树的先序遍历。前缀表达式得到后缀表达式过程:有操作数跟运算符栈。中缀表达式中没遇到一个操作数,入操作数栈,运算符栈跟前缀得到后缀表达式一样。假设刚从运算符栈中弹出一个元素,然后从操作数栈弹出两个元素,opnd1跟opnd2.(opnd原创 2017-01-29 19:22:45 · 1417 阅读 · 0 评论 -
二叉排序树(折半查找树)模板类实现
折半查找树也叫做二叉排序树。所谓的折半查找树就是左子树的所有节点都比跟节点小,右子树的所有节点都比根节点大(不考虑有重复元素的情况)。上图就是一颗典型的排序二叉树。它是平衡排序二叉树(AVL)的基础。可以很容易的看出来,上图的dfs序就是从小到大排好序的。以下内容来自数据结构与STL。BinSearchTree类的字段如下:#ifndef _BIN_SEARCH_TREE_原创 2017-01-29 19:55:49 · 3832 阅读 · 0 评论 -
二叉堆
#include class Heap{ public: int* array; int count; int size; Heap(int size){ array=new int[size]; this->count=0; this->size=size; } int parent(int i){ if(i=this->count){原创 2017-09-20 21:43:39 · 266 阅读 · 0 评论 -
平衡二叉树实现
平衡因子:左子树和右子树高度差。用HB(k)表示。每一个节点都有这么一个平衡因子。AVL中所有节点的HB(k)的绝对值不大于1AVL树最少节点高度:设AVL树高h,N(h)表示树高为h的AVL树的节点数。最少节点数出现在这种情况下:左子树高为h-1,右子树高为h-2.N(h)=N(h-1)+N(h-2)+1;h=1.44lognAVL树最多节点高度:N(h)=2N(h-1)原创 2017-10-02 16:05:02 · 327 阅读 · 0 评论 -
线段树
敌兵布阵#include #define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=55555;int sum[maxn<<2];void pushUp(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){//l,r是原创 2017-10-03 11:37:46 · 286 阅读 · 0 评论