当前位置: 首页 > news >正文

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

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

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


在这里插入图片描述

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

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


前言

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

在这里插入图片描述

一、栈的概念

栈是⼀种***只允许在⼀端进行数据插入和删除操作***的线性表。
(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;}

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

总结 — 每日励志时刻

在这里插入图片描述

http://www.jsqmd.com/news/47732/

相关文章:

  • 实验三 类和对象_基础编程2
  • Ansible自动化运维:从入门到精通 - 详解
  • 配置SSH密钥统一推送Github和Gitee
  • 2025 最新网袋厂家实力推荐排行榜:全品类定制方案 + 前沿技术应用深度盘点,采购必看水果/尼龙/大葱/白菜/椰枣/水产/地瓜网袋公司推荐
  • 2026凉山州一对一家教机构推荐,五大辅导机构口碑排名已更新,附本地家长真实反馈评价!
  • 分布式存储数据结构LSM在HBase中的应用
  • 2025年景观绿雕植物源头厂家权威推荐榜单:植物雕塑/景观雕塑/仿真绿雕源头供应商精选
  • 2025 最新淮北外科医院推荐!外科医院口碑排行榜权威发布,二级医院资质 + 100 张床位,实力之选全解析
  • 2025 最新推荐网眼袋源头厂家权威榜单:全新原料精准编织 + 无中间环节,高性价比品牌测评指南蔬菜/洋葱/土豆/水果/尼龙网眼袋公司推荐
  • 完整教程:FPGA DDR3实战(七):Xilinx FPGA DDR3性能深度测试----吞吐率与延迟精准分析
  • 决策单调性 dp 的分治解法(整体二分解法)
  • 11.17-11.22 总结
  • 2025年陶瓷防静电地板工厂权威推荐榜单:木基防静电地板/铝合金防静电地板/硫酸钙防静电地板源头厂家精选
  • 深入解析:帝可得智能售货机系统实战Day1:从环境搭建到区域管理功能落地 (1)
  • 2026年宿迁一对一家教机构推荐:五大辅导机构测评排行榜,综合实力全解析!
  • 启程
  • 2025年广州洁净度检测公司权威推荐榜单:空气净化器检测/新风机检测/过滤器(滤网)检测源头公司精选
  • 2025年减速机定做厂家权威推荐榜单:伺服减速机/精密减速机/人形减速机定制厂家精选
  • [LangChain] 21. LangChain中创建Agent
  • 2025年钢丝绳牵引格栅机批发厂家权威推荐榜单:抓斗清污机/耙斗清污机/移动抓斗清污机源头厂家精选
  • HBase大数据存储如何提升读写性能
  • HBase大数据存储如何应对网络延迟
  • P10683 [COTS 2024] 划分 Particija
  • 2025云南曲靖市玉溪市一对一家教辅导测评排行榜:权威推荐高性价比选择
  • 2026年盐城一对一补习机构权威推荐:靠谱辅导机构测评排行榜
  • BOM和DOM
  • 2025高粱酒纯粮食酒推荐TOP10,纯粮固态发酵酱香浓郁回甘绵长
  • 2025内蒙古兴安盟锡林郭勒盟阿拉善盟一对一家教辅导测评排行榜:优质选择推荐
  • 2025年煤矿用阻燃铠装光缆生产厂家权威推荐榜单:矿用铠装光缆/煤矿用光缆/矿用4芯光缆源头厂家精选
  • 玉树州一对一家教机构最新推荐,2026最新家教机构榜单:家长首选靠谱提分方案推荐