📅  最后修改于: 2023-12-03 14:59:51.269000             🧑  作者: Mango
堆栈(Stack)是一种特殊的数据结构,它有后进先出(Last In First Out,LIFO)的性质。C++中提供了一个标准库类<stack>
,可以简单地实现堆栈操作。
使用<stack>
库初始化一个堆栈非常容易,只需声明一个stack
类型变量即可:
#include <stack>
using namespace std;
stack<int> s; // 声明一个整数类型的堆栈
将一个元素压入堆栈中,即向堆栈顶部插入一个元素。
s.push(1); // 将整数1压入堆栈中
从堆栈中弹出一个元素,即将堆栈顶部元素删除。
s.pop(); // 将堆栈顶部元素删除
访问堆栈顶部元素。
int top_element = s.top(); // 获取堆栈顶部元素赋值给整型变量top_element
判断堆栈是否为空。
bool is_empty = s.empty(); // 如果堆栈为空,则返回true,否则返回false
获取堆栈中元素的数量。
int stack_size = s.size(); // 获取堆栈中元素的数量
堆栈可以应用在许多场合,例如计算表达式、程序调用栈等。以下是一个简单的在C++中使用堆栈计算中缀表达式的例子:
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
string expression = "3+4*2-1";
int len = expression.length();
int i = 0;
while(i < len)
{
if(expression[i] >= '0' && expression[i] <= '9')
{
int num = 0;
while(i < len && expression[i] >= '0' && expression[i] <= '9')
{
num = num * 10 + expression[i] - '0';
i++;
}
s.push(num);
}
else if(expression[i] == '*' || expression[i] == '/')
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
if(expression[i] == '*')
{
s.push(b * a);
}
else
{
s.push(b / a);
}
i++;
}
else if(expression[i] == '+' || expression[i] == '-')
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
if(expression[i] == '+')
{
s.push(b + a);
}
else
{
s.push(b - a);
}
i++;
}
}
cout << s.top() << endl;
return 0;
}
以上例子实现了对中缀表达式的计算,使用堆栈可以很方便地记录中间计算信息。