小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、什么是栈
- 只允许在一端插入和删除的线性表
- 允许插入和删除的一端称为栈顶 (top),另一端称 为栈底(base)
- 特点:后进先出 (LIFO, Last In, First Out)
二、顺序栈
2.1 顺序栈的顺序存储表示
1 | cpp复制代码#define STACK_INIT_SIZE 100 |
2.2 顺序栈的初始化
1 | cpp复制代码Status InitStack (SqStack &S) |
2.3 返回顺序栈顶元素
1 | cpp复制代码Status GetTop (SqStack S, SElemType &e) { |
2.4 压栈
1 | cpp复制代码Status Push (SqStack &S, SElemType e) { |
2.5 出栈
1 | cpp复制代码Status Pop (SqStack &S, SElemType &e) { |
三、链栈
1 | cpp复制代码typedef struct LinkNode |
四、栈的应用
4.1 数制转换
1 | ini复制代码算法基于原理: N = (N div d)×d + N mod d |
例如:(1348)10 = (2504)8 ,其运算过程如下:
1 | cpp复制代码void conversion () { |
4.2 括号匹配的检验
1 | 复制代码假设在表达式中 |
算法思想:
- 凡出现左括弧,则进栈;
- 凡出现右括弧,首先检查栈是否空?
- 若栈空,则表明该“右括弧”多余,
- 否则和栈顶元素比较,
- 若相匹配,则“左括弧出栈” ,
- 否则表明不匹配。
- 表达式检验结束时,
- 若栈空,则表明表达式中匹配正确,
- 否则表明“左括弧”有余。
1 | cpp复制代码public boolean isValid(String s) { |
本文转载自: 掘金