C++两个栈实现一个队列和两个队列实现一个栈

来源:互联网 发布:dota2公开比赛数据 编辑:程序博客网 时间:2024/05/30 23:01


         今天用C++实现了下两个栈模拟一个队列和两个队列模拟一个栈!代码可能有很多漏洞,如果读者发现问题,

可以及时反馈,非常感谢!!!

        代码如下:

#include <iostream>#include <stdlib.h>#include <stack>#include <queue>using namespace std;#if 1//  *******两个栈实现一个队列********typedef int ElemType;typedef struct {   stack<ElemType>s1;  //负责入队列   stack<ElemType>s2;  //负责出队列}SQueue;//判断队列是否为空bool IsEmpty(SQueue &q) {   if ((q.s1.empty()) && (q.s2.empty())) {      return true;   }   return false;}// 入队列void EnQueue(SQueue &q, ElemType e) {   q.s1.push(e);}//  队列大小int GetQueueSize(SQueue &q) {   return q.s1.size() + q.s2.size();}//出队列void DeQueue(SQueue &q) {   if (q.s2.empty()) {      while (!q.s1.empty()) {        q.s2.push(q.s1.top());        q.s1.pop();      }   }   if (!q.s2.empty()) {  //队空       q.s2.pop();  //出队列   }}//  取队首先元素ElemType GetFront(SQueue &q) {    if (q.s2.empty()) {      while (!q.s1.empty()) {        q.s2.push(q.s1.top());        q.s1.pop();      }   }   if (q.s2.empty()) {  //队空      throw;   }   return q.s2.top();}int main() {  SQueue sq;  EnQueue(sq, 1);  EnQueue(sq, 2);  EnQueue(sq, 3);  EnQueue(sq, 4);  EnQueue(sq, 5);  EnQueue(sq, 6);  cout << GetFront(sq) << endl;  DeQueue(sq);  cout << GetFront(sq) << endl;  DeQueue(sq);  cout << GetFront(sq) << endl;  DeQueue(sq);  cout << GetFront(sq) << endl;  cout << GetFront(sq) << endl;  cout << GetQueueSize(sq) << endl;  return 0;}#endif#if 1//  ****两个队列实现一个栈****typedef int ElemType;typedef struct {   queue<ElemType>q1;  //入队   queue<ElemType>q2;  //中转}QStack;// 栈是否为空bool IsEmpty(QStack s) {    if (s.q1.empty()) {        return true;    }    return false;}// 栈大小int GetStackSize(QStack s) {   return s.q1.size();}//压栈void Push(QStack &s, ElemType e) {   s.q1.push(e);}//弹栈void Pop(QStack &s) {    if (!s.q1.empty()) {       while (s.q1.size() != 1) {  //队列q1的n-1个元素移动到q2         s.q2.push(s.q1.front());         s.q1.pop();       }       s.q1.pop();       while (!s.q2.empty()) {         s.q1.push(s.q2.front());         s.q2.pop();       }    }}//取栈顶元素int Top(QStack &s) {   if (s.q1.empty()) {      throw;  //栈空   }   while (!s.q1.empty()) {  //队列q1的n个元素移动到q2     s.q2.push(s.q1.front());     s.q1.pop();   }   ElemType tmp = s.q2.back();  //获取第n个元素   while (!s.q2.empty()) {     s.q1.push(s.q2.front());     s.q2.pop();   }   return tmp;}int main() {    QStack qs;    Push(qs, 1);    Push(qs, 2);    Push(qs, 3);    Push(qs, 4);    try {        cout << Top(qs) << endl;        Pop(qs);        cout << Top(qs) << endl;        Pop(qs);        cout << Top(qs) << endl;        Pop(qs);        cout << Top(qs) << endl;        Pop(qs);        cout << "size:" << GetStackSize(qs) << endl;    }  catch (...) {    }    if (IsEmpty(qs)) {        cout << "栈空" << endl;    } else {       cout << "栈非空" << endl;    }   return 0;}#endif // 1


1 0