Stack CreateStack( int MaxSize )
{
Stack S;
S=(Stack)malloc(sizeof(struct SNode));
S->Data=(ElementType*)malloc(sizeof(ElementType)*MaxSize);
S->MaxSize = MaxSize;
S->Top1 = -1;
S->Top2 = MaxSize;
return S;
}
// 如果堆栈已满,Push函数必须输出“Stack Full”并且返回false
bool Push( Stack S, ElementType X, int Tag )
{
if (S->Top1 +1 == S->Top2)
{
printf("Stack Full\n");
return false;
}
if (Tag == 1)
{
S->Data[++S->Top1]=X;
}
if (Tag == 2)
{
S->Data[--S->Top2]=X;
}
return true;
}
// 如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR
ElementType Pop( Stack S, int Tag )
{
if (Tag == 1)
{
if (S->Top1 == -1)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}
else
{
return S->Data[S->Top1--];
}
}
else if (Tag == 2)
{
if (S->Top2 == S->MaxSize)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}
else
{
return S->Data[S->Top2++];
}
}
}
- Pop函数中return S->Data[S->Top1--] 误写成了 return S->Data[--S->Top1],应该先拿Top1位置元素,再令Top1=Top1-1