java實現隊列

    以下代碼是我用java實現數據結構中的隊列

package com.husiwang.Queue; 
 
 
/** 
 * Created by SiwangHu on 2015/2/2. 
 */ 
public class Queue { 
    private Object[] Data;    //數據緩衝區 
    private int Capacity;    //容量 
    private int Head;        //隊首指針 
    private int Tail;        //隊尾指針 
    private int Length;      //隊列長度 
 
    //無參構造函數 
    public Queue() { 
        Capacity = 20; 
        Head = 0; 
        Tail = 0; 
        Length = 0; 
        Data = new Object[Capacity]; 
    } 
 
    //有參構造函數 
    public Queue(int capacity) { 
        if (capacity > 0) { 
            Capacity = capacity; 
            Head = 0; 
            Tail = 0; 
            Length = 0; 
            Data = new Object[Capacity]; 
        } else { 
            throw new RuntimeException("容量不能爲空"); 
        } 
    } 
 
    //獲取容量 
    public int getCapacity() { 
        return Capacity; 
    } 
 
    //獲取隊首指針位置 
    public int getHead() { 
        return Head; 
    } 
 
    //獲取隊尾指針位置 
    public int getTail() { 
        return Tail; 
    } 
 
    //獲取隊列長度 
    public int getLength() { 
        return Length; 
    } 
 
    //判斷隊列是否爲空 
    public boolean IsEmpty() { 
        if (Length == 0) 
            return true; 
        else 
            return false; 
    } 
 
    //擴充容量 
    public void IncreaseCapacity() { 
        Object[] temp = new Object[Capacity]; 
        for (int i = Head,j=0; Tail < Head ? i!= Tail : i < Tail; i=(i+1)%Capacity,j++) { 
            temp[j]=Data[i]; 
        } 
        Head=0; 
        Tail=Capacity-1; 
        Capacity = Capacity * 2; 
        Data = new Object[Capacity]; 
        for (int i = 0; i < temp.length; i++) { 
            Data[i] = temp[i]; 
        } 
    } 
 
    //擴充容量 
    public void IncreaseCapacity(int multiple) { 
        Object[] temp = new Object[Capacity]; 
        for (int i = Head,j=0; Tail < Head ? i!= Tail : i < Tail; i=(i+1)%Capacity,j++) { 
            temp[j]=Data[i]; 
        } 
        Head=0; 
        Tail=Capacity-1; 
        Capacity = Capacity * multiple; 
        Data = new Object[Capacity]; 
        for (int i = 0; i < temp.length; i++) { 
            Data[i] = temp[i]; 
        } 
    } 
 
    //入隊 
    public void enQueue(Object data) { 
        if (Length < Capacity-1) { 
            Data[Tail] = data; 
            Tail = (Tail + 1) % Capacity; 
            Length++; 
        } else { 
            IncreaseCapacity(); 
            Data[Tail] = data; 
            Tail = (Tail + 1) % Capacity; 
            Length++; 
        } 
    } 
 
    //出隊 
    public Object deQueue() { 
        if (!IsEmpty()) { 
            Object temp = Data[Head]; 
            Head = (Head + 1) % Capacity; 
            Length--; 
            return temp; 
        } else { 
            throw new RuntimeException("隊列爲空"); 
        } 
    } 
 
    //獲取隊首元素 
    public Object Peek() { 
        if (!IsEmpty()) { 
            return Data[Head]; 
        } else { 
            throw new RuntimeException("隊列爲空"); 
        } 
    } 
 
    @Override 
    public String toString() { 
        String temp = ""; 
        for (int i = Head; Tail < Head ? i!= Tail : i < Tail; i=(i+1)%Capacity) { 
            temp += Data[i] + " "; 
        } 
        return "Queue{" + 
                "Data=" + temp + 
                ", Capacity=" + Capacity + 
                ", Head=" + Head + 
                ", Tail=" + Tail + 
                ", Length=" + Length + 
                '}'; 
    } 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章