目录
代码实现:栈的初始化、入栈(push)、出栈(pop)、是否为空(isEmpty)等
基础知识
栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。就像一摞叠放在一起的盘子,放盘子时从下往上一个个放,取盘子时从上往下一个个取,不能从中间抽出。后进者先出,先进者后出,这就是典型的“栈”结构。
从功能上来说,数组或者链表可以替代栈,但是特定的数据结构是对特定场景的抽象,而且数组或链表暴露了太多的操作接口,操作上自由灵活但是使用时比较不可控,自然就更容易出错。
当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出出,先进后出的特性,这是我们就应首选“栈”这种数据结构。
顺序栈:用数组实现的栈。
链式栈:用链表实现的栈。
栈的基本操作
C++参数传递方式(补充知识):
- 按值传递:调用函数本身不对实参进行操作,也就是说,即使形参的值在函数中发生了变化,实参的值也完全不会受到影响,仍为调用前的值。
- 指针传递:地址传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
- 引用传递:如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。