キュー
キュー定義:挿入操作は一端のみで、かつ線形テーブル削除操作の他端に許容されます。
例えば、モバイル、チャイナユニコム、通信、その他の顧客サービスの呼び出し、同様に顧客サービスのスタッフと顧客は、顧客サービスのスタッフが忙しいので、の場合には、顧客が最初に作るのを待って、顧客サービスのスタッフとアイドルになるまで待つように求めていた、常に比較して少ないです携帯電話への接続の顧客は、そのプロセスをキューイング現在の顧客の顧客サービスの電話があるでしょう。カスタマーサービスシステムは、このような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();
}
}