算法导论
算法
数据结构是算法的副产品或者是结果,很多数据结构的产生是为了实现某种特定的算法。
算法设计的初衷是为了解决一些问题,对于小型问题,无论用哪种方法,实际的效果区别不大,对于大型问题,选用特定的算法,算法的目的的尽可能的减少解决问题的消耗的时间与空间
通常来说,算法设计分为以下几个步骤
- 理解和定义问题
- 控制问题的复杂度
- 分解问题为小问题
- 使用算法解决问题
运算是从左到右的,算术运算符的优先级大于逻辑运算符的优先级
*/%的优先级大于 + -
! 的优先级 大于 && 大于 ||
栈的应用 > 编写简易的计算机程序
准备两个栈,分别用于存储 运算符(运算符栈)和操作数(操作数栈)
当用户输入例如
( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
要得到该算式的结果为 101
运用栈的先进后出的性质,从左到右的遍历该算式,忽略左括号,当遇到右括号的时候,弹出一个运算符,弹出运算符所需要的操作数,运算后把结果压入操作数栈中,直到运算符栈为空,操作数栈最后剩下的数就是算式的结果
动态改变栈or队列or背包or其他数据结构(以数组为基础)的一种方法,每次在添加(push)一个新元素的时候,检查数组size和当前下标 i 的关系,保证 i + 1 < size / 2 ,如果不满足,那么把数组的大小扩大一倍,并且把原来的数组元素拷贝到新的数组里面去
同理,每次获取元素(pop)的时候,检查 i - 1 > size / 4,如果不满足,就把数组的大小缩小一倍,然后把原来的数组元素拷贝到新的数组中去。
这种处理方法可以保证对于数组空间的利用程度始终保持在50%左右,方便数组进行push和pop
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment