前面已經講解過棧是什麼,也用順序儲存的方式實現了棧,今天學習了鍊錶,我們就用鏈式儲存來實現一下棧
棧就是規定在一端進行插入和刪除的線性表,而用鏈式儲存實現棧,是在頭部進行操作還是在尾部進行操作呢?
那我們還是來看一下頭部插入和尾部插入的動畫
看完這兩個我們發現頭插和尾插的時間複雜度都是o(1),可是我們想一下,刪除一樣嗎,你把這兩個**倒著看,會發現頭部刪除我們只需要刪除頭指標的下乙個,可是尾部刪除的時候,我們必須遍歷整個鍊錶,找到尾指標的前面的那個結點,才能刪除尾部元素,那時間複雜度可就是o(n)了啊,所以。。。。。。。。。總結一下,我們最後選用把鍊錶的尾部當作棧底,頭部當作棧頭。
先看一下類圖:
因為棧的實現依賴於線性表,所以很簡單,**實現如下:
package com.lfz.鍊錶;
import com.lfz.棧.stack;
public
class
linkedstack
implements
stack
@override
public
intgetsize()
@override
public
boolean
isempty()
@override
public
void
push
(e e)
@override
public e pop()
@override
public e peek()
@override
public
void
clear()
@override
public string tostring()
else
else}}
return sb.
tostring()
;}@suppresswarnings
("unchecked"
)@override
public
boolean
equals
(object obj)
if(obj ==
this)if
(obj instanceof
linkedstack
)return
false;}
}
說完棧,再來說一下佇列,前面我們也用順序儲存的方式實現了佇列,接下來,也用鏈式儲存實現一下佇列。
佇列就是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,而用鏈式儲存實現佇列,是在頭部進行插入/刪除,還是在尾部進行插入/刪除呢?
上面我們已經看過了頭部和尾部的插入和刪除的**,那麼我們現在來總結一下:
頭部進行插入的時間複雜度 o(1)
頭部進行刪除的時間複雜度 o(1)
尾部進行插入的時間複雜度 o(1)
尾部進行刪除的時間複雜度 o(n)
所以,我們在實現佇列的時候最優的選的就是在尾部進行插入,頭部進行刪除
類圖如下:
佇列的實現也是依賴於線性表,所以也很簡單,**實現如下:
package com.lfz.鍊錶;
import com.lfz.佇列.queue;
public
class
linkedqueue
implements
queue
@override
public
intgetsize()
@override
public
boolean
isempty()
@override
public
void
clear()
@override
public
void
enqueue
(e e)
@override
public e dequeue()
@override
public e getfront()
@override
public e getrear()
@override
public string tostring()
else
else}}
return sb.
tostring()
;}@suppresswarnings
("unchecked"
)@override
public
boolean
equals
(object obj)
if(obj ==
this)if
(obj instanceof
linkedqueue
)return
false;}
}
好了,棧和佇列的鏈式儲存結構就到這了,大家看完記得關注我哦,後面的會更加精彩的??? 棧與佇列 棧的鏈式儲存結構
1 鏈棧通常用單鏈表表示,由於棧的主要操作是棧頂插入與刪除,顯然以鍊錶的頭部作為棧頂最方便,而且沒必要為了操作方便附加乙個頭結點2 鏈式儲存結構 將單鏈表頭指標與棧頂合二為一 3 typedef struct stacknode 4stacknode,linkstackptr 8 typedef s...
棧 鏈式儲存結構
講完了棧的順序儲存結構,現在來看棧的鏈式儲存結構,簡稱為鏈棧。想想看,棧只是棧頂來做插入和刪除操作,棧頂放在鍊錶的頭部還是尾部?由於單鏈表有頭指標,而棧頂指標也是必須的,所以比較好的辦法是把棧頂放在單鏈表的頭部。都已經有了棧頂在頭部了,單鏈表中常用的頭結點也就失去了意義,通常對於鏈棧來說,是不需要頭...
棧(鏈式儲存結構)
通常由乙個一維陣列和乙個棧頂元素變數組成 如下 define maxsize struct stacknode struct stacknode createstack void push struct stacknode s,elementtype x elementtype pop struct...