王争据结构笔记(08)
1、栈结构:后进者显出,先进者后出。栈是一种操作受限的线性表,只允许在一端插入和删除数据
2、栈主要包含的操作:入栈和出栈。
3、用数组实现的栈叫做顺序栈,用链表实现的栈叫做链式栈。
4、无论是链式栈还是顺序栈,入栈和出栈空间复杂度都是O(1),时间复杂度也是O(1)。
动态扩容的顺序栈出栈时间复杂度为O(1)。当栈中存在空闲空间的时候,入栈操作的时间复杂度为O(1)。当空间不够时,需要重新申请内存和数据搬移,所以时间复杂度为O(n)。入栈操作的均摊时间复杂度为O(1)。
5、栈的实际医用:
A) 栈在函数调用中的应用:内存被组织成栈的结构,存储函数调用时的临时变量。每进入一个函数就会将临时变量作为一个栈帧入栈,当被调用函数直线完成,返回后,将这个函数对应的栈帧出栈。
B)栈在表达式求值中的应用:保存操作数的栈和保存运算符的栈。
C)栈在括号匹配中的应用:从左到右扫描字符串,扫描到左括号的时候,将其压栈,扫描到右括号的时候,从栈顶将左括号取出。