Java實現迴圈佇列和鏈式佇列

2021-09-17 01:25:09 字數 2868 閱讀 3079

佇列的定義:

佇列是一種只允許一端進行插入操作,在另一端進行刪除操作的線性表。允許插入的一端稱為稱為隊尾,刪除的一段是隊頭。想象你去排隊購買車票時,排著乙個很長的隊,排在最前面的人買完票走了,這個操作就稱為出隊操作,而在佇列的後面又來乙個人排在後面,這個操作就稱為入隊操作。

乙個普通的佇列:

對於乙個普通的佇列來說, 如果進行入隊的話,僅在佇列後面追加乙個元素就可以了,然後將隊尾指標後移乙個位置就可以了,但是如果要刪除乙個元素,那就很麻煩了,在隊頭刪除了乙個元素,那麼後面的每乙個元素都要向前移動乙個·位置,是不是很麻煩?即使我們不讓後面的元素往前移,我們把頭指標向後移,那麼想想,前面空閒的空間是不是很浪費?所以我們就需要使用迴圈佇列。

迴圈佇列的定義:

其實迴圈佇列只是在普通佇列的基礎上,做了一點小小的改動,如果隊尾指標到達最後的時候,如果再往裡面增加元素,我們使隊尾指標指向佇列的頭部(前面有空閒空間的情況下)。

其實這裡需要注意兩個問題了,那就是如何判斷佇列是滿的還是空的,判斷佇列空還好說,那就是如果隊頭指標和隊尾指標相等,那麼這就是乙個空佇列。因為這是乙個迴圈佇列,判斷滿的時候應該需要這樣判斷:(隊尾 + 1)%queuesize == 隊頭

佇列的基本操作:

public myqueue(int size)  //利用構造器建立乙個空佇列

public boolean enqueue(int i)   //入隊操作

public boolean dequeue()   //出隊操作

public void printqueue()   //遍歷整個佇列

建立乙個空佇列:

public myqueue(int size)
這裡利用構造器,當呼叫者呼叫的時候就建立出來,大小由呼叫者決定。

入隊操作:

首先需要判斷佇列是否為滿,如果佇列滿了,那還怎麼入隊?這裡思想很簡單,把元素放入隊尾,然後把隊尾指標向後移動乙個位置,,注意這裡的rear = (rear+1)%size;為什麼要模以size呢,因為當隊尾指標在最後乙個位置的時候,就使它移向佇列前面,這也是迴圈佇列最重要的思想。

public boolean enqueue(int i)

datab[rear] = i;

rear = (rear+1)%size;

count++;

return true;

}

出隊操作:

很簡單,刪除隊頭元素,隊頭指標向後移動。

//出隊

public boolean dequeue()

front = (front+1)%size;

count--;

return true;

}

遍歷整個佇列:

佇列有效元素的個數我們已經用乙個常量記錄下來,那麼知道佇列有效元素的個數,那麼遍歷整個佇列不是很簡單嗎,從頭開始遍歷,遍歷個數的次數不久可以了嘛。

public void printqueue()

system.out.println();

}

鏈式佇列的定義:

它的存在其實還是解決了普通佇列的一些不足,那就是在空間上,鏈式佇列更加靈活

佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已。

鏈式佇列的基本操作:

public mylqueue()   //建立乙個頭節點

public boolean addele(int a)   //在隊尾插入元素

public int delele()   //在頭部刪除元素

public void printqueue()  //遍歷佇列

建立乙個佇列:

建立乙個頭節點,資料域是不儲存元素的。空佇列頭指標和尾指標都指向頭節點。

public mylqueue()
在隊尾插入元素:

和鍊錶的操作差不多,把新加的節點的指標域清空,然後使尾節點的指標域儲存新節點的位址,然後把尾指標指向這個新的節點。

**:

//在尾部插入元素

public boolean addele(int a)

在頭部插入元素:

有了頭節點的存在,操作起來方便了很多,首先需要判斷佇列是否為空,然後還需要判斷佇列是不是只有乙個節點,那麼在刪除這個節點之後還需要執行乙個操作,那就是把尾節點也指向頭節點。在執行出隊操作的時候需要乙個輔助指標,輔助我們完成這個操作。

}遍歷整個佇列:

跟普通的鍊錶差不多,從頭節點開始,依次往後遍歷。

public void printqueue()

system.out.println();

}

佇列實現 迴圈佇列 鏈式佇列

佇列 queue 是一種類似棧的資料結構,棧是 後進先出 而佇列是 先進先出 佇列通常模擬進出一致的資料處理場景,例如訊息推送處理,中的購物處理等.迴圈佇列預備知識 鏈式佇列預備知識 include include define error 0 define ok 1 define true 1 d...

迴圈順序佇列與鏈式佇列實現

佇列是一種先進先出的資料結構,分順序儲存結構和鏈式儲存結構兩種。順序儲存結構中廣泛使用的是迴圈佇列,也是佇列使用中最多的一種。下面將分別實現這兩種佇列的基本操作。includeusing namespace std const int maxsize 100 class queue int isem...

鏈式迴圈佇列

假設以帶頭點的迴圈鍊錶表示佇列,鍊錶長度為n,只設乙個指標指向隊尾元素節點,不設頭指標,試編寫相應的佇列初始化 入隊和出隊的演算法 實現要求 1 輸入迴圈鍊錶長度n 2 入隊m個元素 3 列印佇列中所有元素 4 出隊k個元素 5 列印佇列中的元素 6 銷毀佇列。輸入 8 61 2 3 4 5 6 3...