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

相关推荐
栈溢出了7 分钟前
Java Lambda 表达式笔记
java·开发语言·intellij-idea
会周易的程序员8 分钟前
使用 pybind11 封装 C++ 日志库 microLog 为 Python 模块
java·c++·python·物联网·架构·日志·aiot
WZF-Sang15 分钟前
网络基础——2
服务器·网络·c++·学习·网络编程·php
zhixingheyi_tian17 分钟前
一份GC日志的解读
java·开发语言
czhaii17 分钟前
串口1中断收发-C语言-MODBUS协议
c语言·开发语言
Fox爱分享37 分钟前
字节二面:1000瓶酒,有一瓶是毒药,多少只老鼠可以查出来?
算法·面试·程序员
+wacyltd大模型备案算法备案42 分钟前
大模型评估测试题库怎么建?风险分类、测试样本的完整方法
人工智能·算法·安全·分类·大模型·大模型备案·大模型上线登记
apihz1 小时前
随机驾考题目(C 照科一 / 科四 2000+ 题)免费API调用教程
android·java·c语言·开发语言·网络协议·tcp/ip
Fox爱分享1 小时前
字节二面智力题:100只老虎和1只羊关在一起,这只羊会不会被吃?
算法·面试·程序员
matlab代码1 小时前
基于matlab人脸疲劳驾驶检测系统(可使用其它人脸视频)【源码39期】
开发语言·matlab·人脸疲劳检测