算法思想比较简单,一个栈存入队的数据,从另外一个栈出队数据
设存入队的数据的栈为S1,存出队数据的栈为S2。
入队时数据直接push到S1中,
出队时如果S2中有数据,直接pop,否则将S1中的数据移到S2中,然后再从S2中pop数据
下面是代码
MyQueue是用两个堆栈实现的队列
#include using namespace std; class MyQueue { public: MyQueue() {} ~MyQueue() {} void enqueue(int elem) { s1.push(elem); } int dequeue() { int temp = -1; if(s2.empty()) { while(s1.size() > 0) { temp = s1.top(); s2.push(temp); s1.pop(); } } if(!s2.empty()) { temp = s2.top(); s2.pop(); return temp; } return temp; } protected: stack s1; stack s2; }; //测试 int main(int argc,char **argv) { MyQueue queue; int input; int op; do { scanf("%d",&op); if(op == 0) { //enqueue scanf("%d",&input); queue.enqueue(input); } else if(op == 1) { //dequeue printf("Dequeue:%d",queue.dequeue()); } else { break; } }while(true); }
两个队列实现一个堆栈可以采用同样的思想