棧 佇列的鏈式儲存結構

2021-09-27 06:28:50 字數 2886 閱讀 4848

前面已經講解過棧是什麼,也用順序儲存的方式實現了棧,今天學習了鍊錶,我們就用鏈式儲存來實現一下棧

棧就是規定在一端進行插入和刪除的線性表,而用鏈式儲存實現棧,是在頭部進行操作還是在尾部進行操作呢?

那我們還是來看一下頭部插入和尾部插入的動畫

看完這兩個我們發現頭插和尾插的時間複雜度都是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...