n個結點的二叉樹有幾種形態(tài) 設輸入序列為2,3,4,5,6,利用一個棧能得到序列2,5,3,4,6嗎???梢杂脝捂湵韺崿F嗎?
設輸入序列為2,3,4,5,6,利用一個棧能得到序列2,5,3,4,6嗎???梢杂脝捂湵韺崿F嗎?首先,先2個堆棧,然后2個堆棧。使5堆棧第二,3,4堆棧,5堆棧,或3,4,5堆棧(使用后進先出),6堆
設輸入序列為2,3,4,5,6,利用一個棧能得到序列2,5,3,4,6嗎?棧可以用單鏈表實現嗎?
首先,先2個堆棧,然后2個堆棧。使5堆棧第二,3,4堆棧,5堆棧,或3,4,5堆棧(使用后進先出),6堆棧。但此時,6已經是堆棧第二,這是矛盾的(書中有例子),所以我們無法得到25346堆棧序列。
堆棧可以通過單鏈表實現。可以參考棧的鏈式存儲結構部分及其基本操作的實現。很明顯,站點和隊列是抽象的結構,而單鏈表是一個具體的實現。通過鏈表可以實現堆棧和隊列的操作。
通常,堆棧或隊列用結構封裝,然后定義一些操作(推送、彈出等)。這里,對鏈表進行具體的操作。例如
struct stack{
struct listuuuhead*head
}
struct queue{
struct listuuuhead*head
struct listuuuhead*end]}]~]/*創(chuàng)建鏈表數據結構*/typedef struct s{int dstruct s*next}stack/*定義棧頂指針*/stack*top=null/*輸入stack*/void push(int i){stack*PS=(stack*)malloc(sizeof(stack))PS->D=IPS->next=top=PS}/*退出stack*/void pop(){if(!Top)returnstack*temp=toppop=Top->nextfree(temp)}/*main函數*/int main(){//堆棧操作代碼}