算法竞赛阶段二-数据结构(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,您可以高效地实现栈操作,避免手动管理内存。如果您有具体问题(如性能优化或特定应用),请提供更多细节!

相关推荐
彷徨而立1 分钟前
【C/C++】什么是 运行时库?运行时库 /MT 和 /MD 的区别?
c语言·c++
qq_417129252 分钟前
C++中的桥接模式变体
开发语言·c++·算法
开源技术16 分钟前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
Hello World . .20 分钟前
数据结构:队列
c语言·开发语言·数据结构·vim
clever10133 分钟前
在QtCreator 4.10.2中调试qt程序qDebug()输出中文为乱码问题的解决
开发语言·qt
YuTaoShao38 分钟前
【LeetCode 每日一题】3010. 将数组分成最小总代价的子数组 I——(解法二)排序
算法·leetcode·排序算法
测试开发Kevin1 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
松☆1 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
编码者卢布2 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
kaikaile19952 小时前
结构风荷载理论与Matlab计算
开发语言·matlab