1、栈的应用
栈的使用在c++里非常的简单,我们可以直接导入头文件<stack>,就可以对栈进行操作
#include <stack>
int main(){
stack<int> s;
s.push(1);
int a=s.top();
s.pop();
}
例如:典型的括号问题,将输入压入栈,遇到右括号就弹出栈进行匹配,如果栈空即无法匹配,说明错误
例如:简单计算器,使用两个栈,一个存放操作数,一个存放运算符,如果当前符号的优先级高于栈顶的符号,则进行计算,否则压入栈。
2、哈弗曼树
根节点到叶子节点的路径长度乘以该点的权值代表该点的带权路径长度。
即每次从集合中选取两个最小权值的节点形成新节点,这里我们可以使用STL里的优先队列priority_queue
#include <queue>
int main(){
priority_queue<int> s;
s.push(1);
s.push(10);
s.push(2);
}
priority_queue是大根堆,所以使用小根堆时是priority_queue<int,vector<int>,greater<int>>
3、二叉树
结构
struct Node{
Node *lnode;
Node *rnode;
}
中序遍历
void inorder(Node *t){
if(t->lnode!=NULL){
inorder(t->lnode);
}
...
if(t->rnode!=NULL){
inorder(t->rnode);
}
}
4、二叉排序树
既是二叉树,又因为父节点的权值必定大于左子树的权值,小于右子树