qt如何实现backspace的功能_如何使用堆栈实现浏览器的前进后退功能?

今天我们来聊一聊堆栈,要注意,这里说的堆栈中的堆和数据结构中的堆没有任何关系,通常我们所说的栈其实就是堆栈,只是叫法不一样。为了统一,下面的内容中我们统一叫

上一篇中我们讲队列是一种先进先出(FIFO)的数据结构,栈和队列恰好相反,是一种后进先出(LIFO)的数据结构,往栈里添加一个数据叫入栈,从栈里取出一个数据叫出栈。最先进入到栈里的数据总是最后出栈。下图描述了一个栈的入栈和出栈的过程。

562990880b746cd9d4fc1fa99418a355.png

其实,我们在平时开发中,时时刻刻都在使用栈,我们的函数调用就是通过栈这种数据结构来管理的。很多编程语言内存区域划分都有栈空间,这个栈空间就是特指在函数内部声明使用的内存空间。例如,我们有两个函数f1和f2,在函数f1里调用函数f2,当f2在执行的时候f1会被压入栈中,当f2执行完成之后f1出栈继续执行调用f2之后的代码,如下图:

49b32b201eb8cf2679a331b0ac46e926.png

在正式实现栈之前,我想在这里介绍一下大名鼎鼎的递归算法。毫不夸张的说递归是计算机的灵魂之一,掌握了递归思想才算是真正理解了计算机原理,由于递归的函数调用和栈息息相关,这里我们先介绍一下递归算法,递归的核心思想就是将一个复杂的问题拆分成可重复执行的简单步骤。

这里我们先来看一道谷歌面试题:

两个人玩游戏,第一个人先从1和2中挑一个数字,第二个人在第一个人的基础上选择加1或者加2,然后轮到第一个人在第二个人的基础上选择加1还是加2,如此反复,最终能得到20的人赢得游戏。问,有什么策略一定能赢?

从常识来看,这个问题很难一眼找到答案,人的思维更习惯递推的方式,比如我们要算n的阶乘,我们习惯从1开始 n!=1*2*3...*n,我们习惯从小到大向后依次计算,这就是递推思维。而计算机的递归思想是从后往前

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值