Queue

簡単なQueueの実装を示してみた。円環キューとかの方が良いのだが、とりあえず初心者でも思いつくことができるレベルのものだ。各メソッドで配列サイズのチェックもしないといけないのだが、サイズに関する問題が発生した場合はExceptionを投げるべきで、そういったところはかなり実装よりの話になるので、ここでは省いている。まずはこれを理解してから次のステップでそういったことを理解すれば良いだろう。

public class Queue {
private Object[] data;
private int tail;
public Queue() {
data = new Object[10];
tail = 0;
}
public void enqueue(Object o){
data[tail] = o;
tail++;
}
public Object dequeue() {
Object ret = data[0];
for (int i=0 ; i<data.length-1 ; i++) {
data[i] = data[i+1];
}
tail–;
return ret;
}
}

Stackの実装例も作ってみた。これも、エラー処理については対応していない。
動作確認用のプログラムTestも作ってみた。

public class Stack {
private Object[] data;
private int sp;
public Stack() {
data = new Object[10];
sp = 0;
}
public void push(Object o){
data[sp] = o;
sp++;
}
public Object pop() {
sp–;
Object ret = data[sp];
return ret;
}
}
public class Test {
public static void main(String[] args) {
Stack stack = new Stack();
stack.push(“1”);
stack.push(“2”);
stack.push(“3”);
stack.push(“4”);
stack.push(“5”);
stack.push(“6”);
System.out.println((String)stack.pop()); // 6
System.out.println((String)stack.pop()); // 5
System.out.println((String)stack.pop()); // 4
System.out.println((String)stack.pop()); // 3
System.out.println((String)stack.pop()); // 2
stack.push(“7”);
System.out.println((String)stack.pop()); // 7
System.out.println((String)stack.pop()); // 1

Queue queue = new Queue();
queue.enqueue(“1”);
queue.enqueue(“2”);
queue.enqueue(“3”);
queue.enqueue(“4”);
queue.enqueue(“5”);
queue.enqueue(“6”);
System.out.println((String)queue.dequeue()); // 1
System.out.println((String)queue.dequeue()); // 2
System.out.println((String)queue.dequeue()); // 3
System.out.println((String)queue.dequeue()); // 4
System.out.println((String)queue.dequeue()); // 5
queue.enqueue(“7”);
System.out.println((String)queue.dequeue()); // 6
System.out.println((String)queue.dequeue()); // 7
}
}

同じカテゴリの記事: Java