栈:如何实现浏览器的前进和后退功能

受限制的线性表

先进后出

实现一个栈

数组实现叫顺序栈

public class ArrayStack {
    private String[] items;//存储数据的数组
    private int count;//栈中的元素
    private int n;//栈的大小

    public ArrayStack(int n){
        this.items = new String[n];
        this.n = n;
        this.count = 0;
    }

    //入栈操作
    public boolean push(String item){
        //如果栈满了返回false,入栈失败
        if (count == n){
            return false;
        }
        //将item放到下标为count的位置,count +1
        items[count] = item;
        //栈中元素+1
        count++;
        return true;
    }

    //出栈操作
    public String pop(){
        //如果栈为空返回null
        if (count == 0){
            return null;
        }
        //返回下标第n-1个元素
        String temp = items[count - 1];
        //元素总数减1
        count--;
        return temp;
    }
}

支持动态扩容的顺序栈

分析时间复杂度
对于出栈来说时间复杂度还是O(1)
对于入栈来说如果栈空间足够时间复杂度为O(1),如果栈空间不够用需要扩容那么时间复杂度为O(n)

链表实现叫链式栈

性能分析

不论是顺序栈还是链栈时间复杂度和空间复杂度都是O(1)

现实应用

函数调用栈

栈帧

表达式求值

两个栈实现

括号是否匹配

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容