龙空技术网

数据结构:栈—如何实现浏览器的前进和后退功能

日拱一卒程序猿 57

前言:

此刻小伙伴们对“网页后退一步的快捷键是哪个”都比较注重,小伙伴们都想要学习一些“网页后退一步的快捷键是哪个”的相关内容。那么小编在网摘上汇集了一些关于“网页后退一步的快捷键是哪个””的相关资讯,希望咱们能喜欢,兄弟们快快来了解一下吧!

一、定义

栈(stack)是一种线性数据结构,

栈中的元素只能先入后出(First In Last Out,简称FILO)。

最早进入的元素存放的位置叫作栈底(bottom),

最后进入的元素存放的位置叫作栈顶 (top),

出栈从栈顶出。

二、存储原理

栈既可以用数组来实现,也可以用链表来实现。

数组实现的栈也叫顺序栈或静态栈。栈底的数组下标是0。

链表实现的栈也叫做链式栈或动态栈。栈底是链表的尾部,栈顶是链表的头部。

三、操作

1、入栈

入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶

//1、数组栈实现//数组private int[] nums;//栈元素数量private int count;public ArrayStack(int n){    this.nums = new int[n];    count = 0;}public boolean push(int n){    if(count >= nums.length) return false;    nums[count] = n;    count++;    return true;}//2、链表栈实现    //链表    Node head;    //栈元素数量		int size;    //初始化    public LinedStack(){        head = null;        size = 0;    }    //入栈(head头部是栈顶)    public void push(Node node){        if(size == 0){            head = node;        }else {          	//新入栈的元素要存入栈顶即链表头部,因此新元素的下个指针指向当前头部            node.next = head;            //头部赋值为新入栈的元素            head = node;        }       size++;    }

2、出栈

出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素的前一个元素将会成为新的栈顶。

//1、数组栈实现public int pop(){    if(count == 0) return 0;    int n = nums[count-1];    count--;    return n;}//2、链表栈实现public Node pop(){        if(size > 0){            Node  oldHead = head;            head = head.next;            size--;            return oldHead;        }else {            return null;        }  }
四、时间复杂度

入栈和出栈的时间复杂度都是O(1)

支持动态扩容的顺序栈 ,当数组空间不够时,我们就重新申请一块更大的内存,将原来数组中数据统统拷贝过去。这样就实现了 一个支持动态扩容的数组,通过前面学过的知识,可以得知支持动态扩容的顺序栈的入栈时间复杂度是O(n)

五、应用

1、函数调用

每进入一个函数,就会将临时变量作为一个栈入栈,当被调用函数执行完成,返回之后,将这个函 数对应的栈帧出栈

2、浏览器的后退功能

我们使用两个栈,X 和 Y,我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。当我们点击前进按钮时,我们依次从栈 Y 中取出数据, 放入栈 X 中。当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。当栈 Y 中没有数据,那就说明没有页面可以点击前进按钮浏览了

标签: #网页后退一步的快捷键是哪个