參考鏈接: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是否爲空,並刪除相應的元素。