算法学习笔记--背包、队列、栈(1)

来源:互联网 发布:linux关闭oracle服务 编辑:程序博客网 时间:2024/06/06 01:16

原文链接:http://blog.csdn.net/u012925804/article/details/69661165

1. 引言


背包、队列和栈其实就是一组对象的集合。他们的不同之处就在于删除、访问和顺序不同。在java中使用泛型和迭代可以方便的使用这些集合。

2. 背包


背包就相当于生活中的背包,目的就是收集元素并迭代便利所有收集到的元素,它没有顺序和删除。平时在一些与计算顺序和结果无关的场景下可以使用,在java中使用foreach便利所有元素。

3.队列


先进先出,就像生活中的排对,这是一种很公平的方式,这种规则就是优先服务于先进入队列中的人。

4. 下压栈


后进先出,就像放在桌子上的邮件,人们总是先去拿最上面的一个,在电子邮件中也是这样,后面来的总是放到最上面,我们也是从上面开始阅读。

有一个平时生活中用到的例子,在我们浏览网页的时候,我们一直点一个网站的链接,那么这个链接就会压入栈中,当我们按回退的时候,我们打开的总是刚刚打开过的页面,这就是栈的使用。在java中foreach遍历迭代的栈中的元素时,访问的顺序正好和他被压入栈的顺序相反。

4.1应用



算术表达式求解,算术表达式求解的时候一共会有两个栈,流程如下:
从左向右压栈。
1. 遇到操作数的时候将操作数压入操作数栈
2. 遇到操作符的时候将运算符压入运算符栈
3. 忽略左括号;
4. 在遇到右括号时,弹出一个运算符,弹出所需要数量的操作数,把计算结果压入操作数栈,然后重复这几个步骤,直到最后一个右括号,把最终结果压入操作数栈。

5. 引用


1. 《算法》--Robert Sedgewick

0 0
原创粉丝点击