参考链接:https://blog.csdn.net/weixin_41463193/article/details/85719352
反复看了几遍《大话数据结构》第四章的4.5节,始终不太理解顺序存储的两栈共享是如何实现的(一开始被图4-5-1误导了,以为是通过两个数组来实现)。读完参考链接的博客后,恍然大悟。要点整理如下:
- 在一个数组(长度为n)中有两个栈;
- 数组的始端和尾端分别是两个栈的栈底;
- 对于栈底为数组始端的栈1,插入元素时栈顶指针值(对应数组下标值)top1增加,删除元素时top1减少;
- 对于栈底为数组尾端的栈2,插入元素时栈顶指针值top2减少,删除元素时top2增加;
- 当且仅当两栈的栈顶相遇时,即top1 + 1 == top2时,栈满,即数组被全部填充;
- top1 == -1时,栈1为空;
- top2 == n时,栈2为空;
- 插入元素时,需要判断是否栈满,以及要把元素插入到栈1还是栈2;
- 删除元素时,需要判断栈1或栈2是否为空,并删除相应的元素。