佇列 雙端佇列與迴圈佇列

2021-10-22 17:30:40 字數 2158 閱讀 9574

介面與類的繼承關係:

雙端佇列:兩端都可以進行入隊和出隊操作的佇列

deque介面—>linkedlist(實現類)

方法:

方法解釋

addfirst(e) / ofterfirst(e)

入佇列(頭部元素)

addlast(e) / ofterlast(e)

入佇列(尾部元素)

removefirst() / pool()first

出佇列(頭部元素

removelast() / poollast()

出佇列(尾部元素)

getfirst() / peekfirst()取元素(不刪除,頭部元素

getlast() / peeklast()

取元素(不刪除,尾部元素)

注:deque介面·繼承自queue介面,queue介面繼承於collection介面

陣列下標迴圈小技巧:

下標最後再往後(offset 小於 array.length): index = (index + offset) % array.length

下標最前再往前(offset 小於 array.length): index = (index + array.length - offset) % array.length

區分迴圈佇列的空與滿: 當 q.rear = q.front 時認為隊空 當 q.rear + 1 = q.front 時認為隊滿

例:622. 設計迴圈佇列(leetcode)

class

mycircularqueue

//把value插入迴圈佇列尾部

//成功返回true 失敗(容量滿了)返回false

public

boolean

enqueue

(int value)

array[rearindex]

= value;

size++

; rearindex++;if

(rearindex == array.length)

return

true;}

public

boolean

dequeue()

size--

; frontindex++;if

(frontindex == array.length)

return

true;}

//返回隊首元素

//隊列為空返回-1

public

intfront()

return array[frontindex];}

//返回隊尾元素

//隊列為空返回-1

public

intrear()

if(rearindex ==0)

else

return array[rearindex -1]

;}public

boolean

isempty()

public

boolean

isfull()

}

注1:站和佇列都是一種特殊的線性結構,只是對插入/刪除元素的方式做了限制

注2:棧表現出 filo 的特點,佇列表現出 fifo 的特點(add / remove / element

沒有特殊說明時,時間複雜度都是o(1))

注3:時間角度

佇列 雙端佇列

1.佇列 佇列是遵循先進先出 fifo,也稱為先來先服務 原則的一組有序的項。佇列在尾部新增新 元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾 class queue 向佇列新增元素 enqueue element 檢查佇列是否為空並獲取它的長度 isempty 從佇列移除元素 deque...

習題3 13 雙端佇列(迴圈佇列 迴圈陣列)

題目 push x,d 將元素x插入到雙端佇列d的頭 pop d 刪除雙端佇列d的頭元素,並返回 inject x,d 將元素x插入到雙端佇列d的尾部 eject d 刪除雙端佇列d的尾部元素,並返回。函式介面定義 bool push elementtype x,deque d elementtyp...

設計迴圈雙端佇列

題目描述 設計實現雙端佇列。你的實現需要支援以下操作 mycirculardeque k 建構函式,雙端佇列的大小為k。insertfront 將乙個元素新增到雙端佇列頭部。如果操作成功返回 true。insertlast 將乙個元素新增到雙端佇列尾部。如果操作成功返回 true。deletefro...