#include <iostream>
#include<bits/stdc++.h>
#define max 100
typedef struct{
int top[2],bot[2];
int *data;
int size;
}dblstack;
using namespace std;
void init(dblstack &d);
int isempty(dblstack &d);
int isfull(dblstack &d);
void push0(dblstack &d,int x);
void push1(dblstack &d,int x);
int pop0(dblstack &d);
int pop1(dblstack &d);
int main()
{
dblstack d;
init(d);
push0(d,1);
push0(d,2);
push1(d,8);
push1(d,9);
cout << pop0(d) << endl;
cout << pop0(d) << endl;
cout << pop1(d) << endl;
cout << pop1(d) << endl;
cout <<isfull(d) << endl;
cout <<isempty(d) << endl;
return 0;
}
void init(dblstack &d){
d.data=new int[max];
d.size=max;
d.top[0]=d.bot[0]=-1;
d.top[1]=d.bot[1]=d.size;
}
int isempty(dblstack &d){
if(d.top[0]==-1&&d.top[1]==max){
return 1;
}
else return 0;
}
int isfull(dblstack &d){
if(d.top[1]-d.top[0]==1)
return 1;
else return 0;
}
void push0(dblstack &d,int x){
if(isfull(d)) exit(0);
d.top[0]++;
d.data[d.top[0]]=x;
}
void push1(dblstack &d,int x){
if(isfull(d)) exit(0);
d.top[1]--;
d.data[d.top[1]]=x;
}
int pop0(dblstack &d){
if(isempty(d)) exit(0);
return d.data[d.top[0]--];
}
int pop1(dblstack &d){
if(isempty(d)) exit(0);
return d.data[d.top[1]++];
}