1. 程式人生 > >Java 佇列2:迴圈佇列

Java 佇列2:迴圈佇列

一、概述:
1、原理:
與普通佇列的區別在於迴圈佇列新增資料時,如果其有效資料end == maxSize - 1(最大空間)的話,end指標又移動到-1的位置
刪除資料時,如果head== maxSize時 head指標移動到0的位置

2、示例圖:
這裡寫圖片描述

package com.java.queue;

/**
 * @描述 對列
 * @專案名稱 Java_DataStruct
 * @包名 com.java.stack
 * @類名 Queue
 * @author chenlin
 * @date 2011年6月5日 下午8:12:47
 * @version 1.0
 * @SVN $Rev$
 */
public class CycleQueue { private long[] arr; private int maxSize;// 最大空間 private int len;// 有效長度 private int head;// 隊頭 private int end;// 隊尾 public CycleQueue(int size) { this.maxSize = size; this.arr = new long[maxSize]; this.len = 0; this.head = 0
; this.end = -1; } /** * 從隊尾插入資料 * * @param value */ public void insert(long value) { //如果滿了,為什麼是maxSize - 1 ,因為從-1開始 if (end == maxSize - 1) { end = -1; } arr[++end] = value; len++; } /** * 從隊頭移除資料 */
public long remove() { long result = arr[head++]; if (head == maxSize) { head = 0; } len--; return result; } /** * 判斷是否為空 * * @return */ public boolean isEmpty() { return (len == 0); } /** * 判斷是否滿了 * * @return */ public boolean isFull() { return (len == maxSize); } /** * 獲得佇列的有效長度 * * @return */ public int size() { return len; } public static void main(String[] args) { CycleQueue queue = new CycleQueue(50); queue.insert(22); queue.insert(33); queue.insert(44); queue.insert(534); queue.insert(21); queue.insert(55); while (!queue.isEmpty()) { System.out.print(queue.remove() + " "); } System.out.println(); queue.insert(33); queue.insert(13); queue.insert(23); while (!queue.isEmpty()) { System.out.print(queue.remove() + " "); } } }

相關推薦

Java 佇列2迴圈佇列

一、概述: 1、原理: 與普通佇列的區別在於迴圈佇列新增資料時,如果其有效資料end == maxSize - 1(最大空間)的話,end指標又移動到-1的位置 刪除資料時,如果head== ma

自定義佇列2迴圈佇列

通過學習自定義佇列,瞭解佇列的資料結構。 首先寫一個佇列的介面,描述其具有的基本功能。Queue.java 然後寫一個介面的實現類,這只是其中一種實現方式,為迴圈佇列。LoopQueue.java 最後寫一個測試類,測試自定義陣列佇列的效果。Test.java  

資料結構實現(四)迴圈佇列(C++版)

資料結構實現(四):迴圈佇列(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入隊操作 2.2 出隊操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析 3.1 入

實驗二迴圈佇列的驗證實驗 liujieying

檔案1:CirQueue.h 源程式: # ifndef CirQueue_H # define CirQueue_H const int QueueSize=100; template<class DataType> class CirQueue { public:

Java併發(十八)阻塞佇列BlockingQueue BlockingQueue(阻塞佇列)詳解 二叉堆(一)之 圖文解析 和 C語言的實現 多執行緒程式設計阻塞、併發佇列的使用總結 Java併發程式設計阻塞佇列 java阻塞佇列 BlockingQueue(阻塞佇列)詳解

阻塞佇列(BlockingQueue)是一個支援兩個附加操作的佇列。 這兩個附加的操作是:在佇列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。 阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者

資料結構實現 6.2優先佇列_基於最大二叉堆實現(C++版)

資料結構實現 6.2:優先佇列_基於最大二叉堆實現(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入隊操作 2.2 出隊操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析

JAVA併發程式設計阻塞佇列-ArrayBlockingQueue

生活 有很多的不快樂,其實是源自不滿足,而不滿足,很多時候是源自於心不定,而心不定則是因為不清楚究竟自己要什麼,不清楚要什麼的結果就是什麼都想要,結果什麼都沒得到。 生產者消費者模式 生產者和消費者問題是執行緒模型中一個經典問題: 生產者和消費者在同一個時間段內共用一塊記憶體區域

JAVA併發程式設計阻塞佇列-DelayQueue

生活 如果第一次你沒有成功,那麼稱之為1.0版,繼續加油。 DelayQueue的成員組成 今天來學習延時佇列,這個玩意兒也是非常重要,在定時器上有用到。 首先簡單瞭解下,延時佇列就是讓指定的資料再指定的時候以後出隊,也就是按照時間排序,因此它的核心確實是使用了昨天看的優先佇列。

12-Java併發程式設計阻塞佇列

Java併發程式設計:阻塞佇列   在前面幾篇文章中,我們討論了同步容器(Hashtable、Vector),也討論了併發容器(ConcurrentHashMap、CopyOnWriteArrayList),這些工具都為我們編寫多執行緒程式提供了很大的方便。今天我們來討

Java陣列--自定義迴圈佇列(三)

自定義迴圈佇列 思考: 在上篇文章中在討論佇列的出隊操作時候,其時間複雜度分析為O(n),這是因為每次出隊操作會刪除佇列的對頭,從而導致其陣列後續的元素都會往前移動n-1次,那怎麼樣才能實現隊列出隊操作的時候其時間複雜度為O(1)呢? 迴圈佇列定義 佇列(qu

javascript資料結構與演算法筆記(四)迴圈佇列

javascript資料結構與演算法筆記(四):迴圈佇列 一:簡介 二:ES6版Queue類 一:簡介 迴圈佇列是指佇列頭元素的移除會追加到佇列的尾部。我們此次拿一個例子來實現迴圈佇列,例子名就是模擬民間遊戲擊鼓傳花即

Java併發6阻塞佇列,Fork/Join框架

阻塞佇列 阻塞佇列是一個支援兩個附加操作的佇列。這兩個附加的操作支援阻塞的插入和移除方法: 支援阻塞的插入方法:佇列滿時,佇列會阻塞插入元素的執行緒,直到佇列不滿 支援阻塞的移除方法:佇列空時,獲取元素的執行緒會等待佇列變為非空 阻塞佇列常用於生產者消費者的場景。其中生產者是向佇列新增元素

Java併發包阻塞佇列(BlockingQueue)

BlockingQueue 在java.util.concurrent包中的 BlockingQueue介面類是一種執行緒安全的佇列。這篇文章我們將展示如何使用BlockingQueue。 這篇文章不討論BlockQueue的實現。如果你對此感興趣,有一片理論

資料結構迴圈佇列(C語言實現)

生活中有很多佇列的影子,比如打飯排隊,買火車票排隊問題等,可以說與時間相關的問題,一般都會涉及到佇列問題;從生活中,可以抽象出佇列的概念,佇列就是一個能夠實現“先進先出”的儲存結構。佇列分為鏈式佇列和靜態佇列;靜態佇列一般用陣列來實現,但此時的佇列必須是迴圈佇列,否則

Java併發程式設計阻塞佇列BlockingQueue

阻塞佇列BlockingQueue簡介 阻塞佇列BlockingQueue是JDK1.5併發新特性中的內容,阻塞佇列首先是一個佇列,同樣實現了Collection介面。阻塞佇列提供了可阻塞的put和take方法,以及支援定時的poll和offer方法。 阻塞佇列跟普通

Kafka#2訊息佇列

Kafka系列: 問題 訊息協議訊息訂閱訊息儲存訊息投遞訊息順序訊息清理訊息優先順序訊息過濾訊息堆積事務訊息? 訊息協議 ## Request Header 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6

佇列的實現(1)迴圈佇列的實現

佇列是一種“先進先出的資料結構”,可分為靜態佇列和鏈式佇列。靜態佇列一般使用陣列實現,陣列需要預先定義記憶體大小,為了避免記憶體浪費,一般使用迴圈佇列。接下來講述迴圈佇列的原理以及實現程式碼。 迴圈佇列資料結構定義: int front;//指向佇列頭,指向

資料結構Java語言描述之迴圈佇列的兩種實現方式

1、佇列的描述 佇列是一種先進先出的儲存資料的結構。如我們現實生活中的排隊就是一個典型的例子。 2、迴圈佇列及其優點   2.1、迴圈佇列是佇列的擴充套件,就是佇列首尾連線,形成一個閉環的圈子。   2.2、優點   充分利用儲存空間。 3、佇列的實現方式  

資料結構迴圈佇列(一)設定一個標誌域後的入佇列和出佇列的演算法

如果希望迴圈佇列中的元素都能得到利用,則需設定一個標誌域tag,並以tag的值為0或1來區分,尾指標和頭指標值相同時的佇列狀態是"空"還是"滿"。試編寫與此結構相應的入佇列和出佇列的演算法。 本題的迴圈佇列CTagQu

JAVA資料結構之迴圈佇列的實現

1、迴圈佇列CircleQueue類的實現程式碼如下所示: public class CircleQueue { private Object[] array; private int capac