目录
232 - 用栈实现队列
思路:两杯子倒水
1、两个栈:s1和s2;
2、数据保存在s1中;
3、pop时,将s1倒入s2,s2.pop; 再将s2剩余数据倒入s1;
4、peek时,将s1倒入s2,s2.top; 再将s2数据倒入s1;
原则:s1用来存储,s2用来操作;
提交代码
class MyQueue {
public:
MyQueue() {
}
void push(int x) {
stk1.emplace(x);
}
int pop() {
int size1 = stk1.size();
for(int i = 0 ; i < size1; ++i){
stk2.emplace(stk1.top()); //stk1倒入stk2
stk1.pop(); //stk1删除
}
int ret = stk2.top();
stk2.pop(); //stk2取出头节点
int size2 = stk2.size();
for(int i = 0; i < size2; ++i){
stk1.emplace(stk2.top()); //stk2又倒回stk1
stk2.pop();
}
return ret;
}
int peek() {
int size1 = stk1.size();
for(int i = 0 ; i < size1; ++i){
stk2.emplace(stk1.top()); //stk1倒入stk2
stk1.pop();
}
int ret = stk2.top();
int size2 = stk2.size();
for(int i = 0; i < size2; ++i){
stk1.emplace(stk2.top()); //stk2又倒回stk1
stk2.pop();
}
return ret;
}
bool empty() {
return stk1.empty();
}
void test(){
MyQueue* obj = new MyQueue();
obj->push(1);
obj->push(2);
int param_3 = obj->peek();
int param_2 = obj->pop();
bool param_4 = obj->empty();
}
private:
stack<int> stk1;
stack<int> stk2;
};
225 - 用队列实现栈
思路:两截水管倒水
1、两个队列:q1和q2;
2、push时,q1.push(),数据存入q1;
3、top时:q1前n-1个数据流入q2; q1.front()取出最后一个数据; 将最后一个数据流入q2; 将q2数据全部推回q1;
4、pop时:q1前n-1个数据流入q2; q1.front()取出最后一个数据; q1.pop()将最后一个数据删除; 将q2数据全部推回q1;
原则:q1用来存储,q2用来操作;
class MyStack {
public:
MyStack() {
}
void push(int x) {
q1.emplace(x);
}
int pop() {
int size1 = q1.size();
for(int i = 0; i < (size1 - 1); ++i){ //将q1前n-1个数据流入q2
q2.emplace(q1.front());
q1.pop();
}
int ret = q1.front(); //取出最后一个数据
q1.pop(); //删除最后一个数据
int size2 = q2.size();
for(int i = 0; i < size2; ++i){ //将q2的数据全部再退回至q1
q1.emplace(q2.front());
q2.pop();
}
return ret;
}
int top() {
int size1 = q1.size();
for(int i = 0; i < (size1 - 1); ++i){ //将q1前n-1个数据流入q2
q2.emplace(q1.front());
q1.pop();
}
int ret = q1.front(); //取出最后一个数据
q1.pop(); //删除最后一个数据
int size2 = q2.size();
for(int i = 0; i < size2; ++i){ //将q2的数据全部再退回至q1
q1.emplace(q2.front());
q2.pop();
}
q1.emplace(ret); //最后一个数据再添加至q1
return ret;
}
bool empty() {
return q1.empty();
}
void test(){
MyStack* obj = new MyStack();
obj->push(1);
obj->push(2);
int param_3 = obj->top();
int param_2 = obj->pop();
int param_5 = obj->pop();
bool param_4 = obj->empty();
}
private:
queue<int> q1;
queue<int> q2;
};