栈和队列
成龙大侠
这个作者很懒,什么都没留下…
展开
-
中缀表达式转后缀表达式(栈)
这里给出中缀表达式转后缀表达式的算法过程,以及再举两个例子算法过程:1. 数字直接加入后缀表达式2.如果是‘(’, 入栈3.如果是‘)’, 则依次把栈中的运算符加入后缀表达式,直到出现‘(’并从栈中删除它4. 如果是运算符 + - * / a.栈空或者栈顶元素为‘(’, 入栈 b.高于栈顶元素优先级,入栈 c.否则依次弹出栈顶运算符,直到遇到一个优先级小于它的运算符或者是遇到‘(’为止5.遍历完成后,如果栈非空则依次弹出所有栈顶元素加入到表达式当中例1:...原创 2020-05-13 22:21:08 · 12111 阅读 · 3 评论 -
栈的应用:括号配对
括号配对是栈当中的一道经典题,我遇到过的次数估计也有一手之数了。趁着考研复习数据结构又来了一遍。括号配对通常是值[] ()、{}、[(){}]、[({})]类似这样的是合法的,而[][、[])、[(])这样的是非法的。解决的思路也就是从左往右按顺序入栈,只需要左括号入栈,如果遇到又括号则与栈顶括号匹配,不匹配或者栈顶为空则这一个括号的组合序列就不是匹配的。栈、可以用数组模拟一个栈,也可用C++ STL中封装好的,还可以自己定义栈。因为考试和面试中喜欢让自己实现栈,所以我按照前面所学,建立一个顺序栈来原创 2020-05-09 22:35:17 · 876 阅读 · 0 评论 -
POJ 2559 Largest Rectangle in a Histogram(单调栈)
题目链接:https://vjudge.net/problem/POJ-2559题意:如图所示,求最大的连续阴影面积思路:首先我们肯定时可以暴力判断,找出每一个最大的向右扩展程度和向左扩展程度,然后求面积,最后再求个最大值,不过这样肯定会超时,不是一个好的解法。这样我们就要想一个更有效的方法了,首先一个一个的判断会有很多的重复计算,如何避免掉这些重复的计算呢?假设现在又一组...原创 2019-09-28 14:30:49 · 116 阅读 · 0 评论 -
牛客:毕业生的纪念礼物(优先队列 || STL嵌套)
题目链接:https://ac.nowcoder.com/acm/contest/948/G题意:中文题,不在描述。分析:每次优先从个数最多的三种各取一个,然后再重新找出最大三种的。优先队列设为数值越大,权值越重就好,然后每次取出对手的三个,然后各建议,如果不为0再重新放入队列。STL嵌套则是先用map读入输入,然后把map嵌套进vector种然后根据second的值重大到...原创 2019-07-27 21:02:19 · 235 阅读 · 0 评论 -
POJ2413(expedition) 改编,STL优先队列的使用
优先队列出的顺序是按照自己设 置的优先等级来出队列的,如果自己不设置优先级的话,默认优先级为越大优先级越高。定义方法:priority_queue <int> que;如果想自己决定优先级 可以这样写:priority_queue <int, vector <int>, greater <int> > que; 这样写是升序,即值越小优...原创 2018-12-05 13:00:07 · 167 阅读 · 0 评论 -
循环队列的顺序表示和实现
在开始之前我们做如下约定:队空: front == rear队满: (Q.rear + 1) % MaxSize == Q.front求循环队列的长度: (Q.rear - Q.front + MaxSize) % MaxSize入队:Q.rear = (Q.rear + 1) % MaxSize出队: Q.front = (Q.front + 1) % MaxSize ...原创 2018-11-08 15:49:32 · 513 阅读 · 0 评论 -
用链栈实现十进制到二进制的转换
#include <iostream>using namespace std;typedef struct Stack{ int data; int length; Stack *next;} StackNode, *LinkStack;bool StackInit(LinkStack &S) // 初始化函数,初始为空{ S = NULL;...原创 2018-11-08 15:11:27 · 7141 阅读 · 1 评论 -
队列的链式表示和实现
注意:队首指针 Q.front 指向的不是第一个数据元素结点 Q.front->next 才是。 队尾指针 Q.rear 始终指向最后一个结点。 Q.length 始终是当前队列的长度#include <iostream>using namespace std;typedef struct QNode{ int data; struct QNode *nex...原创 2018-11-13 20:39:19 · 569 阅读 · 0 评论 -
栈的顺序表示和实现
#include <iostream>using namespace std;const int MAXN = 1000+7;const int INF = 0X3f3f3f3f;typedef struct { int *base; // base不存元素 int *top; // top始终指向栈顶元素 int StackSize;} SqStack...原创 2018-11-03 13:39:23 · 382 阅读 · 0 评论 -
Replace To Make Regular Bracket Sequence ( CodeForces )
用这道题来说明一下c++比g++有更深的堆栈先来看一下提交情况,都是一份一模一样的代码(详见下文)。GNU C++C++然后顺便说一下题目的思路。定义一个栈从左到右扫面一遍仅左括号进栈,遇到右括号就与栈顶的括号对比一下,能配对就弹出这个栈顶元素。题目:You are given string s consists of opening and closing b...原创 2018-09-18 22:19:34 · 286 阅读 · 0 评论 -
看病要排队 HDU - 1873(队列)
思路分析:指定了优先级和医生,我们只需要让来看病的人进队列,因为不完全是先来先看病,所以我们需要定义的是优先队列,且指定内部排序原理。题目:看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先...原创 2018-09-12 21:32:17 · 330 阅读 · 0 评论 -
大鱼吃小鱼 ( 栈操作 )
有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右。游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右)。问足够长的时间之后,能剩下多少条鱼?Input第1行:1个数N,表示鱼的数量(1 <= N <= 100000)。 第2 - N + 1行:每行两个数Aii, Bii,中间用空格分隔,分别表示鱼的大小及游...原创 2018-04-12 12:31:09 · 883 阅读 · 0 评论 -
堆栈stack的基本操作
/*栈的模板可以用数组,单链表,以及stack堆栈来实现 *//*建议电脑查看*/ #include <cstdio> #include <stack> /*堆栈*/using namespace std;void print( stack<int> a, int n );void clear( stack<int> b ); /*清空...原创 2018-04-07 21:56:24 · 2358 阅读 · 0 评论 -
队列的基本操作
#include <cstdio>#include <queue> /*队列queue头文件*/ #include <algorithm>using namespace std;void print( queue<int> a, int n ); //自定义遍历输出函数 void is_empty( queue<int> d ...原创 2018-04-07 21:54:28 · 319 阅读 · 0 评论 -
栈、队列、优先队列和题目讲解
训练题目网址(密码hpuacm):https://cn.vjudge.net/contest/241502#overview 栈和队列的基础知识不再讲解,参考之前写的博客栈:https://blog.csdn.net/hpu2022/article/details/79845577队列:https://blog.csdn.net/hpu2022/article/details/79...原创 2018-07-27 23:48:23 · 612 阅读 · 0 评论