【问题标题】:Push method for Stack with Nodes带节点的堆栈的推送方法
【发布时间】:2021-06-01 11:18:00
【问题描述】:

我在做涉及 Java 中的堆栈和节点的家庭作业时遇到了麻烦。我了解堆栈的概念,但对节点感到困惑。任务是编写一个使用堆栈(不是 java.util.Stack)的程序,该程序检查数学表达式中正确的 ()、[] 和 {} 对。我们已经有了 Node 程序。 所以基本上我的问题是我需要一些帮助来完成我的 PStack 类的推送方法。

PStack.java

class PStack {
    private Node top;


    public PStack() {
        top=null;
    }
    public boolean isEmpty() {
        return top==null;
    }
    public int pop() {
        Node top1 = top;
        top = top.getNext();
        return top1.getData();


    }
    public void push(Node n) {
        



    }
    public int peek() {
        return top.getData();
    }

}

Node.java

public class Node {
    private int data;
    private Node nextnode;
    public Node(int intial) {
        data = intial;
        nextnode = null;
    }

    public int getData() {
        return data;
    }

    public Node getNext() {
        return nextnode;
    }

    public void setData(int newdata) {

        data = newdata;
    }

    public void setNode(Node next1node) {

        nextnode = next1node;
    }

}

我试过了:

public void push(Node n) {
    Node next = n;
    top.getNext().setNode(n);


}

结果:

Exception in thread "main" java.lang.NullPointerException
    at javaclass.stack.pStack.push(pStack.java:24)
    at javaclass.stack.StackDriver.main(StackDriver.java:17)

【问题讨论】:

  • 不清楚是什么问题。
  • @DaveNewton 我用这个问题更新了我的帖子。
  • 这没有帮助(我,反正 :) 其中一个类是否存在特定问题?是否不知道如何使用它们来解决这个特定问题(这是一个用堆栈解决的常见问题,因为它变成了几行解决方案)?
  • 旁白:请遵循 Java 编码约定。类名应以大写字母开头。 pStack 应该是 PStack
  • 如果您需要帮助实现push(),您至少必须尝试一下。我怀疑有人会为你写它。如果您完全陷入困境,请向您的教练寻求帮助,他们需要知道您正在苦苦挣扎。

标签: java stack nodes


【解决方案1】:
public void push(Node n) {
    n.setNode(top);
    top = n;
}

编辑:

顺便说一句,这是一个奇怪的堆栈实现。看起来它想成为一堆 int 原语。 peek() 和 pop() 都返回一个 int。但是 push 需要一个参数,该参数应该是堆栈本身的内部构造。它不应该将 Node 对象作为参数。它应该接受一个 int 参数并在内部用 Node 对象包装它。

另外,Node.setNode 应该命名为 Node.setNext。它与您正在做的事情更加一致。链表节点具有“下一个”成员,双链表节点具有“下一个”和“上一个”成员。节点对象的 getter 和 setter 应该为这些成员适当命名。

像这样:

PStack.java

public class PStack {
    private Node top;

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

    public int pop() {
        Node top1 = top;
        top = top.getNext();
        return top1.getData();
    }

    public void push(int data) {
        Node newtop = new Node(data);
        newtop.setNext(top);
        top = newtop;
    }

    public int peek() {
        return top.getData();
    }
}

Node.java

public class Node {
    private int data;
    private Node next;

    public Node(int data) {
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2018-10-16
    • 1970-01-01
    • 2014-01-31
    • 2019-04-26
    相关资源
    最近更新 更多