双栈的基本操作
#include<iostream>
using namespace std;
typedef int SElemType;
typedef struct {
int top[2], bot[2]; //栈顶,栈底指针
SElemType* V;
int m;
}DBlStack;
void InitStack(DBlStack& S,int m) {
S.V = (SElemType*)malloc(m * sizeof(SElemType));
S.top[0] = -1;
S.top[1] = m;
S.bot[0] = -1;
S.bot[1] = m;
S.m = m;
}
bool isEmpty(DBlStack S, int n) {
if (n == 0) {
if (S.top[n] == -1) return true;
}
else {
if (S.top[n] == S.m) return true;
}
return false;
}
bool isFull(DBlStack S) {
if (S.top[0] + 1 == S.top[1]) return true;
return false;
}
void EnStack(DBlStack& S, int n,int x) {
if (!isFull(S)) {
if (n == 0) {
S.V[++S.top[n]] = x;
}
else {
S.V[--S.top[n]] = x;
}
}
}
void DeStack(DBlStack& S, int n) {
if (isEmpty(S, n)) return;
if (n == 0) {
cout << S.V[S.top[n]--] << " ";
}
else {
cout << S.V[S.top[n]++] << " ";
}
}
int main() {
int m;
while (cin >> m && m != 0) {
int e0, e1, d0, d1;
int x;
DBlStack S;
InitStack(S,m);
cin >> e0 >> e1 >> d0 >> d1;
for (int i = 0; i < e0; i++) {
cin >> x;
EnStack(S, 0, x);
}
for (int i = 0; i < e1; i++) {
cin >> x;
EnStack(S, 1, x);
}
if (isFull(S)) {
cout << 1 << endl;
}
else {
cout << 0 << endl;
}
for (int i = 0; i < d0; i++) {
//出栈
DeStack(S, 0);
}
if (isEmpty(S, 0)) {
cout << 0;
}
else {
cout << 1;
}
cout << endl;
for (int i = 0; i < d1; i++) {
//出栈
DeStack(S, 1);
}
if (isEmpty(S, 1)) {
cout << 0;
}
else {
cout << 1;
}
cout << endl;
}
return 0;
}