弹匣子栈与队列

为什么叫stack栈别名是——弹匣子呢?last in first out后进先出
栈的形象图
定义术语:栈(stack)是仅限于在表尾进行删除和插入的线性表
其中允许进行插入和删除操作的表尾——栈顶top
另一端——栈底bottom

1.1 stack栈的应用-递归

经典回顾:斐波那切数列(Fibonacci)
兔子繁殖问题:

所经过的月数12345678910
兔子对数11235813213455

有一个明显的规律:前面相邻两项之和 构成后面一项,如果用数学公式表示为:
F ( n ) = { 0 ,   n = 0 1 ,   n = 1 F ( n − 1 ) + F ( n − 2 ) ,   n > 1 \textcolor{aqua}{F(n)=\begin{cases} 0, &\ n=0 \\ 1, &\ n=1 \\ F(n-1)+F(n-2), &\ n>1 \end{cases}} F(n)=0,1,F(n1)+F(n2), n=0 n=1 n>1

// Java实现如下
private static int myFbi(int i){
    return (i<2) ? i:myFbi(i-1)+myFbi(i-2);
}
public static void main(String[] args) {
     List<String> list = new ArrayList<>();
      for (int i = 0; i < 10; i++) {
          list.add(String.valueOf(myFbi(i)));
      }
      System.out.println(list.stream().collect(Collectors.joining("->"))); 
}
// print result
0->1->1->2->3->5->8->13->21->34

总结:递归能够使代码简洁,看起来很装B,但是大量的递归会建立大量的函数副本,
从而消耗大量的时间和内存;迭代和递归的区别:
迭代是循环结构,不需要建立函数副本;递归是顺序选择结构;应该视情况选择。

那说到现在 递归和栈有啥联系啊?(手动黑人问号)
其实这个就深入编译器了,在递归回退过程当中,要执行包括回复前行过程当中存储起来的数据,
并且在后面又以存储的逆序恢复这些数据,这个跟栈的性质相符。

1.2 队列queue

Queue队列: 只允许在一端进行插入,另一端进行删除操作的线性表FIFO(First In First Out)
队尾:允许插入的一端
队头:允许删除的一端

比如我们电脑上的记事本就是队列的典型应用


下课!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值