和普通的線性表一樣,我們可以選擇用單鏈或者是雙鏈來實現這個資料結構。由於棧只能夠在棧頂進行入棧和出棧操作,因此乙個只含有棧頂節點的單鏈表就可以輕鬆實現它了。
下面我們就來一起實現這個鏈式儲存的鏈棧吧:
//棧頂節點,不儲存元素,只用來指向棧頂的元素
private node stacktop;
private
int size;
public
mylinkedstack ()
class node
}
然後是進棧和出棧的操作:
@override
public e push(e item)
@override
public e pop()
接下來是,返回棧中頂部元素以及返回棧中某個元素的位置的實現:
@override
public e peek()
@override
public
intsearch(object o)
}return -1;
}else
}return -1;
}}
最後,是檢查棧是否為空以及清空整個棧的操作:
@override
public
boolean
empty()
@override
public
void
clear()
this.size = 0;
}
對比一下我們完成的順序棧與鏈棧,它們在時間複雜度上都是o(1)。對於空間效能來說,順序棧基於陣列實現,會有乙個陣列的固定長度(如果沒有放滿元素,存在空間浪費);而鏈棧並沒有長度的限制,卻在每個節點上耗費指標域的空間。因此如果棧的使用過程中元素變化不可預料,我們應該選擇鏈棧;如果元素數量的變化在乙個可控的範圍呢,那麼我們可以選擇順序棧。 資料結構 棧之鏈棧
鏈棧 單鏈表的頭插和頭刪時間複雜度o 1 所以鏈式棧的棧頂在頭這邊 1 基於鍊錶 帶頭結點的單鏈表 實現棧先進後出的特徵 2 對於棧,必須同乙個方向入棧和出棧 3 對於鍊錶,有頭插 頭刪,尾插和尾刪 時間複雜度 o 1 不需要迴圈遍歷,比如判斷乙個數是否為10,if a 10 o n 需要迴圈遍歷,...
資料結構之棧與佇列
寫在前面 棧與佇列是兩種不同特點的資料結構。棧遵循著先進後出的特點,它就像乙個器皿,先放進去的後被取出來,後放進去也就是靠近瓶口的先出來。佇列,就像它的名字一般,它的結構類似於排隊,先進先出,後進後出。棧的實現package stack public class mystack public mys...
資料結構之棧與佇列
順序棧儲存結構 define stack size 50 typedef structstack 順序棧初始化 void initstack stack s 順序進棧 int push stack s,type x 順序棧出棧 int pop stack s,type x 鏈棧儲存結構 typede...