《王道机试》笔试:(二)数据结构

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、二叉排序树

既是二叉树,又因为父节点的权值必定大于左子树的权值,小于右子树


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值