Implement Three Stacks using Array
給你一個Array的,請你用它做出三個stack
[思路]
以前都是一個array建立一個stack,現在要用一個建立三個stack,喔那我們把array三等份,然後分別記錄它們的底端和top的index(e.g. stack1=0~9, stack2=10~19, stack3=20~29)。其他部分依序推衍即可。
但你這麼想就把這題想簡單了。你想,假設stack1不曾push東西,那麼那10個空間不就浪費掉了嗎? 想更極端一點,假設今天要你建立100個stack,worst case下只有1個stack有在push,其他99個都沒在使用,那豈不是百分之99的空間都浪費掉了。
[高手思路]
最棒的做法是:不要預先占掉三分之一的空間,而是有push時才去使用空間。
這樣你馬上就會撞到一個問題: "如果s1,s2,s3輪流psuh,這樣三個stack就交錯在一起了"
沒錯,解決交錯的方法其實在stack原理提過,就是你要建立資料間的關聯性。
2.維繫相鄰資料間的關聯性: 例如array中資料天生就在記憶體中相鄰不用額外做事,link list中則是用link來建立關聯性。
然後你馬上會問第二個問題:"這邊明明是array,哪來的link(pointer)可用"
沒錯,解決link的方法其實在link list原理中的[進階]提過,就是用index當link。
結論:
每個element占用array的兩格,分別存放
1.value
2.index of predecessor(前一個) element of this stack.