栈
by.Qin3Yu
下面的文章将通过使用栈完成辗转相除法转换十进制数为二四八进制来简要描述和解释栈。
特别声明:本文仅通过简单的例子帮助新手快速了解栈,包括且不限于完成家庭作业等水平,内容讲究简单明了,我妈看了都能学会!
如果您是进阶级别,请参阅其他大佬的详细教学。
文中所有代码默认已使用std命名空间
ps.简要介绍辗转相除法
-
辗转相除法,也称为欧几里德算法,是一种用于求解两个整数的最大公约数的算法。它也可以应用在将十进制数转换为其他进制数的过程中。
-
以将十进制数转化为二进制数为例,辗转相除法的原理如下:
- 将给定的十进制数除以2,获得商和余数。
- 将商作为新的被除数,再次除以2,并再次计算商和余数。
- 重复上述步骤,直到商为0。
- 最后,逆序排列获得的余数,即为十进制数转化的二进制数。
- 同样,可以使用辗转相除法将十进制数转化为4进制和8进制数。
本文只介绍栈,不会在下文继续介绍辗转相除法,若需要了解更多信息,请参阅其他大佬的详细教学
什么是栈?
- 栈是一种数据结构,你可以将它看成是一个与数组一样存储数据的容器,与其他数据类型不同的是,它遵循“后进先出”的原则,即最后进入栈的元素会先被取出。
- 就和糖罐一样,最后放进去的糖永远在糖堆的最上面,所以将会最先被从糖罐中取出来。
优势:
- 栈的基本操作非常简单,只需要考虑元素的入栈和出栈即可,因此实现起来相对容易。
- 栈的插入和删除操作(即入栈和出栈)都可以在常数时间内完成,无论栈的规模有多大,这使得栈在特定场景下非常高效。
- 由于栈采用后进先出的原则,栈上的数据可以自动释放,因此不会出现内存泄漏的问题。
缺点:
- 栈的容量是有限的,一旦达到最大容量,就无法再添加新的元素,这可能会导致栈上溢(Stack Overflow)的问题。
- 栈中的元素只能按照先入后出的顺序访问,没有提供随机访问的能力,因此无法直接获取栈中间的元素。
- 此外,使用栈还要导入以下头文件:
#include <stack>
声明一个栈( stack )
- 我们可以直接在函数中使用 stack<T> name 声明一个栈,其中T表示栈中