Java數組實現迴圈隊列的兩種方法

來源:互聯網
上載者:User

標籤:迴圈隊列

用java實現迴圈隊列的方法:

1、增加一個屬性size用來記錄目前的元素個數。目的是當head=rear的時候,通過size=0還是size=數組長度,來區分隊列為空白,或者隊列已滿。

2、數組中只儲存數組大小-1個元素,保證rear轉一圈之後不會和head相等,也就是隊列滿的時候,rear+1=head,中間剛好空一個元素。

      當rear=head的時候,一定是隊列空了。

隊列(Queue)兩端允許操作的類型不一樣:

可以進行刪除的一端稱為隊頭,這種操作也叫出隊dequeue;

可以進行插入的一端稱為隊尾,這種操作也叫入隊enqueue。

隊列的


實現隊列時,要注意的是假溢出現象,如的最後一幅圖。

的假溢出現象


解決辦法:使用鏈式儲存,這顯然可以。在順序儲存時,我們常見的解決辦法是把它首尾相接,構成迴圈隊列,這可以充分利用隊列的儲存空間。

迴圈隊列:


在中,front指向隊列中第一個元素,rear指向隊列隊尾的下一個位置。

但依然存在一個問題:當front和rear指向同一個位置時,這代表的是隊空還是隊滿呢?大家可以想象下這種情景。

解決這種問題的常見做法是這樣的:

使用一標記,用以區分這種易混淆的情形。

犧牲一個元素空間。當front和rear相等時,為空白;當rear的下一個位置是front時,為滿。

如:


下面我們給出迴圈隊列,並採用第二種方式,即犧牲一個元素空間來區分隊空和隊滿的代碼.

幾個重點:

1、front指向隊頭,rear指向隊尾的下一個位置。

2、隊為空白的判斷:front==rear;隊為滿的判斷:(rear+1)%MAXSIZE==front。

import java.io.*;    public class QueueArray {       Object[] a; //對象數組,隊列最多儲存a.length-1個對象       int front;  //隊首下標       int rear;   //隊尾下標       public QueueArray(){           this(10); //調用其它構造方法       }       public QueueArray(int size){           a = new Object[size];           front = 0;           rear =0;       }       /**       * 將一個對象追加到隊列尾部       * @param obj 對象       * @return 隊列滿時返回false,否則返回true       */      public boolean enqueue(Object obj){           if((rear+1)%a.length==front){               return false;           }           a[rear]=obj;           rear = (rear+1)%a.length;           return true;       }       /**       * 隊列頭部的第一個對象出隊       * @return 出隊的對象,隊列空時返回null       */      public Object dequeue(){           if(rear==front){               return null;           }           Object obj = a[front];           front = (front+1)%a.length;           return obj;       }       public static void main(String[] args) {           QueueArray q = new QueueArray(4);           System.out.println(q.enqueue("張三"));           System.out.println(q.enqueue("李斯"));           System.out.println(q.enqueue("趙五"));           System.out.println(q.enqueue("王一"));//無法入隊列,隊列滿           for(int i=0;i<4;i++){               System.out.println(q.dequeue());           }       }   } 

Java數組實現迴圈隊列的兩種方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.