C++2つのスタックは1つのキューと2つのキューを実現して1つのスタックを実現する


今日はC++で次の2つのスタックシミュレーション1つのキューと2つのキューシミュレーション1つのスタックを実現しました!コードには多くの脆弱性があり、読者が問題を発見した場合、
タイムリーにフィードバックできて、ありがとうございます!!!
コードは次のとおりです.
#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