栈与队列1
232 用栈实现队列
相关栈的函数,top ,push ,pop,empty等函数理解
其次理解this指针的作用,this->pop()表示调用当前对象的pop()车工原函数
#include <stack>
class MyQueue{
public:stack<int> stIn;//用两个栈实现功能stack<int> stOut;MyQueue(){ //初始化}void push(int x){stIn.push(x); //压入函数简单,直接把x压入到In栈中}int pop(){//弹出//当stOut为空的时候,从stIn里导入全部数据(关键)if(stOut.empty()){ //empty函数while(!stIn.empty()){//当stIn不为空时stOut.push(stIn.top()); //将栈顶元素放到stOut中stIn.pop();//清理}}int result = stOut.top();stOut.pop();return result;}int peek(){int res = this->pop(); //stOut.push(res);return res;}bool empty(){return stIn.empty() & stOut.empty();}
};
225 用队列实现栈
class MyStack {
public:queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {int size = que.size();size--;while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了que.pop();return result;}int top(){int size = que.size();size--;while (size--){// 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时获得的元素就是栈顶的元素了que.push(que.front()); // 将获取完的元素也重新添加到队列尾部,保证数据结构没有变化que.pop();return result;}bool empty() {return que.empty();}
};
225 用队列实现栈
这个要注意的就是在栈弹出元素的时候,需要将这个队列的元素统统挪到最后一个元素之后
class MyStack {
public:queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {int size = que.size();size--;while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了que.pop();return result;}int top(){int size = que.size();size--;while (size--){// 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部que.push(que.front());que.pop();}int result = que.front(); // 此时获得的元素就是栈顶的元素了que.push(que.front()); // 将获取完的元素也重新添加到队列尾部,保证数据结构没有变化que.pop();return result;}bool empty() {return que.empty();}
};