//创建栈
Stack CreateStack( int MaxSize ){
Stack _stack = (Stack)malloc(sizeof(struct SNode));
_stack->MaxSize = MaxSize;
_stack->Data = (int *)malloc(MaxSize*sizeof(int));
//指向当前栈顶元素
_stack->Top1 = -1;
//指向栈顶元素
_stack->Top2 = MaxSize;
return _stack;
}
//入栈
bool Push( Stack S, ElementType X, int Tag ){
//栈满判断
if(S->Top1>=S->Top2-1||S->Top1>=S->MaxSize-1||S->Top2<=0){
printf("Stack Full\n");
return false;
}
//入1号栈
if(Tag==1){
S->Data[++S->Top1] = X;
//入2号栈
}else{
S->Data[--S->Top2] = X;
}
return true;
}
//出栈
ElementType Pop( Stack S, int Tag ){
if((Tag==1&&S->Top1<0)||(Tag==2&&S->Top2>=S->MaxSize)){
printf("Stack %d Empty\n",Tag);
return ERROR;
}
if(Tag==1)
return S->Data[S->Top1--];
else
return S->Data[S->Top2++];
}