#include <stdio.h>
#include <stdlib.h>
#define ERROR 1e8
typedef int ElementType;
typedef enum { push, pop, end } Operation;
typedef int Position;
struct SNode {
ElementType *Data;
Position Top1, Top2;
int MaxSize;
};
typedef struct SNode *Stack;
Stack CreateStack( int MaxSize );
bool Push( Stack S, ElementType X, int Tag );
ElementType Pop( Stack S, int Tag );
Operation GetOp(); /* details omitted */
void PrintStack( Stack S, int Tag ); /* details omitted */
int main() {
Stack k = CreateStack(5);
bool isPush = Push(k,2,2);
ElementType el = Pop(k,2);
printf("%d",el);
return 0;
}
Stack CreateStack( int MaxSize ) {
Stack p = (Stack)malloc(sizeof(Stack));
p->Data = (ElementType*)malloc(sizeof(ElementType)*MaxSize);
p->Top1 = -1;
p->Top2 = MaxSize;
p->MaxSize = MaxSize;
return p;
}
bool Push( Stack S, ElementType X, int Tag ) {
if(S == NULL)
return false;
if((S->Top2)- (S->Top1)== 1) {
printf("Stack Full\n");
return false;
}
if(Tag == 1) {
S->Data[++(S->Top1)] = X;
return true;
} else if(Tag == 2) {
S->Data[--(S->Top2)] = X;
return true;
} else
return false;
}
ElementType Pop( Stack S, int Tag ) {
if(S == NULL)
{
return NULL;
}
if(Tag == 1) {
if(S->Top1 == -1) {
printf("Stack %d Empty\n",Tag);
return ERROR;
}
return S->Data[(S->Top1)--];
} else if(Tag == 2) {
if(S->Top2 == S->MaxSize)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}
return S->Data[(S->Top2)++];
}
return ERROR;
}