![【C++复习】栈-上篇](https://pic.imgdb.cn/item/66d072add9c307b7e9354669.jpg)
Table of Contents
大家好,这里是不会写开场白的Yinph。
我们直接进入正题,开始进行C++的复习——栈:
一、什么是栈? Link to 一、什么是栈?
栈,又名堆栈(stack)。作为一种特殊的数据结构,它是一种只能在一端进行插入和删除操作的特殊线性表。
想象一下,我们用一个大箱子来堆积物品,先堆进来的压在最底下,随后一件件物品往上堆。而取走时,也只能从最上面开始拿。栈也是如此,它就是一种类似箱子堆积物品的数据结构,先放最晚拿,后放最早拿。
箱子(栈)的最上面我们称之为栈顶(top),允许插入(push)和删除(pop),删完了,也就是栈底就是栈顶的时候,就叫空栈。而最下面称之为栈底(Bottom),什么也不能干。
一个简单的口诀:“先进后出,后进先出。”
因为栈空间是有限的,如果栈已满,在进行入栈操作时,就会产生“上溢”。上溢将使程序无法继续运行,我们要想办法避免。而对于出栈操作中的“下溢”,程序中仅会给出一个标志信息,我们无需过度在意。
二、栈的常用操作 Link to 二、栈的常用操作
栈的常用操作有:入栈(push)、出栈(pop)、取栈顶元素(top)、判断栈是否为空(isEmpty)、清空栈(clear)获取栈内元素个数(size)。
(1)数组模拟栈 Link to (1)数组模拟栈
由于计算机中没有栈这种存储结构,我们可以用顺序存储结构——数组来模拟栈。具体如下:
首先,我们可以定义一个全局数组st,作为栈的存储结构,并将栈顶指针TOP初始化为0。接下来,我们可以定义一些函数,用于模拟栈的操作。
入栈:将元素压入栈顶,栈顶指针top加1,将元素存储在top指向的位置。
出栈:将栈顶元素弹出,栈顶指针top减1。
取栈顶元素:获取栈顶指针top指向的元素。
判断栈是否为空:判断栈顶指针top是否为-1。
清空栈:将栈顶指针top置为-1。
获取栈内元素个数:获取栈顶指针top的值。
接下来,我们用代码来解决一些问题:
我们可以尝试将整数1、2、3、4、5入栈,接着输出此时的栈顶,最后输出栈内所有的元素。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
#include <iostream>
using namespace std;
int st[n+1]; // n为元素个数,创建数组时长度比元素个数多1
int TOP = 0; // 从数组下标为1的位置开始存放数据,栈空时,TOP=0
void push(int x)//入栈
{
TOP++;
st[TOP] = x;
}
void pop( ) //出栈
{
TOP--;
}
int top( ) // 获取栈顶元素
{
return st[TOP];
}
bool isempty( ) //判断栈是否为空
{
return TOP == 0;
}
void clear( ) //清空
{
TOP = 0;
}
int size( ) // 获取栈内元素个数
{
return TOP;
}
int main()
{
for (int i = 1; i <= 5; i++)
{
push(i); // 入栈
}
cout << "当前栈顶元素为:" << top() << endl;
cout << "出栈顺序为:" << size() << endl;
while (!isempty()) // 判断栈是否为空
{
cout << top() << " ";
pop(); // 出栈
}
return 0;
}
(2)使用标准模板库(STL) Link to (2)使用标准模板库(STL)
标准模板库(STL)
,是一些常用数据结构(栈、队列等)和算法(sort、swap等)的模板的集合。有了STL,不必再写太多的标准数据结构和算法,并且性能也会更高。
除了用顺序存储结构——数组模拟栈之外,STL也提供了栈的模板类,可以直接使用,非常方便。
头文件:#include <stack>
定义:stack<数据类型> 栈名;
例如:stack<int> s;
栈(stack)常用函数:
push(x)
:将x入栈
pop()
:弹出栈顶元素
top()
:获得栈顶元素
empty()
:检测栈是否为空,返回true为空,false为非空。常与if语句连用,例如if (s.empty())
size()
:获取栈中元素个数(可理解为总长度)
以一张图即可理解:
同样的问题,我们用STL来解决一下:
1234567891011121314151617181920
#include <iostream>
#include <stack> // 头文件
using namespace std;
int main()
{
stack<int> s; // 定义一个栈
for (int i = 1; i <= 5; i++)
{
s.push(i); // 入栈
}
cout << "栈顶元素为:" << s.top() << endl;
cout << "栈内元素个数为:" << s.size() << endl;
while (!s.empty()) // 判断栈是否为空
{
cout << s.top() << " "; // 输出栈顶元素
s.pop(); // 出栈
}
return 0;
}
三、总结一下 Link to 三、总结一下
栈是一种先进后出的数据结构,它只能在一端进行插入和删除操作。在C++中,我们可以使用数组
或STL中的stack模板类
来模拟栈的操作。栈的常用操作包括入栈、出栈、取栈顶元素、判断栈是否为空、清空栈和获取栈内元素个数。
希望这篇文章能帮助你们更好地理解栈,如果你有任何问题,欢迎在评论区留言。
OK,以上就是今天要讲的内容。大家喜欢就点个赞吧,我会尽快更新!ヾ(•ω•`)o!