さまざまなデータ構造(7)キュー2

データ構造

こんにちは。前回はキューについて説明しました。今回は、キュークラスとしてまとめます。

キューのプログラム(Java)

package data_structure;

public class MyQueue<E> {

    private MyLinkedList<E> myList;

    public MyQueue() {
        myList = new MyLinkedList<E>();
    }

    public void offer(E element) {
        myList.add(0, element);
    }

    public E peek() {
        return myList.get(myList.size() - 1);
    }

    public E poll() {
        E result = peek();
        myList.remove(myList.size() - 1);
        return result;
    }

    public boolean isEmpty() {
        return myList.size() == 0;
    }

    public String toString() {
        return myList.toString();
    }
}

基本的にMyLinkedListクラスのメソッドを呼び出して済ませています。

動作確認をするプログラム

上のプログラムで作ったMyQueueクラスが正しく動作するかを確かめるプログラムです。ひととおり確かめています。前回の説明では苗字を使っていましたが、旧暦の月名にしました。

package data_structure;

public class MyQueueExec {

    public static void main(String[] args) {

        MyQueue<String> queue = new MyQueue<String>();

        System.out.println(queue.isEmpty());

        queue.offer("睦月");
        System.out.println(queue);
        System.out.println(queue.isEmpty());

        queue.offer("如月");
        System.out.println(queue);

        queue.offer("弥生");
        System.out.println(queue);

        queue.offer("卯月");
        System.out.println(queue);

        String s = queue.peek();
        System.out.println(s);
        System.out.println(queue);

        s = queue.poll();
        System.out.println(s);
        System.out.println(queue);

        System.out.println(queue.peek());
    }
}

実行結果は次になります。

true
[睦月]
false
[如月]→[睦月]
[弥生]→[如月]→[睦月]
[卯月]→[弥生]→[如月]→[睦月]
睦月
[卯月]→[弥生]→[如月]→[睦月]
睦月
[卯月]→[弥生]→[如月]
如月

スタックとキューを作ったので、次回は、木を作っていきます。さすがに連結先が1つでは木にならないので、MyLinkedListクラスを使い回すことができなくなります。そんなことは気にしないで、ちゃんと木になるようなプログラムを作っていきます。

今回はこれでおしまい。それではまた。

Posted by 春日井 優