首先,用一个数组实现双链表我也想到了,思路是用两个下标指针分别指向数组的首尾,然后push栈1就让指针1++,push栈2让指针2–,两个指针相碰即满。
想吐槽下,首先我用的两个指针初始化指向的是0和MaxSize-1,然后运行超时,我用例都能过,结果这,挺坑的就是,他们题目没提但是要求的是两个指针下标必须指向栈首元素,如果栈空则应该是-1和MaxSize,这点要注意下其他没了
Stack CreateStack(int MaxSize)
{
Stack stack = (Stack)malloc(sizeof(struct SNode));
stack->MaxSize = MaxSize;
stack->Data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
stack->Top1 = -1;
stack->Top2 = MaxSize;
return stack;
}
bool Push(Stack S, ElementType X, int Tag)
{
if (S->Top1+1 == S->Top2)
{
printf("Stack Full\n");
return 0;
}
if (Tag == 1)
{
S->Data[++S->Top1] = X;
}
else if (Tag == 2)
{
S->Data[--S->Top2] = X;
}
else return 0;
return true;
}
ElementType Pop(Stack S, int Tag)
{
int res = ERROR;
if ((Tag == 1 && S->Top1 == -1) ||
(Tag == 2 && S->Top2 == S->MaxSize))
{
printf("Stack %d Empty\n",Tag);
return res;
}
if (Tag == 1)
{
res = S->Data[S->Top1--];
}
else if (Tag == 2)
{
res = S->Data[S->Top2++];
}
return res;
}