C++栈和队列

使用标准库的栈和队列时,先包含相关的头文件

#include<stack>

#include<queue>

定义栈如下:

stack<int> stk;

定义队列如下:

queue<int> q;

栈提供了如下的操作

s.empty()               如果栈为空返回true,否则返回false
s.size()                返回栈中元素的个数
s.pop()                 删除栈顶元素但不返回其值
s.top()                 返回栈顶的元素,但不删除该元素
s.push()                在栈顶压入新元素


队列提供了下面的操作

q.empty()               如果队列为空返回true,否则返回false
q.size()                返回队列中元素的个数
q.pop()                 删除队列首元素但不返回其值
q.front()               返回队首元素的值,但不删除该元素
q.push()                在队尾压入新元素
q.back()                返回队列尾元素的值,但不删除该元素


 

### C++ 队列在蓝桥杯竞赛中的应用 #### 使用解决括号匹配问题 在一个字符串中,可能存在多种类型的括号(圆括号`()`、方括号`[]`以及花括号`{}`),编写程序来验证这些括号是否正确配对。 ```cpp #include <stack> using namespace std; bool isValid(string s) { stack<char> st; for (char& c : s) { switch(c){ case '(': case '[': case '{': st.push(c); break; case ')': if(st.empty() || st.top() != '(') return false; else st.pop(); break; case ']': if(st.empty() || st.top() != '[') return false; else st.pop(); break; case '}': if(st.empty() || st.top() != '{') return false; else st.pop(); break; } } return st.empty(); } ``` 此代码片段展示了如何利用的数据结构特性处理嵌套关系的问题[^4]。 #### 利用双端队列求滑动窗口最大值最小值 给定一个整数数组 nums 一个正整数 k ,请你设计一种算法,在大小为 k 的滑动窗口从数组的最左端移动到最右端的过程中找到每个窗口内的极值。 ```cpp #include <deque> using namespace std; vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> res; deque<int> dq; for(int i = 0 ;i<nums.size();++i){ if(!dq.empty() && dq.front()==i-k)dq.pop_front(); while(!dq.empty()&&nums[dq.back()]<=nums[i]) dq.pop_back(); dq.push_back(i); if(i>=k-1)res.push_back(nums[dq.front()]); } return res; } ``` 这段代码通过维护一个单调减少的双向队列实现了高效的动态规划解决方案[^5]。 #### 应用优先级队列模拟医院挂号排队场景 假设有一个医院挂号系统,病人按照到达时间先后顺序进入等待列表;但是急诊患者可以插队至队伍头部。这里可以通过自定义比较器构建一个小根堆形式的最大/最小优先级队列来实现特殊需求下的调度逻辑。 ```cpp struct Patient{ string name; bool emergency; }; struct ComparePatients { bool operator()(Patient const& p1, Patient const& p2) { // Emergency patients have higher priority. if(p1.emergency!=p2.emergency)return !p1.emergency; // If both are non-emergencies or emergencies, // compare based on arrival time. return true; } }; priority_queue<Patient,vector<Patient>,ComparePatients>pq; ``` 上述例子说明了当面对更复杂的业务背景时,适当调整标准容器的行为模式能够更好地满足实际应用场景的要求[^2].
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值