本课程将带领大家体会栈这种数据结构的美妙,并详细讲解从单一数据类型栈到栈模板的升华过程,最后安排数制转换及括号匹配的例子,使学员可以通过例子对栈的知识有更深刻的理解和认识,所有知识均通过编码实践的方式讲解到操作层面,力求即学即会。
1 栈的工作原理
后进先出(LIFO, last in first out )
2 单一数据类型栈
1 |
|
3 栈模版
说明: 将普通栈改为类模版栈,使其可以适用于任何数据类型。
- 类模版定义和实现需要写在同一个文件中,因为有些编译器不支持分开写。
- 需要考虑栈元素为复杂的自定义类型的情况,比如是否需要定义拷贝构造函数等。
- 使用该栈模版的类型需要重载
<<
运算符。
MyStack.h
1 |
|
main.cpp
1 |
|
4 栈应用
4.1 进制转换
描述: 输入任意的十进制正整数 N , 分别输出该整数 N 的二进制、八进制、十六进制的数。
公式: N = (N div d) * d + N mod d
(div表示整除, mod 表示求余)
1348(十进制)= 2504(八进制)= 544(十六进制) = 10101000100(二进制)
短除法计算过程: 以 1348 为例,分别转化为 8 进制和 16 进制
1 |
|
4.2 括号匹配
描述:任意输入一组括号,可以判断括号是否匹配。
示例:
- [()] 正确
- [()()] 正确
- [()[()]] 正确
- [[()] 错误
- [[()]]] 错误
1 |
|