【问题标题】:java - Stack and queue confusionjava - 堆栈和队列混淆
【发布时间】:2015-09-19 01:34:36
【问题描述】:

这两种处理堆栈和队列的方式有什么区别?两者都叫什么?

第一种方式:

import java.util.Arrays;

public class StackMethods {
   private int top;
   int size;
   int[] stack ;

    public StackMethods(int arraySize){
       size=arraySize;
       stack= new int[size];
       top=-1;
     }

    public void push(int value){
        if(top==size-1){
            System.out.println("Stack is full, can't push a value");
        }
        else{
            top=top+1;
            stack[top]=value;
           }
    }

    public void pop(){
        if(!isEmpty())
            top=top-1;
        else{
            System.out.println("Can't pop...stack is empty");
            }
    }

    public boolean isEmpty(){
        return top==-1;
    }

    public void display(){
        for(int i=0;i<=top;i++){
            System.out.print(stack[i]+ " ");
        }
        System.out.println();
   }
}

第二种方式:

public class StackReviseDemo {

    public static void main(String[] args) {
        StackMethods newStack = new StackMethods(5);
        newStack.push(10);
        newStack.push(1);
        newStack.push(50);
        newStack.push(20);
        newStack.push(90);

        newStack.display();
        newStack.pop();
        newStack.pop();
        newStack.pop();
        newStack.pop();
        newStack.display();
    }
}

它们也正确吗?想学好这些,但是网上对这些的解释很模糊..

【问题讨论】:

    标签: java


    【解决方案1】:

    我不是 100% 确定你的意思有两种方法。 查看您的第一个代码 sn-p,我们可以看到您正在声明类 StackMethods。在第二个中,您将实例化 StackMethods 类的对象。 因此,您在第二个代码 sn-p 的主要方法中所做的就是创建一个对象,该对象调用您在上面的类中声明的方法 push()、pop() 和 display()。您实际上并没有实现两个数据结构,而只是一个基本堆栈。

    好消息是,您已经掌握了堆栈的概念,因为您对“StackMethods”类的实现总体上是正确的。

    关于队列和堆栈之间的区别是什么,this question 可能会对您有所帮助:

    如果这没有回答您的问题并且我只是误解了它,请发表评论并告诉我,以便我可以尝试更好地帮助您。

    【讨论】:

    • 这个问题被格式错误搞砸了,我试图理解的是数组中的堆栈和像这样开始的堆栈之间的区别,似乎只是在没有创建大量方法的情况下工作推送和弹出... Stack s = new Stack(); // 后面是方法
    • 啊好吧!因此,当您调用 Stack 之类的内容时,您使用的是 Java 集合框架。所以 Oracle 的一些人已经为你实现了 Stack。该实现中的堆栈很可能基于列表,因此它的大小不受限制,因为它使用指针结构。它也是通用的。因此,您基本上可以将它用于任何可能的基类,而不仅仅是像您的实现中那样的整数。它支持比您的堆栈更多的操作。这是 Java 文档的链接:docs.oracle.com/javase/7/docs/api/java/util/Stack.html
    • 现在这不是一个容易回答的问题。一般来说,在大多数情况下,您将能够使用 Java 集合框架中的堆栈。但是,您当然应该知道堆栈和队列的功能,并且自己实现它们是最好的学习方式。所以我想说,如果你想了解数据结构的基本原理,那就有必要了。如果您不关心这一点,只想让程序快速运行,那么只使用 Collections Framework 的实现可能是可行的方法。
    • 感谢本杰明,这帮助很大
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2011-12-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多