算法

数据结构是算法的副产品或者是结果,很多数据结构的产生是为了实现某种特定的算法。

算法设计的初衷是为了解决一些问题,对于小型问题,无论用哪种方法,实际的效果区别不大,对于大型问题,选用特定的算法,算法的目的的尽可能的减少解决问题的消耗的时间与空间

通常来说,算法设计分为以下几个步骤

  1. 理解和定义问题
  2. 控制问题的复杂度
  3. 分解问题为小问题
  4. 使用算法解决问题

运算是从左到右的,算术运算符的优先级大于逻辑运算符的优先级

*/%的优先级大于 + -

! 的优先级 大于 && 大于 ||

栈的应用 > 编写简易的计算机程序

准备两个栈,分别用于存储 运算符(运算符栈)和操作数(操作数栈)

当用户输入例如

( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )

要得到该算式的结果为 101

运用栈的先进后出的性质,从左到右的遍历该算式,忽略左括号,当遇到右括号的时候,弹出一个运算符,弹出运算符所需要的操作数,运算后把结果压入操作数栈中,直到运算符栈为空,操作数栈最后剩下的数就是算式的结果


动态改变栈or队列or背包or其他数据结构(以数组为基础)的一种方法,每次在添加(push)一个新元素的时候,检查数组size和当前下标 i 的关系,保证 i + 1 < size / 2 ,如果不满足,那么把数组的大小扩大一倍,并且把原来的数组元素拷贝到新的数组里面去

同理,每次获取元素(pop)的时候,检查 i - 1 > size / 4,如果不满足,就把数组的大小缩小一倍,然后把原来的数组元素拷贝到新的数组中去。

这种处理方法可以保证对于数组空间的利用程度始终保持在50%左右,方便数组进行push和pop