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