DS08 佇列的實現方式之鍊錶實現 使用尾指標

2021-09-11 01:32:16 字數 1656 閱讀 5999

鍊錶的結構決定了再煉表頭進行新增/刪除操作時時間複雜度僅為o(1),但是對鍊錶尾部進行操作的時間複雜度為o(n),而佇列是一種先進先出的資料結構,既要對隊首進行操作,也要對隊尾進行操作,所以必須對鍊錶進行一點修改,才能實現時間複雜度為o(1)的佇列.

修改的方式就是新增乙個尾指標,指向鍊錶的最後乙個節點,這個操作只是針對實現佇列時的優化,使得在鍊錶尾部新增元素的時間複雜度從o(n)將為o(1),也就是不需要從頭到尾遍歷,但是在鍊錶尾部刪除元素的時間複雜度依然是o(n),因為刪除時沒有辦法獲取被刪除節點的前乙個結點(因為沒有使用雙向鍊錶).

在鍊錶中使用尾節點要注意鍊錶為空的時候,head和tail都指向null,當鍊表中只有乙個元素的時候,head和tail指向同乙個節點.

實現時依然是先建立乙個queue介面類,用於定義佇列的一些必要操作,然後建立乙個linkedlistqueue類,實現queue介面就可以了.

具體**如下:

queue介面類:

public inte***ce queue
linkedlistqueue實現類:

/**

* 使用帶有尾指標的鍊錶實現佇列

* @author chenzhuji

* * @param */

public class linkedlistqueueimplements queue

public node()

public node(e e)

@override

public string tostring() }

private node head; //頭指標

private node tail; //尾指標

private int size; //節點個數

public linkedlistqueue()

/*** 獲取佇列中元素個數

*/@override

public int getsize()

/*** 判斷佇列是否為空

*/@override

public boolean isempty()

/*** 入隊操作

*/@override

public void enqueue(e e) else

} /**

* 出隊操作

*/@override

public e dequeue()

node ret = head;

head = head.next;

ret.next = null;

if(head == null)

size --;

return ret.e;

} /**

* 獲取隊頭元素

*/@override

public e getfront()

return head.e; }

@override

public string tostring()

return sb.tostring(); }

public static void main(string args)

llq.dequeue();

system.out.println(llq); }

}

佇列(二) 佇列的鍊錶實現方式

1.佇列的單向鍊錶的實現方法 return只可以返回乙個值,單向迴圈鍊錶來實現佇列的時候可以只保留乙個指標,因為保留rear指標能夠很方便的表示出front指標,所以保留rear指標。另外由於鍊錶的第乙個結點處理比較特殊,所以在初始化的時候需要單獨處理。鍊錶實現的佇列思想也是第乙個單元作為頭結點,不...

佇列(二) 佇列的鍊錶實現方式

1.佇列的單向鍊錶的實現方法 return僅僅能夠返回乙個值,單向迴圈鍊錶來實現佇列的時候能夠僅僅保留乙個指標,由於保留rear指標能夠非常方便的表示出front指標,所以保留rear指標。另外因為鍊錶的第乙個結點處理比較特殊,所以在初始化的時候須要單獨處理。鍊錶實現的佇列思想也是第乙個單元作為頭結...

佇列(二)佇列的鍊錶儲存

include define false 0 define ok 1 定義佇列每個節點的結構 typedef struct node node,qnode 相當於typedef struct node qnode 定義整個佇列結構 typedef struct squeue squeue 建立乙個空...