設棧的順序存儲空間為S(1,m),初始狀態為top=m+1,則棧中元素個數為m-top+1個。
這道題容易被top=m+1給搞懵了,因為在咱們正常的思維中,這個棧應該是這樣的:
那么top=m+1不是直接滿棧溢出了嗎?
所以這個棧肯定不是這樣的,那還有種可能,就是這樣:
咱們把m帶入一個數,比如說4,那么棧底指針現在就在4號房,棧頂指針在5號房,如果一個人要入住,那么棧頂指針+1,它也變成4號房了,那么 入住人員個數=m-top+1=4-4+1=1。
再往里入住一個人,top指針到了3號房,棧底指針還在4號房沒變,那么 入住人數=m-top+1=4-3+1=2.
這個棧頂指針可以一直減少,一直減少到1,這個棧就滿了。
有的人可能有疑惑,這個棧頂指針還能移到棧底更底的地方?其實這就是定義一個空棧的寫法,為啥棧頂=棧底不是一個空棧呢?
這就涉及到棧頂指針的定義了,棧頂指針一定是指向一個元素的,也就是說只要它出現在棧里,那么這個棧一定是有一個客戶在入住的,所以想表明空棧的時候,棧頂指針就指向棧底更底的一個位置了。