214 words
1 minute
共享栈
2025-03-10

共享栈是在一个数组中同时模拟两个栈

  1. 栈结构需要有两个位置top,其中一个top从前向后(赋初值-1),另一个从后向前(赋初值MaxSize)从而模拟两个栈 附代码:
Stack CreateStack( int MaxSize ){
Stack s = (Stack) malloc(sizeof(struct SNode));
s->Top1 = -1;
s->Top2 = MaxSize;
s->MaxSize = MaxSize;
s->Data = (ElementType*) malloc(sizeof(ElementType)*MaxSize);
return s;
}
  1. push方法结构: · 先判断栈是否已满,即判断两个位置tag是否指向同一元素(需注意应将top1+1与top2判断【即判断再存入一个元素是否会重叠】),需注意存入元素的位置应为当前top指向位置的下一个位置 附代码:
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;
} else {
S->Data[--S->Top2] = X;
}
return true;
}
共享栈
https://fuwari.vercel.app/posts/共享栈/
Author
7ac9d42
Published at
2025-03-10
License
CC BY-NC-SA 4.0