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

相关推荐
rockmelodies4 分钟前
RSA 解密逻辑
开发语言·python
weisian15124 分钟前
力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
算法·leetcode·职场和发展
澡点睡觉43 分钟前
golang的包和闭包
开发语言·后端·golang
Dxy12393102162 小时前
python创建一个excel文件
开发语言·python·excel
2501_927773072 小时前
数据结构——单向链表
数据结构·算法
程序猫.2 小时前
C语言 二分查找:高效搜索有序数组
c语言·算法
比特森林探险记2 小时前
Go语言常用的设计模式
开发语言·设计模式·golang
weisian1512 小时前
力扣经典算法篇-38-组合(回溯算法)
算法·leetcode·职场和发展