1

次のコードを設定しました:

public class ListStack implements Stack {
    private class List {
        List next;
        Object object;

        public List(Object o, List n) {
            object = o;
            next = n;
        }
    }

    private List firstItem;
    private int size;

    public ListStack() {
        firstItem = new List(null, null);
        size = 0;
    }

    public List getEnd() {
        List endEl = firstItem;

        while (endEl.next != null) {
            endEl = endEl.next;
        }
        return endEl;
    }

    public boolean push(Object o) {
        List e1 = new List(o, null);
        this.getEnd().next = e1;
        size++;
        return true;
    }

    public Object pop() {
        if (this.firstItem.next == null) {
            return null;
        } else {
            List endEl;
            List tempEl;

            endEl = this.getEnd();
            tempEl = firstItem;
            while (tempEl.next != endEl) {
                tempEl = tempEl.next;
            }
            tempEl.next = null;
            size--;
            return tempEl.object;
        }
    }

    public int size() {
        return size;
    }

    public static void main(String[] args) {
        Stack s = new ListStack();

        Object test = new Object();
        Object test2 = new Object();

        System.out.println("pushing Object test to List: " + s.push(test));
        System.out.println("pushing Object test2 to List: " + s.push(test2));

        System.out.println("popping Object from List: " + s.pop());
        System.out.println("popping Object from List: " + s.pop());
        System.out.println("popping Object from List: " + s.pop());
    }
}

そしてこれ:

 public interface Stack {  
     public int size();
     public boolean push(Object o);
     public Object pop();
 }

しかし、最初のオブジェクトと2回の「null」のみを提供しますが、2つのオブジェクトを提供する必要があります:(私の間違いはどこですか?最後のアイテムを要求し、それを返します(.object)が、最初のオブジェクトアドレスのみを返します

4

2 に答える 2

4

pop()関数が返す必要があるのはendEl.object.

于 2013-05-06T21:31:10.243 に答える
1

あなたのコードは長すぎます。スタックは、要素を効率的にプッシュおよびポップできるデータ構造です。ただし、コードは両方の操作でスタック全体をトラバースする必要があります (つまり、 O(1)時間ではなくO(n)時間で実行されます)。

リストの先頭に追加する方が、追加するよりもはるかに効率的です。

効率的なプッシュの例:

public void push(Object o) {
    firstItem = new List(o, firstItem);
    size++;
}
于 2013-05-06T21:29:21.897 に答える