两个栈实现队列
来源:互联网 发布:淘宝金丝绒连衣裙 编辑:程序博客网 时间:2024/05/16 11:35
#include <stdio.h>#include <iostream>#include <stack>#include <limits.h>#include <queue>using namespace std;class SQueue{ public: void EnQueue(int value); void DeQueue(); void Empty(); int Size(); int Front();//队首元素 int Back();//队尾元素 private: stack<int> inStack; stack<int> outStack;}; void SQueue::EnQueue(int value){ inStack.push(value);} void SQueue::DeQueue(){ if(outStack.size() > 0) outStack.pop(); else { if(inStack.size() > 0) { int size = inStack.size(); for(int i = 0; i < size; i++) { outStack.push(inStack.top()); inStack.pop(); } outStack.pop(); } }} void SQueue::Empty() { inStack.empty(); outStack.empty(); } int SQueue::Size(){ return inStack.size() + outStack.size();} int SQueue::Front(){ if(outStack.size() > 0) return outStack.top(); else { if(inStack.size() > 0) { int size = inStack.size(); for(int i = 0; i < size; i++) { outStack.push(inStack.top()); inStack.pop(); } return outStack.top(); } else return INT_MAX; }} int SQueue::Back() { if(inStack.size() > 0) return inStack.top(); else { if(outStack.size() > 0) { int size = outStack.size(); for(int i = 0; i < size; i++) { inStack.push(outStack.top()); outStack.pop(); } return inStack.top(); } else return INT_MAX; }} void PrintQueue(SQueue sq) { int size = sq.Size(); for(int i = 0; i < size; i++) { printf("%d ", sq.Front()); sq.DeQueue(); } printf("/n"); }int main(){ SQueue sq; for(int i = 0; i < 5; i++) sq.EnQueue(i); cout<<endl; PrintQueue(sq); sq.DeQueue(); return 0;}