0

有人可以解释我在这里做错了什么吗?我正在尝试根据书籍练习从两个堆栈创建一个队列。我从 peek 函数中收到错误“堆栈下溢”。但对我来说一切似乎都是正确的:P 请解释一下。谢谢!

//Program to implement Queue using two Stacks.

import java.util.NoSuchElementException;

public class Ex3_5_Stack {
    int N;
    int countOfNodes=0;
    private Node first;

    class Node {
        private int item;
        private Node next;
    }

    public Ex3_5_Stack() {
        first=null;
        N=0;
    }

    public int size() {
        return N;
    }

    public boolean isEmpty() {
        return first==null;
    }

    public void push(int item){
        if (this.countOfNodes>=3) {
            Ex3_5_Stack stack = new Ex3_5_Stack();
            stack.first.item=item;
            N++;
        } else {
            Node oldfirst = first;
            first = new Node();
            first.item=item;
            first.next=oldfirst;
            N++;
        }
    }

    public int pop() {
        if (this.isEmpty()) 
            throw new NoSuchElementException("Stack Underflow");

        int item = first.item;
        first=first.next;
        return item;
    }

    public int peek() {
        if (this.isEmpty()) 
            throw new NoSuchElementException("Stack Underflow");

        return first.item;
    }
}

和 MyQueue 文件

public class Ex3_5_MyQueue {
    Ex3_5_Stack StackNewest,StackOldest;

    public Ex3_5_MyQueue() {
        super();
        StackNewest = new Ex3_5_Stack();
        StackOldest = new Ex3_5_Stack();
    }

    public int size() {
        return StackNewest.size()+StackOldest.size();
    }

    public void add(int value) {
        StackNewest.push(value);
    }

    private void transferStack() {
        if (StackOldest.isEmpty()) {
            while (StackNewest.isEmpty()) {
                StackOldest.push(StackNewest.pop());
            }
        }
    }

    public int peek() {
        this.transferStack();
        return StackOldest.peek();
    }

    public int remove() {
        this.transferStack();
        return StackOldest.pop();
    }

    public static void main(String[] args) {
        Ex3_5_MyQueue myQueue = new Ex3_5_MyQueue();
        myQueue.add(4);
        myQueue.add(3);
        myQueue.add(5);
        myQueue.add(1);
        System.out.println(myQueue.peek());
    }
}
4

1 回答 1

0

transferStack()中,您缺少感叹号。它应该是:

private void transferStack(){
    if(StackOldest.isEmpty()){
        while(!StackNewest.isEmpty()){ // you forgot it here
            StackOldest.push(StackNewest.pop());
        }
    }
}
于 2013-07-24T04:42:41.580 回答