栈(算法)

在 C++ 里,栈是一种遵循后进先出(LIFO)原则的数据结构。下面从多个方面为你介绍 C++ 栈:

1. 使用标准库中的std::stack

C++ 标准库提供了std::stack容器适配器,能方便地实现栈的功能。以下是简单示例:

cpp

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    // 入栈操作
    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    // 访问栈顶元素
    std::cout << "栈顶元素: " << myStack.top() << std::endl;

    // 出栈操作
    myStack.pop();
    std::cout << "出栈后栈顶元素: " << myStack.top() << std::endl;

    // 检查栈是否为空
    if (!myStack.empty()) {
        std::cout << "栈不为空,栈的大小: " << myStack.size() << std::endl;
    }

    return 0;
}

在这个示例中,首先创建了一个存储int类型元素的栈myStack。接着使用push方法将元素压入栈,用top方法访问栈顶元素,用pop方法移除栈顶元素,用empty方法检查栈是否为空,用size方法获取栈中元素的数量。

2. 自定义栈的实现

你也可以自己实现一个栈。以下是一个简单的自定义栈的示例:

cpp

#include <iostream>
#include <vector>

template <typename T>
class MyStack {
private:
    std::vector<T> elements;

public:
    // 入栈操作
    void push(const T& value) {
        elements.push_back(value);
    }

    // 出栈操作
    void pop() {
        if (!elements.empty()) {
            elements.pop_back();
        }
    }

    // 访问栈顶元素
    T top() const {
        if (!elements.empty()) {
            return elements.back();
        }
        throw std::out_of_range("Stack is empty");
    }

    // 检查栈是否为空
    bool empty() const {
        return elements.empty();
    }

    // 获取栈的大小
    size_t size() const {
        return elements.size();
    }
};

int main() {
    MyStack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "栈顶元素: " << myStack.top() << std::endl;

    myStack.pop();
    std::cout << "出栈后栈顶元素: " << myStack.top() << std::endl;

    if (!myStack.empty()) {
        std::cout << "栈不为空,栈的大小: " << myStack.size() << std::endl;
    }

    return 0;
}

这个示例中定义了一个模板类MyStack,借助std::vector来存储栈中的元素,并且实现了pushpoptopemptysize等基本操作。

3. 栈的应用场景

栈在很多场景中都有应用,例如:

  • 表达式求值:计算后缀表达式(逆波兰表达式)时会用到栈。
  • 函数调用:程序在执行过程中,函数调用的上下文信息(如局部变量、返回地址等)会被压入栈中。
  • 括号匹配:检查括号是否匹配时,可以使用栈来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值