码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--栈的应用

时间:2014-04-27 22:37:30      阅读:404      评论:0      收藏:0      [点我收藏+]

标签:迭代   递归      

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


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

递归

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

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

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,码迷



数据结构--栈的应用

标签:迭代   递归      

原文地址:http://blog.csdn.net/gaopeng0071/article/details/24599943

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!