Java实现栈

作者: Renaissance_ | 来源:发表于2019-02-17 16:46 被阅读0次

在上篇文章中,我们了解了单向链表。在这篇文章中,我们了解下另一种数据结构,栈。通过单向链表我们可以实现栈

栈是一种先进后出的数据结构,最后入栈的元素,最先读取出来。就像向箱子里放书一样,最后放进去的那本书,我们可以最先从箱子里取出来。


栈结构

栈可以分为静态栈(数组实现)和动态栈(链表实现)

Java实现动态栈

通过链表实现栈,我们可以想象有个栈顶节点,当入栈的时候,原先的栈顶节点成为新的节点后继节点,新的节点成为新的栈顶节点。同理,出栈的时候,讲栈顶节点弹出,第二个节点成为新的栈顶节点。

  • 入栈
    /**
     * 入栈
     * @param value
     */
    public void push(Object value){
        Node pushedNode = new Node(value);
        pushedNode.next = top;
        top = pushedNode;

        size++;
    }
  • 出栈
    /**
     * 出栈
     */
    public Object pop() throws Exception {

        if(size == 0){
            throw new Exception("空栈异常");
        }

        Node popedNode = top;
        top = top.next;
        size --;

        return  popedNode.data;
    }
  • 返回栈顶元素
    /**
     * 返回栈顶元素
     */
    public Object peek() throws Exception {
        if(size == 0){
            throw new Exception("空栈异常");
        }

        return  top.data;
    }
  • 遍历栈
    /**
     * 遍历栈
     */
    public void traverse(){
        Node temp = top;
        while (temp != null){
            System.out.println(""+temp.data);

            temp = temp.next;

        }
    }

Java 实现静态栈

通过数组实现栈,我们可以想象栈顶索引,当入栈的时候,栈顶索引加一,赋值给栈顶。当出栈的时候,返回栈顶的值,并且栈顶索引减一。

public class ArrayStatck {

    private Object[] data;
    private int top;
    private int maxSize;

    public ArrayStatck(int maxSize) {
        this.maxSize = maxSize;
        this.top = -1;
        data = new Object[maxSize];
    }

    /**
     * 入栈
     * @param value
     */
    public void push(Object value) throws Exception {
        if(top == maxSize-1){
            throw new Exception("栈满异常");
        }

        data[++top] = value;
    }

    /**
     * 出栈
     * @throws Exception
     */
    public void pop()throws Exception{
        if(top == -1){
            throw  new Exception("栈空异常");
        }

        Object value = data[top--];
    }

    /**
     * 遍历栈
     */
    public void traverse(){
        while (top != -1){
            System.out.println(""+data[top--]);
        }
    }
}

代码路径

总结

本篇文章主要介绍了栈的动态实现和静态实现,这对于我们后续一些算法的实现有很大的帮助。

相关文章

  • Java示例教程

    Java 实现栈stackJava 实现栈stack2Java 向量Vector 反转Java 向量Vector ...

  • 基于动态数组的实现 Java实现 基于链表的栈的实现 Java实现

  • Java数据结构和算法系列———栈

    目录 1、栈的基本概念2、Java模拟简单的顺序栈实现3、增强功能版栈4、利用栈实现字符串逆序5、利用栈判断分隔符...

  • java实现栈

    栈特点:后进先出 类似于堆盘子。第一个放下的盘子一定是在底部( 在栈中的就叫push(压入)),最后一个盘子在顶部...

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • Java实现栈

    在上篇文章中,我们了解了单向链表。在这篇文章中,我们了解下另一种数据结构,栈。通过单向链表我们可以实现栈 栈 栈是...

  • 栈(java实现)

    栈是特殊的线性表,只能从表尾进行插入和删除,称为入栈和出栈。

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • 数据结构--栈

    栈栈---后进先出 在Java里有一个Vector的子类Stack()实现了栈。 Stack()方法 boolea...

  • 用两个栈实现队列,用两个队列实现堆栈

    参考:剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈 用两个栈实现队列stack1作为入...

网友评论

    本文标题:Java实现栈

    本文链接:https://www.haomeiwen.com/subject/miggeqtx.html