Java-數據結構(三)------隊列

一、什麼是隊列

1、隊列(簡稱作隊,Queue)是一種特殊的線性表,差別是線性表允許在任意位置插入和刪除,而隊列只允許在其一端進行插入操作在其另一端進行刪除操作。

2、隊列的插入操作通常稱作入隊列,隊列的刪除操作通常稱作出隊列。

3、隊列的底層數據結構可以用數組來實現。

4、隊列具有FIFO(先進先出)的特點。

二、3種隊列的介紹

Java 集合中的 Queue 繼承自 Collection 接口 ,Deque, LinkedList, PriorityQueue, BlockingQueue 等類都實現了它。

1、順序隊列

在這裏插入圖片描述

特點

順序隊列是常見的隊列,從隊尾添加元素,從對頭刪除元素。

假溢出問題

在這裏插入圖片描述

PS:圖片來源教材書籍

缺點

容易發生假溢出問題,當然如果確定不會發生溢出,也可以採用順序隊列

2、循環隊列

如果隊尾指針到達最後的時候,如果再往裏面增加元素,我們使隊尾指針指向隊列的頭部。

循環隊列解決假溢出問題

在這裏插入圖片描述
判斷隊列是滿的還是空

front=(read+1) % length;

缺點

要求初始化時循環隊列必須確定一個固定的長度,所以有儲存元素個數的限制和浪費空間的問題;

3、鏈式隊列

解決了普通隊列的一些不足,那就是在空間上,鏈式隊列更加靈活

用單鏈表存儲隊列,稱爲鏈隊列。

定義front指針指向頭結點,rear指針指向終端結點,空隊列時,front和rear都指向頭結點。

在這裏插入圖片描述

特點

鏈隊列沒有溢出的問題,只有當內存沒有可用空間時纔會出現溢出,但是每個元素都需要一個引用域,從而產生了結構性開銷。

4、優先隊列

優先隊列(PriorityQueue)是不同於普通隊列的先進先出的隊列,每次從隊列中取出的是具有最高優先權的元素

案例:銀行排隊,vip客戶優先

PriorityQueue是從JDK1.5開始提供的新的數據結構接口。

如果不提供Comparator的話,優先隊列中元素默認按自然順序排列,也就是數字默認是小的在隊列頭,字符串則按字典序排列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章