データ構造とアルゴリズム(V)キュー - シーケンシャルストレージ構造

キュー


キュー定義:挿入操作は一端のみで、かつ線形テーブル削除操作の他端に許容されます。

例えば、モバイル、チャイナユニコム、通信、その他の顧客サービスの呼び出し、同様に顧客サービスのスタッフと顧客は、顧客サービスのスタッフが忙しいので、の場合には、顧客が最初に作るのを待って、顧客サービスのスタッフとアイドルになるまで待つように求めていた、常に比較して少ないです携帯電話への接続の顧客は、そのプロセスをキューイング現在の顧客の顧客サービスの電話があるでしょう。カスタマーサービスシステムは、このようなAキューデータ構造のアプリケーションです。

FIFOキューと呼ばれるキューのヘッドエンドを削除することができ、挿入端部がテールと呼ばれることができ、リニアテーブルです。
ここに画像を挿入説明
まずインタフェースキューキューを定義し、書き込みArrayQueueは、このインターフェースの利点を実現し、キューのインタフェースを定義し、別のキューを書き込むための長い必要後、ちょうどあなたが抽象メソッドのインターフェースを無効にすることができ、彼らはこのインタフェースを実装してみましょう。
次に、キュー、キューそんなにない抽象メソッドリストを書き込もうと、キューを空に尾を取得する最初のチーム、いくつかの抽象メソッドを取得し、チームの中に、要素の有効な数値を取得し、チームを空宣告しました。

public interface Queue<E> extends Iterable {
    //获取队列中元素的个数
    int getSize();

    //判断队列是否为空
    boolean isEmpty();

    //入队一个元素
    void enqueue(E e);

    //出队一个元素
    E dequeue();

    //获取队头
    E getFront();

    //获取队尾
    E getRear();

    //清空队列
    void clear();

}

ここでは、イテレータを実装ArrayQueueは、直線状の前に書かれたインタフェースを実装できるように反復処理可能を拡張するには、我々は、インターフェースが一端のみで、リニアテーブル削除操作のもう一方の端に挿入を可能にするだけでなく、直線状の性質と言いますリニアテーブルオブジェクトはArrayQueue、リニア形の直接使用に作成することができます。

import java.util.Iterator;
/*
  队列的顺序存储结构
*/
public class ArrayQueue<E> implements Queue<E> {
    //定义线性表对象list
    private ArrayList<E> list;
    //构造函数
    public ArrayQueue(){
        list=new ArrayList<>(); //创建list对象
    }
    //获取队列有效元素,用线性表的方法
    @Override
    public int getSize() {
        return list.getSize();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public void enqueue(E e) {
        list.addLast(e);
    }

    @Override
    public E dequeue() {
        return list.removeFirst();
    }

    @Override
    public E getFront() {
        return list.getFirst();
    }

    @Override
    public E getRear() {
        return list.getLast();
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public Iterator<E> iterator() {
        return list.iterator();
    }
	//以数组的格式返回,方便测试
    @Override
    public String toString() {
        StringBuilder sb=new StringBuilder();
        sb.append(String.format("ArrayQueue: %d/%d\n",getSize(),list.getCapacity()));
        sb.append('[');
        if(isEmpty()){
            sb.append(']');
        }else{
            for(int i=0;i<list.getSize();i++){
                sb.append(list.get(i));
                if(i==list.getSize()-1){
                    sb.append(']');
                }else{
                    sb.append(',');
                }
            }
        }
        return sb.toString();
    }
}

公開された70元の記事 ウォン称賛56 ビュー1985

おすすめ

転載: blog.csdn.net/qq_43624033/article/details/103569962
おすすめ