## 引入
## 概念簡述
## 特點
## 原理實現
## 時間複雜度分析
通過前面對陣列佇列的學習我們可以發現,當進行出隊操作時,佇列中的每乙個元素都需要向前挪動一位,
也正因此出隊操作的時間複雜度為o(n)。那麼可不可以在進行出隊操作時保持隊內元素不動?這樣的話時間
複雜度將變為o(1),可以很好地優化我們的結構,提公升效率。
在陣列中記錄隊首元素位置(front)與隊尾元素的下乙個位置(tail),當進行出隊操作時,通過維護front的指
向,進而避免內部元素發生挪動;由於隊首元素挪出陣列後,空出來的空間沒有被其他元素占用(可用),
當後續有其他元素入隊直至隊尾元素已經處於陣列末尾時,可以將後續元素放入之前出隊元素空出來的位置,
並重新維護tail的指向即可。形式上形成了一種類似環狀的結構,故稱之為迴圈佇列。
[注意]:
1. 隊列為空:front == tail
隊列為滿:(tail + 1) % capacity == front
2. 隊尾變數tail維護公式:
(tail + 1) % capacity
其中:front隊首元素索引
tail隊尾元素的下乙個位置索引
capacity陣列長度
1. 出隊操作不再需要佇列內部所有元素進行挪動,只需要表示頭部的索引改變即可,時間複雜度降為o(1)
2. 因為是迴圈佇列,內部元素儲存形成環狀結構,故所有對於標誌性變數(隊首/隊尾)的維護都需要進行取餘
操作以表示迴圈處理。
1. 準備介面
// 準備介面
public inte***ce queue
2. 準備實現類
// 準備實現類:
public class loopqueueimplements queue
public loopqueue(int capacity)
@override
public int getsize()
@override
public boolean isempty()
// 入隊
@override
public void enqueue(e e)
data[tail] = e; // 裝載元素
tail = (tail + 1) % data.length; // tail繼續指向隊尾元素的下乙個位置
size++; // 元素數量記錄 +1
}// 出隊
@override
public e dequeue()
e ret = data[front]; // 獲取元素
data[front] = null; // 隊首元素置空
front = (front + 1) % data.length; // front重新指向當前隊首元素
size--; // 元素數量記錄 -1
// 縮容處理
if(size == getcapacity()/4 && getcapacity()/2!=0)
return ret;
}@override
public e getfront()
return data[front];
}@override
public string tostring()
}return res.tostring();
}public int getcapacity()
private void resize(int newcapacity)
data = newdata;
front = 0;
tail = size;
}}
3. 準備測試類
// 準備測試類
public static void main(string args)
}}
void enqueue(e) o(1) //均攤
e dequeue() o(1) //均攤
e front() o(1)
int getsize() o(1)
boolean isempty o(1)
[注意]:
相比於陣列佇列,迴圈佇列只是對其出隊操作進行了優化,通過維護隊首元素的變數,使得每當有元素
出隊時不再需要挪動其他元素,提公升了效率。同時也借助迴圈保證空間不被浪費。
資料結構之佇列(二) 鏈佇列
鏈佇列採用帶頭結點的鍊錶,隊頭指標始終指向頭結點,隊尾指標始終指向最後乙個元素 當隊列為空時 隊頭指標和隊尾指標均指向頭結點 鏈佇列不會滿!鏈佇列的定義 2.定義鏈佇列結構體 分別儲存兩個結點指標,隊頭指標和隊尾指標 typedef char datatype typedef struct node...
資料結構(二) 佇列
一 佇列定義 佇列是限定在一端進行插入,另一端進行刪除特殊線性表。二 佇列基本操作 入隊出隊 三 佇列例題 1.例1 舞伴配對問題 分析 這一題是一道經典的取模運算,每一次將編號往前加一位,到達n就取模。include include include include int main return ...
Java資料結構之佇列(二)
迴圈佇列避免空間浪費 迴圈佇列不使用動態陣列,底層的動態陣列自己維護 author zyw param public class loopqueueimplements myqueue public loopqueue public int getcapacity override public v...