当前位置: 首页 > 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.rkmt.cn/news/57476.html

相关文章:

  • 实验三 类和对象_基础编程2
  • Ansible自动化运维:从入门到精通 - 详解
  • 配置SSH密钥统一推送Github和Gitee
  • 2025 最新网袋厂家实力推荐排行榜:全品类定制方案 + 前沿技术应用深度盘点,采购必看水果/尼龙/大葱/白菜/椰枣/水产/地瓜网袋公司推荐
  • 2026凉山州一对一家教机构推荐,五大辅导机构口碑排名已更新,附本地家长真实反馈评价!
  • 2025年景观绿雕植物源头厂家权威推荐榜单:植物雕塑/景观雕塑/仿真绿雕源头供应商精选
  • 2025 最新淮北外科医院推荐!外科医院口碑排行榜权威发布,二级医院资质 + 100 张床位,实力之选全解析
  • 2025 最新推荐网眼袋源头厂家权威榜单:全新原料精准编织 + 无中间环节,高性价比品牌测评指南蔬菜/洋葱/土豆/水果/尼龙网眼袋公司推荐
  • 2025年减速机定做厂家权威推荐榜单:伺服减速机/精密减速机/人形减速机定制厂家精选
  • HBase大数据存储如何提升读写性能
  • BOM和DOM
  • 2025高粱酒纯粮食酒推荐TOP10,纯粮固态发酵酱香浓郁回甘绵长
  • 玉树州一对一家教机构最新推荐,2026最新家教机构榜单:家长首选靠谱提分方案推荐
  • 2025年拉袋离心机订制厂家权威推荐榜单:碟式离心机/卧螺离心机/活塞推料离心机源头厂家精选
  • hbase上如何导入python包
  • Git为什么要有submodule呢?
  • 打印机字体漏洞分析:CVE-2024-12649技术深度解析
  • java freemarker(ftl)模板填充导出PDF,支持中文乱码
  • 2025 最新仿石漆厂家权威推荐榜:真石漆 / 绿色环保仿石漆优质品牌精选仿石漆/真石漆/绿色真石漆/有资质的仿石漆公司推荐
  • 2025年纱线烘干机制造厂权威推荐榜单:气流烘干机/筒子烘干机/快速烘干机源头制造厂精选
  • CF1630C Paint the Middle
  • P3113 [USACO14DEC] Marathon G
  • 崖山数据库导出 - 华
  • AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成
  • MX Round 27 解题报告
  • 11.22模拟赛
  • 2025年镀锌水沟盖板订做厂家权威推荐榜单:雨水沟盖板/污水沟盖板/镀锌排水沟盖板源头厂家精选
  • 使用C# Channel实现工位流水线调度系统
  • BLOG1-NCHU-单部电梯调度程序
  • web漏洞、waf繞過和前端加密繞過