Queue用數組實現,並實現Iterator。

import java.util.Iterator;
public class QueueArrays<Item> implements Iterable{
    Item[] items= (Item[]) new Object[1];
    int N=0;//控制數組下標
    public int size(){
        return N;
    }
    public boolean isEmpty(){
        return N==0;
    }
    public void resize(int max){
        Item[] temps=(Item[])new Object[max];
        for (int i = 0; i < N; i++) {
            temps[i]=items[i];
        }
        items=temps;
    }
    public void enqueue(Item item){
        items[N++]=item;
        if (N==items.length) resize(items.length*2);
    }
    public Item dequeue(){
        Item item=items[0];
        this.dynamicRegulation();
        N--;
        if (N>0&&N<items.length/4) resize(items.length/2);
        return item;
    }
    //每次dequeue調整item的位置
    public void dynamicRegulation(){
        for (int i = 0; i <items.length-1 ; i++) {
            items[i]=items[i+1];
        }
    }

    @Override
    public Iterator iterator() {
        return new QueueIterator();
    }
    private class QueueIterator implements Iterator{
        int i=0;
        @Override
        public boolean hasNext(){
            return i<=N&&items[i]!=null;
        }
        @Override
        public Item next(){
            return items[i++];
        }
        @Override
        public void remove() {

        }
    }
}
//輸入示例
public class TestQueue {
    public static void main(String[] args) {
        QueueArrays qa = new QueueArrays();
        String[] s = {"to", "be", "or", "not", "to", "-", "be", "-", "-", "that", "-", "-", "-", "is"};
        for (String a : s) {
            if (!a.equals("-")) {
                qa.enqueue(a);
            } else if (!qa.isEmpty()) {
                System.out.print(qa.dequeue() + " ");
            }
        }
        System.out.println("(" + qa.size() + "left on queue)");
    }
}

結果爲
在這裏插入圖片描述

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