#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int MAX;
int A;
int B;
int *stk;
} IntStack;
int A_PUSH(IntStack *s, int x)
{
if (s->A >= s->B)
{
printf("fail");
return -1;
}
s->stk[s->A++] = x;
return 0;
}
int B_PUSH(IntStack *s, int x)
{
if (s->A >= s->B)
{
printf("fail");
return -1;
}
s->stk[s->B--] = x;
return 0;
}
int A_POP(IntStack *s, int *x)
{
if (s->A <= 0)
{
printf("fail");
return -1;
}
*x = s->stk[--s->A];
s->stk[s->A] = 0;
return 0;
}
int B_POP(IntStack *s, int *x)
{
if (s->B >= s->MAX - 1)
{
printf("fail");
return -1;
}
*x = s->stk[++s->B];
s->stk[s->B] = 0;
return 0;
}
int PrintStack(IntStack *s)
{
for (int i = 0; i < s->MAX; i++)
{
printf("%d ", s->stk[i]);
}
printf("\n");
return 0;
}
int main(void)
{
int temp, input;
IntStack a;
printf("Input MAX : ");
scanf("%d", &temp);
a.MAX = temp;
a.A = 0;
a.B = temp - 1;
a.stk = (int *)calloc(a.MAX, sizeof(int));
while (1)
{
printf("1.PUSA_A, 2.PUSB_B, 3.POP_A, 4.POP_B, 5.Print Stack, 6.Exit : ");
scanf("%d", &input);
switch (input)
{
case 1:
printf("PUSH NUMBER : ");
scanf("%d", &input);
A_PUSH(&a, input);
break;
case 2:
printf("PUSH NUMBER : ");
scanf("%d", &input);
B_PUSH(&a, input);
break;
case 3:
A_POP(&a, &temp);
printf("POP NUMBER : %d\n", temp);
break;
case 4:
B_POP(&a, &temp);
printf("POP NUMBER : %d\n", temp);
break;
case 5:
PrintStack(&a);
break;
case 6:
return 0;
}
}
}