算法竞赛阶段二-数据结构(40)数据结构栈的STL

//STL栈

#include<bits/stdc++.h>

using namespace std;

int main()

{

stack<int>arr;

for(int i=0;i<10;i++)

{

arr.push(i);

}

// for(int i=0;i<10;i++)

// {

// cout<<arr.top()<<endl;

// arr.pop();

// }

while(!arr.empty())

{

cout<<arr.top()<<endl;

arr.pop();

}

return 0;

}

数据结构栈的C++ STL实现

在计算机科学中,栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构。它支持两个主要操作:入栈(push)和出栈(pop)。入栈将元素添加到栈顶,出栈移除栈顶元素。C++标准模板库(STL)提供了一个高效的stack容器适配器,简化了栈的实现和使用。下面我将一步步解释如何在C++中使用STL的栈。

1. 栈的基本概念
  • 栈的核心操作包括:
    • push(): 将元素添加到栈顶,时间复杂度为O(1)
    • pop(): 移除栈顶元素,时间复杂度为O(1)
    • top(): 访问栈顶元素但不移除,时间复杂度为O(1)
    • empty(): 检查栈是否为空,时间复杂度为O(1)
    • size(): 返回栈中元素的数量,时间复杂度为O(1)
  • STL的stack是基于其他容器(如dequelist)实现的适配器,默认使用deque作为底层容器。
2. 使用STL栈的步骤
  • 包含头文件 :首先需要包含<stack>头文件。

    cpp 复制代码
    #include <stack>
  • 声明栈对象 :使用模板语法声明栈,指定元素类型。例如,创建一个整数栈:

    cpp 复制代码
    std::stack<int> myStack;
  • 常用操作示例

    • push(): 添加元素到栈顶。
    • pop(): 移除栈顶元素(注意:调用前需检查栈是否为空)。
    • top(): 获取栈顶元素值。
    • empty(): 返回布尔值表示栈是否为空。
    • size(): 返回元素个数。
3. 完整代码示例

以下是一个简单的C++程序,演示栈的基本操作:创建栈、入栈、出栈和遍历。

cpp 复制代码
#include <iostream>
#include <stack>  // 包含栈头文件

int main() {
    // 声明一个整数栈
    std::stack<int> stack;

    // 入栈操作:添加元素
    stack.push(10);
    stack.push(20);
    stack.push(30);

    // 输出栈顶元素
    std::cout << "栈顶元素: " << stack.top() << std::endl;  // 输出30

    // 出栈操作:移除栈顶元素
    stack.pop();  // 移除30
    std::cout << "移除后栈顶元素: " << stack.top() << std::endl;  // 输出20

    // 检查栈是否为空
    if (!stack.empty()) {
        std::cout << "栈非空,元素数量: " << stack.size() << std::endl;  // 输出2
    }

    // 遍历栈(栈不支持直接迭代,需借助临时栈)
    std::cout << "栈中元素(从顶到底): ";
    while (!stack.empty()) {
        std::cout << stack.top() << " ";
        stack.pop();  // 边遍历边移除
    }
    std::cout << std::endl;

    return 0;
}
4. 注意事项
  • 底层容器 :默认使用deque,但可以指定其他容器,例如:

    cpp 复制代码
    std::stack<int, std::list<int>> customStack;  // 使用list作为底层容器
  • 时间复杂度:所有核心操作(push, pop, top等)的平均时间复杂度为O(1),因为底层容器(如deque)支持高效访问。

  • 安全性 :调用pop()top()前,务必检查栈是否为空,否则可能导致未定义行为。

  • 应用场景:栈常用于函数调用栈、表达式求值(如括号匹配)、深度优先搜索(DFS)等算法。

通过STL的stack,您可以高效地实现栈操作,避免手动管理内存。如果您有具体问题(如性能优化或特定应用),请提供更多细节!

相关推荐
草莓熊Lotso1 小时前
MySQL 从入门到实战:视图特性 + 用户权限管理全解
linux·运维·服务器·数据库·c++·mysql
雾岛听蓝1 小时前
进程信号机制深度解析
linux·开发语言·经验分享·笔记
Q741_1471 小时前
每日一题 力扣 1848. 到目标元素的最小距离 模拟 C++题解
c++·算法·leetcode·模拟
VkN2X2X4b2 小时前
算法性能的渐近与非渐近行为对比的技术9
算法
好家伙VCC2 小时前
**神经编码新视角:用Python实现生物启发的神经信号压缩与解码算法**在人工智能飞速发展的今天
java·人工智能·python·算法
踏着七彩祥云的小丑8 小时前
pytest——Mark标记
开发语言·python·pytest
Dream of maid8 小时前
Python12(网络编程)
开发语言·网络·php
W23035765739 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.9 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
Y4090019 小时前
【多线程】线程安全(1)
java·开发语言·jvm