美文网首页
栈与递归

栈与递归

作者: 仲达_dc6c | 来源:发表于2018-12-03 09:56 被阅读0次

概念:

限定只能在表尾部插入和删除的线性表,允许插入和删除的一端称作栈顶top,另一端称作栈底bottom,没有元素的栈,是空栈。也是先进后出的线性表。

实现方式:

顺序实现,通过数组来实现。

java 中JDK有一个Stack.java 就是栈,继承了Vector,Vector继承了List,看来Stack也是一个链表,只不过控制了插入和删除只能在一端而已。

java中Vector和ArrayList的区别:

Vector是JDK1.0就有的,增加了很多多线程的控制,是线程安全的,在JDK1.0版本考虑的非常全面,但是在实际的应用中发现其实并不用考虑线程安全的事情,所以在JDK2.0之后就将Vector改成了ArrayList,去掉了线程安全控制,就是去掉了Synchronize关键字,性能比Vector要好。

链表实现:

通过单链表实现即可,控制push和pop都是通过head节点来做。

逆波兰表达式:

1.a>>1

2.a/2

上面的两个表达式中语句1的执行效率高,为什么?

语句1只需要1条指令。

语句2需要至少六条指令:

1)将中缀表达书转化成后缀表达式,需要至少5条指令。

a打印,/入栈,2打印,/打印,再计算a/2.

递归:

函数自己调用自己的编程技巧。

作为一种常用的编程算法,直接或者间接调用自己。

一般来说,递归具有边界条件,前进段和返回段。不满足边界条件,递归前进,满足边界条件,递归返回。

调用自己一次的情况:

常见例子,计算非负数n的阶层。调用自己前是正循环,调用自己后是反循环(调用自己后的代码是压栈处理的)

调用自己两次的情况:

汉若塔实现步骤

相关文章

网友评论

      本文标题:栈与递归

      本文链接:https://www.haomeiwen.com/subject/xpmecqtx.html