📜  c++中的堆栈(1)

📅  最后修改于: 2023-12-03 14:59:51.269000             🧑  作者: Mango

C++中的堆栈

堆栈(Stack)是一种特殊的数据结构,它有后进先出(Last In First Out,LIFO)的性质。C++中提供了一个标准库类<stack>,可以简单地实现堆栈操作。

建立堆栈

使用<stack>库初始化一个堆栈非常容易,只需声明一个stack类型变量即可:

#include <stack>
using namespace std;

stack<int> s; // 声明一个整数类型的堆栈
堆栈的基本操作
push()函数

将一个元素压入堆栈中,即向堆栈顶部插入一个元素。

s.push(1); // 将整数1压入堆栈中
pop()函数

从堆栈中弹出一个元素,即将堆栈顶部元素删除。

s.pop(); // 将堆栈顶部元素删除
top()函数

访问堆栈顶部元素。

int top_element = s.top(); // 获取堆栈顶部元素赋值给整型变量top_element
empty()函数

判断堆栈是否为空。

bool is_empty = s.empty(); // 如果堆栈为空,则返回true,否则返回false
size()函数

获取堆栈中元素的数量。

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;
}

以上例子实现了对中缀表达式的计算,使用堆栈可以很方便地记录中间计算信息。