1. 程式人生 > >[數據結構]手動實現隊列

[數據結構]手動實現隊列

元素 als false string ack png boolean urn 第一個

隊列有兩種實現方式:靜態隊列(數組)和動態隊列(鏈表)。

這次我就使用數組來實現靜態隊列了。值得註意的是:往往實現靜態隊列,我們都是做成循環隊列。

技術分享圖片

package com.darrenchan;

public class MyQueue {
    public int[] arrays;
    public int front;//指向第一個有效元素
    public int rear;//指向最後一個有效元素的下一個元素(無效元素)

    public MyQueue(int[] arrays, int front, int rear) {
        
this.arrays = arrays; this.front = front; this.rear = rear; } /** * 判斷隊列是否滿了 * @param myQueue * @return */ public static boolean isFull(MyQueue myQueue){ if((myQueue.rear + 1) % myQueue.arrays.length == myQueue.front){ return
true; }else{ return false; } } /** * 判斷是否為空 * @param myQueue * @return */ public static boolean isEmpty(MyQueue myQueue){ if(myQueue.rear == myQueue.front){ return true; }else{ return false
; } } /** * 入隊 * @param myQueue * @param value */ public static void enQueue(MyQueue myQueue, int value){ //不是滿的隊列才入隊 if(!isFull(myQueue)){ myQueue.arrays[myQueue.rear] = value; myQueue.rear = (myQueue.rear + 1) % myQueue.arrays.length; } } /** * 遍歷 * @param myQueue */ public static void traverse(MyQueue myQueue){ int i = myQueue.front; while(i != myQueue.rear){ System.out.print(myQueue.arrays[i] + " "); i = (i + 1) % myQueue.arrays.length; } System.out.println(); } public static void outQueue(MyQueue myQueue){ if(!isEmpty(myQueue)){ int value = myQueue.arrays[myQueue.front]; System.out.println(value); myQueue.front = (myQueue.front + 1) % myQueue.arrays.length; } } public static void main(String[] args) { MyQueue myQueue = new MyQueue(new int[6], 0, 0); System.out.println(isEmpty(myQueue)); enQueue(myQueue, 1); enQueue(myQueue, 2); enQueue(myQueue, 3); enQueue(myQueue, 4); enQueue(myQueue, 5); System.out.println(isFull(myQueue)); traverse(myQueue); outQueue(myQueue); } }

從上面的設計我們可以發現:rear並不指向最後一個有效的元素,在循環隊列中這樣設計是非常方便的!因為這樣設計可以讓我們分得清隊頭和隊尾(不然循環隊列不斷入隊或出隊,位置是變化很快的)

由於我們是循環隊列,所以frontrear值會經常變動,我們得把frontrear的值限定在一個範圍內,不然會超出隊列的長度的。

有這麽一個算法:rear=(rear+1)%數組長度

  • 比如rear的下標是2,數組的長度是6,往後面移一位是3,那麽rear = (rear+1) % 6,結果還是3

技術分享圖片

[數據結構]手動實現隊列