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

秒懂百科,C++如此简单丨第二十一天:栈和队列

目录

前言

Everyday English

栈(Stack)

图文解释

实现添加删除元素

实现查看清空栈

完整代码

运行示例

栈的选择题

队列(Queue)

图文解释

队列的基本用法

完整代码 

运行结果 

队列的好处 

结尾 


前言

今天我们将学习两个新的数据结构——栈和队列。

Everyday English

A friend in need is a friend indeed.
患难见真情。

栈(Stack)

图文解释

栈最直白的想象就是羽毛球筒了(假设从一个口取)。

比如说我想按照--的顺序放进去,并取出色羽毛去,得进行以下操作:

1.放入红-橙-黄色羽毛球。

2.取出顶部的黄色羽毛球。

3.取出顶部的橙色羽毛球。

下面请欣赏我的纯手绘图片:

现在请你把注意力放在黄色羽毛球上,它在放进筒时是最后一个放进去的,而被取出来时是第一个被取出来的;而红色羽毛球却是最后一个被取出来的。所以栈有一个很重要的性质:

先进后出,后进先出(LIFO:Last in first out)

实现添加删除元素

添加:将元素入栈并使指针右移一位。

void add(int n)//添加元素至栈顶
{tmp++;a[tmp]=n;
}

 删除:将元素出栈并使指针左移一位。

void pop()//删除栈顶元素
{a[tmp]=0;//这一步可要可不要tmp--;
}

实现查看清空栈

查看:把数组从1-tmp输出一下即可。

void look(int n[])
{for(int i=1;i<=tmp;i++){cout<<n[i]<<" ";}
}

清空:把数组归零,并把指针赋值为1。 

void empty(int n[])
{for(int i=1;i<=tmp;i++){n[i]=0;}tmp=0;
}

完整代码

#include<bits/stdc++.h>
using namespace std;
string op="";
int a[1005],tmp=0,n;
char b[1005],m;
void add(int n)//添加元素至栈顶
{tmp++;a[tmp]=n;
}
void pop()//删除栈顶元素
{a[tmp]=0;//这一步可要可不要tmp--;
}
void look(int n[])
{cout<<"The stack is:"; for(int i=1;i<=tmp;i++){cout<<n[i]<<" ";}
}
void empty(int n[])
{for(int i=1;i<=tmp;i++){n[i]=0;}tmp=0;cout<<"The stack is empty now."<<endl;
}
int main()
{memset(a,0,sizeof(a));while(1){cin>>op;if(op[0]=='s') return 0;else {if(op[0]=='a') cin>>n,add(n);if(op[0]=='p') pop();if(op[0]=='l') look(a);if(op[0]=='e') empty(a);}}
} 

运行示例

add 1
add 2
add 3
add 4
pop
pop
look
The stack is:1 2
add 5
empty
The stack is empty now.
add 6
look
The stack is:6

栈的选择题

栈虽然编程中用的不是特别多,但是在CSP的第一轮考试中经常出现,我们来看一看。 

1.有6个元素,按照6、5、4、3、2、1的顺序入栈S,请问下列哪个出栈顺序是非法的?

A.5  4  3  6  1  2

B.4  5  3  1  2  6

C.3  4  6  5  2  1

D.2  3  4  1  5  6

题目来源:2022 CSP-J 选择第二题

解析:因为6比5先入栈,所以出栈时6应该在5后面,故选C。当然你也可以模拟一下。

2.对于入栈顺序为a,b,c,d,e的序列,下列( )不是合法的出栈序列。

A.a,b,c,d,e

B.e,d,c,b,a

C.b,a,c,d,e

D.c,d,a,e,b

题目来源:2021 CSP-J 选择题第五题

解析:因为a比b先入栈,所以出栈时a应该在b后面,故选D。当然你也可以模拟一下。

A.进栈一个,出栈一个

B.全部进栈,全部出栈

C.a进栈,b进栈,b出栈,a出栈,剩下的进栈一个,出栈一个。

D.无法完成

3.下图中所使用的数据结构是?

A、栈

B、队列

C、二叉树

D、哈希表

栈的性质是:后进先出,故选A。

队列(Queue)

图文解释

队列顾名思义就是排队买票,先买票的人总是先出来,最后买票的人最后出来。

如上图,1号游客最先排队,所以他第一个买票也是第一个出来的,这就是队列的重要性质:

先进先出,后进后出(FIFO:First in first out)

队列的基本用法

在C++中,已经有为我们写好的队列了,我们只需直接使用即可。

首先需要定义一个队列:

queue<变量类型> q; 

这个变量类型可以是int,double,long long,struct...... 

下面是队列的几个基本用法:

q.pop() //弹出队首元素
q.push(item) //把元素item插入到队尾
q.empty() //如果队列为空返回True,否则返回False
q.full() //如果队列已满返回True,否则返回False
q.front() //调用队首元素
q.size() //返回队列中元素的数量

完整代码 

#include<bits/stdc++.h>
using namespace std;
int main()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.pop();cout<<q.front()<<endl;q.pop();cout<<q.size()<<endl;q.pop();if(q.empty()) cout<<"The queue is empty."<<endl;return 0;
}

运行结果 

2
1
The queue is empty.

队列的好处 

等我们后面学到BFS时,会用到很多有关于队列的知识。

结尾 

本篇文章我们学习了栈和队列,图片为纯手绘无参考,制作不易,还请各位大佬三连支持一下

相关文章:

秒懂百科,C++如此简单丨第二十一天:栈和队列

目录 前言 Everyday English 栈&#xff08;Stack&#xff09; 图文解释 实现添加删除元素 实现查看清空栈 完整代码 运行示例 栈的选择题 队列&#xff08;Queue&#xff09; 图文解释 队列的基本用法 完整代码 运行结果 队列的好处 结尾 前言 今天我们将…...

STM32-开发环境之STM32CubeMX

目录 STM32CubeMX介绍 STM32CubeMX特性 应用场景 其他事项 STM32CubeMX介绍 STM32CubeMX是ST公司&#xff08;意法半导体&#xff09;推出的一款图形化工具&#xff0c;也是配置和初始化C代码生成器。它主要服务于STM32微控制器的配置和开发。 STM32CubeMX特性 1.直观选…...

[晓理紫]CCF系列会议截稿时间订阅

CCF系列会议截稿时间订阅 VX 关注{晓理紫}&#xff0c;每日更新最新CCF系列会议信息&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持&#xff01;&#xff01; 如果你感觉对你有所帮助&#xff0c;请关注我&#xff0c;每日准时为你推送最新CCF会议…...

重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。

代码&#xff1a; <!-- 侧边栏 --><el-col :span"12" :style"{ width: 200px }"><el-menu default-active"first" class"el-menu-vertical-demo" select"handleMenuSelect"><el-menu-item index"…...

如何在 Angular 中使用 Flex 布局

介绍 Flex Layout 是一个组件引擎&#xff0c;允许您使用 CSS Flexbox 创建页面布局&#xff0c;并提供一组指令供您在模板中使用。 该库是用纯 TypeScript 编写的&#xff0c;因此不需要外部样式表。它还提供了一种在不同断点上指定不同指令以创建响应式布局的方法。 在本教…...

通俗的讲解什么是机器学习之损失函数

想象一下&#xff0c;你在玩一个靶心射击的游戏&#xff0c;你的目标是尽可能让箭簇命中靶心。在这个游戏中&#xff0c;损失函数可以看作是测量你的箭簇与靶心距离的规则。损失函数的值越小&#xff0c;意味着你的箭簇离靶心越近&#xff0c;你的射击技能越好。 在机器学习中…...

快速搭建PyTorch环境:Miniconda一步到位

快速搭建PyTorch环境&#xff1a;Miniconda一步到位 &#x1f335;文章目录&#x1f335; &#x1f333;一、为何选择Miniconda搭建PyTorch环境&#xff1f;&#x1f333;&#x1f333;二、Miniconda安装指南&#xff1a;轻松上手&#x1f333;&#x1f333;三、PyTorch与Minic…...

图灵日记之java奇妙历险记--抽象类和接口

目录 抽象类概念抽象类语法 接口概念规则使用特性实现多个接口接口的继承接口使用实例Clonable接口和深拷贝抽象类和接口的区别 Object类 抽象类 概念 在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够…...

批量给元素添加进场动画;获取文本光标位置;项目国际化

批量给元素添加进场动画 api及参数参考&#xff1a;https://juejin.cn/post/7310977323484971071 简单实现&#xff1a; addAnimationClass(){//交叉观察器if (window?.IntersectionObserver) {//获取所有需要添加进场动画的元素&#xff0c;放到一个数组let items [...do…...

解决:docker创建Redis容器成功,但无法启动Redis容器、也无报错提示

解决&#xff1a;docker创建Redis容器成功&#xff0c;但无法启动Redis容器、也无报错提示 一问题描述&#xff1a;1.docker若是直接简单使用run命令&#xff0c;但不挂载容器数据卷等参数&#xff0c;则可以启动Redis容器2.docker复杂使用run命令&#xff0c;使用指定redis.co…...

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

对于 Mingw 的安装比较困难&#xff0c;国内的网无法正常在线下载组件&#xff0c; 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包&#xff0c;添加环境变量&#xff0c;并将 mingw32-make.exe 名字改成 make.exe。 对于 OpenOCD&#xff0c;需要…...

单片机在物联网中的应用

单片机&#xff0c;这个小巧的电子设备&#xff0c;可能听起来有点技术性&#xff0c;但它实际上是物联网世界中的一个超级英雄。简单来说&#xff0c;单片机就像是各种智能设备的大脑&#xff0c;它能让设备“思考”和“行动”。由于其体积小、成本低、功耗低、易于编程等特点…...

16.Qt 工具栏生成

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面添加 2. 信号槽 功能实现 参考&#xff1a; 前言&#xff1a; 基于QMainWindow&#xff0c;生成菜单下面的工具栏&#xff0c;可以当作菜单功能的快捷键&#xff0c;也可以完成新的功能 直接在UI文件中…...

【Linux内核】从0开始入门Linux Kernel源码

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[Linux内核] ❤️ 前置学习专栏&#xff1a;[Linux学习]从0到1 ⏰ 我们仍在旅途 ​ 目录 …...

SQL Service 2008 的安装与配置

点击添加当前用户...

Apache POI | Java操作Excel文件

目录 1、介绍 2、代码示例 2.1、将数据写入Excel文件 2.2、读取Excel文件中的数据 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步…...

vue 学习definproperty方法

definproperty方法是Vue很重要的一个底层方法&#xff0c;掌握他的原理很重要&#xff0c;下面通过代码说明问题&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>回顾Object.defineproperty方法</title&…...

react 实现路由拦截

简单介绍下项目背景&#xff0c;我这里做了一个demo&#xff0c;前端使用mock数据&#xff0c;然后实现简单的路由拦截&#xff0c;校验session是否包含用户作为已登录的依据&#xff0c;react-router-dom是v6。不像vue可以设置登录拦截beforeenter&#xff0c;react需要我们自…...

数据分析(一) 理解数据

1. 描述性统计&#xff08;summary&#xff09; 对于一个新数据集&#xff0c;首先通过观察来熟悉它&#xff0c;可以打印数据相关信息来大致观察数据的常规特点&#xff0c;比如数据规模&#xff08;行数列数&#xff09;、数据类型、类别数量&#xff08;变量数目、取值范围…...

什么是 Flet?

什么是 Flet&#xff1f; Flet 是一个框架&#xff0c;允许使用您喜欢的语言构建交互式多用户 Web、桌面和移动应用程序&#xff0c;而无需前端开发经验。 您可以使用基于 Google 的 Flutter 的 Flet 控件为程序构建 UI。Flet 不只是“包装”Flutter 小部件&#xff0c;而是…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...

ubuntu中安装conda的后遗症

缘由: 在编译rk3588的sdk时&#xff0c;遇到编译buildroot失败&#xff0c;提示如下&#xff1a; 提示缺失expect&#xff0c;但是实测相关工具是在的&#xff0c;如下显示&#xff1a; 然后查找借助各个ai工具&#xff0c;重新安装相关的工具&#xff0c;依然无解。 解决&am…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

VSCode 没有添加Windows右键菜单

关键字&#xff1a;VSCode&#xff1b;Windows右键菜单&#xff1b;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意&#xff0c;实际使用的时候发现 VSCode 在 Windows 菜单栏…...

软件工程教学评价

王海林老师您好。 您的《软件工程》课程成功地将宏观的理论与具体的实践相结合。上半学期的理论教学中&#xff0c;您通过丰富的实例&#xff0c;将“高内聚低耦合”、SOLID原则等抽象概念解释得十分透彻&#xff0c;让这些理论不再是停留在纸面的名词&#xff0c;而是可以指导…...