Java 循環隊列的實現


隊列概念

  隊列(Queue)是限定只能在一端插入、另一端刪除的線性表。允許刪除的一端叫做隊頭(front),允許插入的一端叫做隊尾(rear),沒有元素的隊列稱為“空隊列”。

  隊列具有先進先出(FIFO)的特性。

  普通順序隊列存在的問題

    在普通順序隊列中,入隊的操作就是先將尾指針rear右移一個單位,然后將元素值賦值給rear單位。出隊時,則是頭指針front后移一個單位。像這樣進行了一定數量的入隊和出隊操作后,可能會出現這樣的情況:

    尾指針rear已指到數組的最后有一個元素,即rear==MaxLen-1,此時若再數組的前面部分可能還有很多閑置空間,即這種溢出並非是真的沒有可用的存儲空間,故稱這種溢出現象為“假溢出”。顯然,必須要解決這一塊假溢出的問題,否則順序隊列就沒有太多使用價值。

  循環隊列

    循環隊列的存儲結構,頭、尾指針都和普通順序隊列相同。不同的只是將隊列視為“環狀結構”,即data[0]為緊接着data[MaxLen-1]的單元,為相鄰的元素,首位成為一個環。結構如下:(來自:百科)

 

代碼實現

  全局變量:定義隊列長度

  

static int MaxLen;

  循環隊列基本數據結構的實現:

static class myQueue{
            int front;
            int rear;
            int queueList[];
            public myQueue() {
                // TODO Auto-generated constructor stub    
                queueList=new int[MaxLen];
                front=0;
                rear=0;
            }
}

  判空函數

public boolean isEmpty() {
                if(front==rear){
                return true;
            }
                return false;
            }

  判滿函數

public boolean isFull(){
                if(((rear+1)%MaxLen)==front){
                    return true;
                }
                else{
                    return false;
                }
            }

 取隊頭元素

 

public void queueFront(int getFront){
                if(isEmpty()==false){
                    getFront=queueList[(front+1)%MaxLen];
                }
                else {
                    System.out.println("ERROR:Queue is Empty");
                    return;
                }
            }

入隊

public void enQueue(int enData) {
                if(isFull()==false){
                    rear=(rear+1)%MaxLen;
                    this.queueList[rear]=enData;
                }
                else{
                    System.out.println("ERROR:Queue is Full");
                    return;
                }
                
            }

出隊

public void outQueue() {
                if(isEmpty()==false){
                    front=(front+1)%MaxLen;
                }
                else {
                    System.out.println("ERROR:Queue is Empty");
                    return;
                }
                
            }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM