首先來看看什麼是佇列?
佇列是只允許在一端進行插入資料操作,在另一端進行刪除資料操作 的特殊線性表。
通常情況下插入資料那一端叫做隊尾,刪除的那一端叫做對頭,佇列具有先進先出的特點。
佇列一共有兩種線性儲存方式,一種是順序的一種是鏈式的,順序佇列如圖所示;
如果再加入兩個元素就會出現假溢位現象。實際上還剩餘兩個空間,當順序儲存資料,有空間剩餘的叫做假溢位,
如果所有空間都已經放滿這時再放入資料才叫做真溢位。
為了解決假溢位的現象,便提出了迴圈佇列的概念,當佇列後面滿了時再從頭開始。
迴圈佇列判斷是否已滿有三種方式:
1 少用乙個儲存單元
如果少用乙個儲存空間,則尾隊尾指標加1等於隊頭指標為佇列滿的判斷條件:(rear+1)%maxsize==front佇列空的條件仍舊為rear == front
2 設定乙個標記為
設定標記為flag,初始時置flag = 0;每當入佇列操作成功,就置flag=1;每當出佇列成功就置flag=0.此時判斷佇列空 的條件為:rear == front && flag == 0;判斷佇列滿的條件為rear == front&& flag == 1
3 設定乙個計數器
設定計數器count,初始時置count=0,每當入佇列操作成功,就是count加1,每當出佇列成功,就使count減1。此時佇列空的判斷條件為:count==0;佇列滿的判斷條件為count>0 && rear == front 或者count == maxsize
**如下:
在監視視窗可以看見,當元素插滿之後又開始從對頭進行插入
執行結果為:
資料結構 佇列實現(順序迴圈佇列 鏈式佇列)
佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...
資料結構 迴圈佇列(順序佇列)模板類實現
資料結構筆記3.3 順序佇列是用順序表實現的 即依託於陣列 這裡實現的是迴圈佇列,其實也可以不用迴圈,但是那樣的話,空間的利用效率就太低了,這就是 假溢位 問題,因為在陣列的前端可能還有空閒的位置 因為佇列中的資料是在動態變化的,可能出隊也可能入對 為了能夠充分利空間,所以用迴圈佇列,即在邏輯上把陣...
資料結構之佇列(順序儲存),實現迴圈佇列
迴圈佇列利用順序佇列的第2種出隊方式 1.使用隊頭 front 向後移動,而不是通過將整個佇列向前移動,大大提高了出隊的效率。2.使用迴圈佇列,解決了第2種出隊方式浪費儲存空間的問題。3.也就是說,迴圈佇列出隊效率高,儲存空間利用率高。空佇列 迴圈佇列 插入元素 滿佇列 方法 1.利用取模 2.判斷...