十天学完基础数据结构-第五天(栈(Stack)和队列(Queue))

news2024/12/24 18:50:39

在这里插入图片描述

栈的定义和特点

是一种线性数据结构,它遵循后进先出(LIFO)原则。栈具有以下基本概念和特点:

  • 栈顶:栈的顶部元素,是唯一可访问的元素。

  • 入栈:将元素添加到栈顶。

  • 出栈:从栈顶移除元素。

栈常常用于跟踪函数调用、表达式求值等场景。

队列的定义和特点

队列是一种线性数据结构,它遵循先进先出(FIFO)原则。队列具有以下基本概念和特点:

  • 队列前端:队列的第一个元素,是唯一可访问的元素。

  • 队尾:队列的最后一个元素,用于添加新元素。

  • 入队:将元素添加到队尾。

  • 出队:从队列前端移除元素。

队列常常用于任务调度、缓冲数据等场景。

栈和队列的常见操作

栈和队列支持以下常见操作:

  1. 入栈:将元素添加到栈顶。

  2. 出栈:从栈顶移除元素。

  3. 获取栈顶元素:查看但不移除栈顶元素。

队列

  1. 入队:将元素添加到队尾。

  2. 出队:从队列前端移除元素。

  3. 获取队列前端元素:查看但不移除队列前端元素。

下面是一个简单的C++示例,使用栈和队列:

#include <iostream>
#include <stack>
#include <queue>

int main() {
    // 使用栈
    std::stack<int> myStack;
    
    // 入栈
    myStack.push(1);
    myStack.push(2);
    
    // 出栈
    int topElement = myStack.top();
    myStack.pop();

    // 使用队列
    std::queue<int> myQueue;
    
    // 入队
    myQueue.push(1);
    myQueue.push(2);
    
    // 出队
    int frontElement = myQueue.front();
    myQueue.pop();

    return 0;
}

练习题:

  1. 栈和队列的主要区别是什么?给出一个现实生活中的例子,说明何时使用栈和何时使用队列。

  2. 在栈中,最后一个入栈的元素是什么?在队列中,最后一个入队的元素是什么?

  3. 描述一种情况,其中栈可以用于解决问题。

  4. 描述一种情况,其中队列可以用于解决问题。

栈和队列的主要区别是什么?给出一个现实生活中的例子,说明何时使用栈和何时使用队列。

  • 主要区别:主要区别在于数据的访问顺序。栈遵循后进先出(LIFO)原则,最后进入的元素最先被访问。队列遵循先进先出(FIFO)原则,最早进入的元素最先被访问。

  • 示例:考虑以下示例,你在超市排队结账。队列的应用是很明显的,因为先来的顾客应该先结账,即最早进入队列的人最先付款。现实生活中的这种情况适合使用队列。

在栈中,最后一个入栈的元素是什么?在队列中,最后一个入队的元素是什么?

  • :在栈中,最后一个入栈的元素成为栈顶元素。栈顶元素是唯一可访问的元素,而且最后一个入栈的元素将成为新的栈顶元素。

  • 队列:在队列中,最后一个入队的元素仍然位于队列的队尾,而第一个入队的元素位于队列的队头。队尾元素等待其他元素出队后才能被访问。

描述一种情况,其中栈可以用于解决问题。

  • 情况示例:计算器应用中的表达式求值。当用户输入一个数或运算符时,可以使用栈来存储操作数和运算符。当遇到运算符时,从栈中弹出操作数,执行运算,然后将结果入栈。这样,栈可以帮助跟踪表达式的计算顺序。

注意:确保栈的操作符和操作数的顺序遵循运算符的优先级和结合性规则。

描述一种情况,其中队列可以用于解决问题。

  • 情况示例:任务调度。假设有多个任务需要执行,这些任务按照不同的优先级到达,可以使用队列来调度它们的执行顺序。高优先级任务入队时排在队列前端,低优先级任务排在队列后端。这样,队列可以确保按照优先级顺序执行任务。

注意:确保在任务执行时适时更新队列,以便根据新的任务到达情况进行调度。

在使用栈和队列时,要特别注意遵循它们的特点和规则,以确保正确的数据访问顺序和操作顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(c语言)经典bug

#include<stdio.h> //经典bug int main() { int i 0; int arr[10] {1,2,3,4,5,6,7,8,9,10}; for (i 0; i < 12; i) //越界访问 { arr[i] 0; printf("hehe\n"); } return 0; } 注&#xff1a;输出结果为死循…

【LeetCode热题100】--34.在排序数组中查找元素的第一个和最后一个位置

34.在排序数组中查找元素的第一个和最后一个位置 二分查找中&#xff0c;寻找 leftIdx 即为在数组中寻找第一个大于等于 target 的下标&#xff0c;寻找 rightIdx 即为在数组中寻找第一个大于 target 的下标&#xff0c;然后将下标减一。进行两次查找 class Solution {public …

AlexNet网络复现

1. 引言 在现代计算机视觉领域&#xff0c;深度学习已经成为了一个核心技术&#xff0c;其影响力远超过了传统的图像处理方法。但深度学习&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;在计算机视觉的主导地位并不是从一开始就有的。在2012年之前&#xff0c;计…

二、互联网技术——网络协议

文章目录 一、OSI与TCP/IP参考模型二、TCP/IP参考模型各层功能三、TCP/IP参考模型与对应协议四、常用协议与功能五、常用协议端口 一、OSI与TCP/IP参考模型 二、TCP/IP参考模型各层功能 三、TCP/IP参考模型与对应协议 例题&#xff1a;TCP/IP模型包含四个层次&#xff0c;由上至…

正点原子嵌入式linux驱动开发——U-boot使用

在学会U-boot的移植以及其启动过程之前&#xff0c;先体验一下U-boot会更有助于学习的认知。STM32MP157开发板光盘资料里面已经提供了一个正点原子团队已经移植好的U-Boot&#xff0c;本章我们就直接编译这个移植好的U-Boot&#xff0c;然后烧写到EMMC里面启动&#xff0c;启动…

华为云云耀云服务器L实例评测|部署在线影音媒体系统 Jellyfin

华为云云耀云服务器L实例评测&#xff5c;部署在线影音媒体系统 Jellyfin 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 产品规格1.3 应用场景1.4 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Jellyfin3.1 Jellyfin 介绍3.2 Docke…

VD6283TX环境光传感器驱动开发(4)----移植闪烁频率代码

VD6283TX环境光传感器驱动开发----4.移植闪烁频率代码 闪烁定义视频教学样品申请源码下载开发板设置开发板选择IIC配置串口配置开启X-CUBE-ALS软件包时钟树配置ADC使用定时器触发采样KEIL配置FFT代码配置app_x-cube-als.c需要添加函数 闪烁定义 光学闪烁被定义为人造光源的脉动…

全志ARM926 Melis2.0系统的开发指引③

全志ARM926 Melis2.0系统的开发指引③ 编写目的6. 存储系统简介6.1.概要描述6.2.文件系统接口6.2.1. 文件系统支持6.2.2. 文件系统接口函数 6.3. Flash 分区6.3.1.如何配置可配分区的大小 6.4.存储介质开发6.4.1. NOR Flash6.4.1.1.添加新 Nor Flash6.4.1.2.Nor Flash 保存用户…

Llama2-Chinese项目:6-模型评测

测试问题筛选自AtomBulb[1]&#xff0c;共95个测试问题&#xff0c;包含&#xff1a;通用知识、语言理解、创作能力、逻辑推理、代码编程、工作技能、使用工具、人格特征八个大的类别。 1.测试中的Prompt   例如对于问题"列出5种可以改善睡眠质量的方法"&#xff…

DP读书:《openEuler操作系统》(四)鲲鹏处理器

鲲鹏处理器 一、处理器概述1.Soc2.Chip3.DIE4.Cluster5.Core 二、体系架构1.计算子系统2.存储子系统3.其他子系统 三、CPU编程模型1.中断与异常2.异常级别a.基本概念b.异常级别切换 下面为整理的内容&#xff1a;鲲鹏处理器 架构与编程&#xff08;一&#xff09;处理器与服务器…

全志ARM926 Melis2.0系统的开发指引④

全志ARM926 Melis2.0系统的开发指引④ 编写目的7. 固件打包脚本7.1.概要描述7.2.术语定义7.2.1. makefile7.2.2. image.bat 7.3.工具介绍7.4.打包步骤7.4.1. makefile 部分7.4.2. image.bat 部分 7.5.问题与解决方案7.5.1. 固件由那些文件构成7.5.2. melis100.fex 文件包含什么…

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 &#xff08;1&#xff09;修改Makfile.sdk &#xff08;2&#xff09;设置环境变量 &#xff08;3&#xff09;编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…

Monkey基本使用及介绍

1 简介.. 1 1.1 Monkey是干什么的.. 1 1.2 我们为什么要用monkey. 1 1.3 试行monkey的计划.. 2 2 monkey使用.. 4 2.1 基本常识.. 4 2.2 基本使用.. 6 2.2.1 通过adb 来启动monkey. 6 2.2.2 一些命令选项.. 7 2.2.3 一些测试例子.. 7 2.2.4 执行注意事项.. 9 2.2.5侦…

pandas read_json时ValueError: Expected object or value的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

数据结构 1.2 算法

算法的基本概念 算法的定义 算法是对特定问题求解步骤的一种描述&#xff0c;它是指定的有限序列&#xff0c;其中的每条指令表示一个或多个操作。 例、 算法的特性 &#xff08;5个&#xff09; 1.有穷性 一个算法总在执行有穷步之后结束&#xff0c;且每一步都可以在有穷…

Redis作为缓存,mysql的数据如何与redis进行同步?

Redis作为缓存&#xff0c;mysql的数据如何与redis进行同步&#xff1f; 一定要设置前提&#xff0c;先介绍业务背景 延时双删 双写一致性:当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致 读操作:缓存命中&#xff0c;直接返回;缓存未…

位移贴图和法线贴图的区别

位移贴图和法线贴图都是用于增强模型表面细节和真实感的纹理贴图技术&#xff0c;但是它们之间也存在着差异。 1、什么是位移贴图 位移贴图&#xff1a;位移贴图通过在模型顶点上定义位移值来改变模型表面的形状。该贴图包含了每个像素的高度值信息&#xff0c;使得模型的细节…

Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因

文章目录 前言502和504区别---都是Nginx返回的access.log和error.log介绍SpringBoot结合Nginx实战502 and 504准备工作Nginx配置host配置SpringBoot 502模拟access.logerror.log 504模拟access.logerror.log 500模拟access.logerror.log 总结 前言 刚工作那会&#xff0c;最常…

基于Java Web 的购物网站

本系统采用基于JAVA语言实现、架构模式选择B/S架构&#xff0c;Tomcat7.0及以上作为运行服务器支持&#xff0c;基于JAVA等主要技术和框架设计&#xff0c;idea作为开发环境&#xff0c;数据库采用MYSQL5.7以上。 开发环境&#xff1a; JDK版本&#xff1a;JDK1.8 服务器&…

【前后缀技巧】2022牛客多校3 A

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 这种是典中典中典&#xff0c;对于gcd&#xff0c;背包问题都是一样的处理方式 预处理出前缀lca和后缀lca&#xff0c;枚举哪个消失即可&#xff0c;可以统计方案数 Code&#xff1a; #include &l…