数据结构--栈的应用

时间:2014-04-27 22:37:30   收藏:0   阅读:404

了解了数据结构--栈(基础知识)


下面简单整理了下有关栈的几个应用。

递归

把一个直接调用自己,或间接调用自己的函数,成为递归函数。

这里有一个比较好的例子,看下面一组数:

mamicode.com,码迷

你是否发现了这组数的规律呢,没错你会发现从第三个数开始,每个数都是前面两个数的之合。

现在我们通过程序来实现这个算法,如下java代码:

public class Test {
	private static int dieDai(int i) {
		if (i < 2) {
			return i == 0 ? 0 : 1;
		}
		return dieDai(i - 1) + dieDai(i - 2);
	}

	public static void main(String[] args) {
		for (int i = 0; i < 12; i++) {
			System.out.println(dieDai(i));
		}
	}
}

注意第8行调用自己本身的方法,这就是所谓的迭代。


写递归程序注意:

写递归程序最怕的就是程序陷入永无止境的递归调用,所以我们这里至少要有一个限制条件,在满足某个条件时,要返回一个结果,而不是继续调用自己本身。


其实上面的这段事例代码用迭代也能实现,你可以尝试写一下,你会发现通过迭代写出的代码,看起来特别冗余,而通过递归写出的则看起来比较清晰、简单。


迭代和递归的区别:

迭代使用的是循环结构,递归使用的选择结构。

递归能够让人觉得程序更清晰、简洁、容易让人理解,但是大量的递归调用会建立函数副本,会消耗大量的时间和内存,迭代则不需要反复的调用函数和占用额外的内存。


想见下面图文描述,递归与栈的关系。简单总结就是递归的执行顺序符合栈的存储结构。

mamicode.com,码迷


四则元算表达式求值

我们看这么一算加减法计算“9+(3-1)*3+10/2” = "931-3*+10/2",你看到的后面那一串乱乱的是后缀表示法定义(逆波兰表示法),这个是给电脑的,你看不懂,但是电脑能看懂,相反他看不懂咱们能看懂的。

后缀表示法具体计算方式,我直接把树上的截图附上,很直观明了

mamicode.com,码迷


mamicode.com,码迷

mamicode.com,码迷

mamicode.com,码迷



评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!