自己写Stack 实现栈结构

本文介绍了如何在Java中使用数组和LinkedList两种方式实现栈结构,详细讲解了栈的应用,并探讨了局部变量栈在递归引用中的作用,特别提到了尾递归的概念。

前言:

栈的应用:

1. 可计算数学后缀表达式
2. 把正常中缀表达式转换为后缀表达式
3. 计算检测编译程序{}等括号符号是否正确,是否存在语法错误
4. 递归中需要实用栈存储方法信息,计算机中函数调用是通过栈(stack)这种数据结构实现,在递归中调用一层函数,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。

正文:

  1. java中使用数组实现栈

    package com.anteoy.dataStructuresAndAlgorithm.javav2;
    
        import java.util.ArrayList;
    
        /**
         * Created by zhoudazhuang on 17-3-1.
         * Description:
         */
        public class ListGo {
    
            public static void main(String[] args) {
                ArrayList arrayList = new ArrayList();
                arrayList.add(1);
                arrayList.add(2);
                arrayList.add(3);
    
                //进栈
                arrayList.add(arrayList.size(),2);
    
                //出栈
                arrayList.remove(arrayList.size()-1);
    
                System.out.println(arrayList);
            }
        }
  2. java中LinkedList实现栈

package com.anteoy.dataStructuresAndAlgorithm.javav2.my;

    import java.util.LinkedList;

    /**
    * Created by zhoudazhuang on 17-3-2.
    * Description:
    */
    public class StackByLinkedList {

    public static void main(String[] args) {
        useLinkedListAsLIFO();
    }
    /**
     * 将LinkedList当作 LIFO(后进先出)的堆栈
     */
    private static void useLinkedListAsLIFO() {
        // 新建一个LinkedList
        LinkedList stack = new LinkedList();

        // 将1,2,3,4添加到堆栈中
        stack.push("1");
        stack.push("2");
        stack.push("3");
        stack.push("4");
        // 打印“栈”
        System.out.println(stack);

        // 删除“栈顶元素”
        System.out.println("stack.pop():"+stack.pop());

        // 取出“栈顶元素”
        System.out.println("stack.peek():"+stack.peek());

        // 打印“栈”
        System.out.println("stack:"+stack);
    }
    }

后记:

  1. 尾递归和递归 局部变量栈在递归引用中,不能算尾递归
  2. 参考文献:数据结构与算法分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值