232.用栈实现队列:比较简单没什么说的,代码如下:
#include <stack>
using namespace std;
class MyQueue
{
public:
stack<int> stackin,stackout;
MyQueue(){};
void push(int a){
stackin.push(a);
}
void pop(){
if (stackout.empty())
{
while (!stackin.empty())
{
stackout.push(stackin.top());
stackin.pop();
}
}
int result = stackout.top();
stackout.pop();
}
int peek(){
if (stackout.empty())
{
while (!stackin.empty())
{
stackout.push(stackin.top());
stackin.pop();
}
}
return stackout.top();
}
bool empty(){
return stackin.empty() && stackout.empty();
}
};
225. 用队列实现栈,代码如下:
#include <queue>
using namespace std;
class MyStack
{
public:
queue<int> que1,que2;
MyStack(){};
void push(int a){
que1.push(a);
}
int pop(){
int size = que1.size() - 1;//这里记得先减一
while (size--){
que2.push(que1.front());
que1.pop();
}
int result = que1.front();
que1.pop();
que1 = que2;
while(!que2.empty()){
que2.pop();
}
return result;
}
int top(){
int size = que1.size() - 1;//这里记得先减一
while (size--){
que2.push(que1.front());
que1.pop();
}
int result = que1.front();
que2.push(que1.front());
que1.pop();
que1 = que2;
while(!que2.empty()){
que2.pop();
}
return result;
}
bool empty(){
return que1.empty();
}
};
20. 有效的括号:栈由于其先入后出的特性,很适合相邻匹配的问题,代码如下:
#include <string>
#include <stack>
#include <iostream>
using namespace std;
bool isvaild(string s){
if(s.size() % 2 != 0) return false;
stack<char> stk;
for(char ch : s){
if (ch == '{') stk.push('}');
if (ch == '[') stk.push(']');
if (ch == '(') stk.push(')');
if (ch == ')' || ch == '}' || ch == ']'){
if(stk.empty()) return false;
if(ch == stk.top()) stk.pop();
else return false;
}
}
if (stk.empty()) return true;
else return false;
}
int main(){
string s = "(]";
cout << (isvaild(s) ? "vaild" : "not vaild") << endl;
return 0;
}
1047. 删除字符串中的所有相邻重复项
#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
using namespace std;
//为了用栈而用,其实直接用字符串空间复杂度O(1)
string removeDuplicates (string s){
stack<char> st;
for(char ch : s){
if(st.empty() || ch != st.top()){
st.push(ch);
}else{
st.pop();
}
}
string result = "";
while(!st.empty()){
result.push_back(st.top());
st.pop();
}
reverse(result.begin(),result.end());
return result;
}