尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

《算法通关指南数据结构和算法篇(3)--- 栈和stack》 - 教程

《算法通关指南数据结构和算法篇(3)--- 栈和stack》 - 教程
📅 发布时间:2026/6/21 0:01:57

《算法通关指南数据结构和算法篇(3)--- 栈和stack》 - 教程

《不一样的数据结构之— 栈和stack》


在这里插入图片描述

小龙报:个人主页
作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目

✨***永远相信美好的事情即将发生***

文章目录

  • 《不一样的数据结构之— 栈和stack》
  • 前言
  • 一、栈的概念
  • 二、栈的模拟实现
    • 2.1创建
    • 2.2进栈
    • 2.3出栈
    • 2.4栈顶元素
    • 2.5判空
    • 2.6有效元素个数
    • 2.7 所有测试代码
  • 三、stack
    • 3.1 如何创建
    • 3.2容器相关接口
      • 3.2.1 size / empty
      • 3.2.2 push/pop
      • 3.2.3 top
    • 3.3测试所有接口
  • 总结 --- 每日励志时刻


前言

本系列讲解算法竞赛的数据结构在算法竞赛中,我们主要关心的其实是时间开销,空间上是基本够用的,因此我们是使用庞大的数组实现的话不多说冲!

在这里插入图片描述

一、栈的概念

栈是⼀种***只允许在⼀端进行数据插入和删除操作***的线性表。
(1)进行数据插入或删除的一端称为***栈顶***,另⼀端称为***栈底***。不含元素的栈称为空栈。
(2)进栈就是往栈中放入元素,出栈就是将元素弹出栈顶。

ps: 栈其实是⼀个比较简单的数据结构。学习的重点在于用栈去解决问题,这也是难点。
【注意】
如果定义了⼀个栈结构,那么添加和删除元素只能在栈顶进行。不能随意位置添加和删除元素,这是栈这个数据结构的特性,也是规定。

二、栈的模拟实现

2.1创建

(1)本质还是线性表,因此可以创建⼀个足够大的数组,充当栈结构
(2)再定义⼀个变量n,用来记录栈中元素的个数,同时还可以标记栈顶的位置。

const int N = 1e6 + 10;
int stk[N];
int n;

2.2进栈

这里依旧舍弃下标为0 的位置,有效元素从 1开始记录。
***进栈***操作,那就***把元素放在栈顶位置***即可。
不必

在这里插入图片描述

//进栈
void push(int x)
{
stk[++n] = x;
}

时间复杂度:O(1)

2.3出栈

ps:不用真的删除元素,只用将元素个数减1,就相当于删除栈顶元素。
在这里插入图片描述

//出栈
void pop()
{
n--;
}

时间复杂度:O(1)

2.4栈顶元素

注意:因为栈特殊的规定,不⽀持遍历整个栈中的元素。因此,需要查找栈中元素的时候,只能查找到栈顶元素。
在这里插入图片描述

// 栈顶元素
int top()
{
return stk[n];
}

时间复杂度:O(1)

2.5判空

在这里插入图片描述

// 判空
bool empty()
{
return n == 0;
}

时间复杂度:O(1)

2.6有效元素个数

在这里插入图片描述

// 栈中元素个数 
int size()
{
return n;
}

时间复杂度:O(1)

2.7 所有测试代码

#include <iostream>using namespace std;const int N = 1e6 + 10;int stk[N];int n;//进栈void push(int x){stk[++n] = x;}//出栈void pop(){n--;}// 栈顶元素int top(){return stk[n];}// 判空bool empty(){return n == 0;}// 栈中元素个数 int size(){return n;}int main(){for (int i = 1; i <= 10; i++)push(i);while (!empty())  // while(size()) {cout << top() << " ";pop();}return 0;}

运行结果:
在这里插入图片描述

三、stack

3.1 如何创建

stack<T> st;//T 可以是任意类型的数据。

3.2容器相关接口

3.2.1 size / empty

(1)size :返回栈里实际元素的个数;
(2)empty :返回栈是否为空。
时间复杂度:O(1)

3.2.2 push/pop

(1) push :进栈;
(2) pop:出栈。
时间复杂度:O(1)

3.2.3 top

(1) top:返回栈顶元素,但是不会删除栈顶元素。
时间复杂度: O(1)

3.3测试所有接口

#include <iostream>#include <stack>using namespace std;int main(){stack<int> st;// 先讲1~10进栈for (int i = 1; i <= 10; i++){st.push(i);}while (st.size()) // !st.empty(){cout << st.top() << endl;st.pop();}return 0;}

运行结果:
在这里插入图片描述

总结 — 每日励志时刻

在这里插入图片描述

相关新闻

  • 实验三 类和对象_基础编程2
  • Ansible自动化运维:从入门到精通 - 详解
  • 配置SSH密钥统一推送Github和Gitee

最新新闻

  • Zircolite开发者指南:如何扩展自定义SIGMA规则和转换函数
  • Code::Blocks 配置 OpenCV 4.2.0
  • 解放你的幻兽世界:3步搞定Palworld存档深度定制
  • 删除 c.的c++代码
  • 从零开始:VeighNa量化交易框架终极指南,新手也能快速上手AI策略开发
  • CANN/GE图引擎算子列表API

日新闻

周新闻

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号