持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
前言
专项练习一周的栈与队列后今天来做一下总结,今天主要总结栈部分。
栈的定义
栈是限定仅在表尾进行插入或删除操作的线性表。表尾称为栈顶top;表头称为栈底bottom。
特点
栈具有后进先出或先入后出的特点,这种特点可以帮我们很好的解决一些问题。
栈的表示与实现
栈的顺序存储结构(顺序栈)
顺序栈是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素
栈中维护两个指针,一个(栈底指针base)始终指向栈底,如果base=NULL表示栈结构不存在;一个(栈顶指针top)初值指向栈底,如果top=base表示栈空。
入栈PUSH(s,x):s[top++]=x; 出栈POP(s,x):x=s[--top];
栈的链式结构
就像线性表的链式结构,栈的链式结构也具有指针域和数据域,以头指针为栈顶,在头指针处插入或删除。
经典问题
经过这几天的刷题,来总结一些栈的经典问题:
括号匹配问题
在解决括号匹配问题的时候要分析好不匹配的情况,其实有很多类型的题,开始最好都想清除情况,免得最后示例通不过一点点改(痛苦的回忆)
字符串去重
字符串去重是一种经典的题,有很多解决方法,也有很多API,但是这里说的是1047. 删除字符串中的所有相邻重复项,这道题用栈会有神奇的效果~
逆波兰表达式
逆波兰表达式中很重要一部分是对后缀表达式的理解,大家可以看我之前的文章——leetcode150. 逆波兰表达式求值