#include<stdio.h>
#define MAX 10
typedef struct {
Elem date[MAX];
int top1;
int top2;
} Stack;
//top1 attach num=0,top2 attach num=1
void initialStack(Stack *s);
int isEmpty(Stack *s);
int isFull(Stack *s);
int push(Stack *s,int num,Elem e);
Elem pop(Stack *s,int num);
{
Stack s;
int i;
initialStack(&s);
for ( i=0; i < 20; ++i){
if(i&1)
push(&s,0,(Elem)(i));
else
push(&s,1,(Elem)(i));
}
pop(&s,1);pop(&s,0);
pop(&s,1);
showStack(&s,0);puts("");showStack(&s,1);
}
void initialStack(Stack *s)
{
s->top1 = -1;
s->top2 = MAX;
}
int isEmpty(Stack *s)
{
if(s->top1<0 && s->top2==MAX)//stack1 and stack2 both empty
return 2;
if(s->top1<0 && s->top2<MAX)//stack1 empty but stack2 isn't
return 0;
if(s->top1>0 && s->top2==MAX)
return 1;
return -1;
}
int isFull(Stack *s)
{
if(s->top1+1 == s->top2)
return 1;
return 0;
}
int push(Stack *s, int num, Elem e)
{
if(num>1||num<0)
return 0;
if (isFull(s))
return 0;
if(num)//if num equals 1,then push in stack2,otherwise push in stack1
s->date[--s->top2] = e;
else
s->date[++s->top1] = e;
return 1;
}
Elem pop(Stack *s,int num)
{
if (num>1||num<0)
return FAIL;
int k = isEmpty(s);
if(k!= num && k!=2) {
if(num)
return s->date[s->top2++];
return s->date[s->top1--];
}
return FAIL;
}
void showStack(Stack *s,int num)
{
int i;
if(num)
for(i = s->top2; i<MAX; ++i)
printf("%d ",s->date[i]);
else
for(i = s->top1; i>=0; --i)
printf("%d ",s->date[i]);
}
#define MAX 10
#define FAIL -999999
typedef struct {
Elem date[MAX];
int top1;
int top2;
} Stack;
//top1 attach num=0,top2 attach num=1
void initialStack(Stack *s);
int isEmpty(Stack *s);
int isFull(Stack *s);
int push(Stack *s,int num,Elem e);
Elem pop(Stack *s,int num);
void showStack(Stack *s,int num);
{
Stack s;
int i;
initialStack(&s);
for ( i=0; i < 20; ++i){
if(i&1)
push(&s,0,(Elem)(i));
else
push(&s,1,(Elem)(i));
}
pop(&s,1);pop(&s,0);
pop(&s,1);
showStack(&s,0);puts("");showStack(&s,1);
}
void initialStack(Stack *s)
{
s->top1 = -1;
s->top2 = MAX;
}
int isEmpty(Stack *s)
{
if(s->top1<0 && s->top2==MAX)//stack1 and stack2 both empty
return 2;
if(s->top1<0 && s->top2<MAX)//stack1 empty but stack2 isn't
return 0;
if(s->top1>0 && s->top2==MAX)
return 1;
return -1;
}
int isFull(Stack *s)
{
if(s->top1+1 == s->top2)
return 1;
return 0;
}
int push(Stack *s, int num, Elem e)
{
if(num>1||num<0)
return 0;
if (isFull(s))
return 0;
if(num)//if num equals 1,then push in stack2,otherwise push in stack1
s->date[--s->top2] = e;
else
s->date[++s->top1] = e;
return 1;
}
Elem pop(Stack *s,int num)
{
if (num>1||num<0)
return FAIL;
int k = isEmpty(s);
if(k!= num && k!=2) {
if(num)
return s->date[s->top2++];
return s->date[s->top1--];
}
return FAIL;
}
void showStack(Stack *s,int num)
{
int i;
if(num)
for(i = s->top2; i<MAX; ++i)
printf("%d ",s->date[i]);
else
for(i = s->top1; i>=0; --i)
printf("%d ",s->date[i]);
}