【数一线性代数】007入门

Index

    • 本文稍后补全,推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/140939599
    • 分析实现
      • 总结

本文稍后补全,推荐阅读:https://blog.csdn.net/weixin_60702024/article/details/140939599

用两个栈来实现一个队列, 使用n个元素来完成n次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。保证操作合法,即pop操作执行使队列不为空。

要求: 时间复杂度 O ( n 2 ) O(n^2) O(n2), 空间复杂度 O ( n ) O(n) O(n)


分析实现

通俗来讲栈和队列都是一种操作受限的线性表,通过这种操作上的限制封装好的数据结构,可以安全又便捷地完成一些特定的任务和实现更高级的算法。
二者具体限制如下:

  • 栈(Stack):只能从一侧入栈(push),从同一侧出栈(pop)(多个元素连续入栈时,先进后出)
  • 队列(Queue):只能从一侧入队,从另一侧出队(多个元素连续入栈时,先进先出)
    在这里插入图片描述

从上图可以直观地看出——对于栈,入栈顺序与出栈顺序为逆序(先进后出);而对于队列,入栈顺序与出栈顺序为原序(先进先出)。

类比负负得正这样的思路,出队操作时可将所有stack1内元素出栈先加入到stack2中,然后对stack2进行出栈,这样得到的元素就是原序了。
在这里插入图片描述

#include <iostream>
#include <stack>
using namespace std;
stack<int> stack1;
stack<int> stack2;void enqueue(int x){// 入队时元素暂存于stack1中stack1.push(x);
}
void dequeue(){// 出队时分两种情况 (题中保证出队时队列不为空, 故不再考虑异常情况)// 1. stack2不为空, 直接出栈if (!stack2.empty()){int t = stack2.top();stack2.pop();cout << "出队元素为: " << t << endl;return;}// 2. stack2为空, 将stack1中元素全部转移到stack2中, 再出栈while (!stack1.empty()){int t = stack1.top();stack1.pop();stack2.push(t);}int t = stack2.top();stack2.pop();cout << "出队元素为: " << t << endl;
}

总结

本题从实现角度看,实用性不大(好好的栈为什么要转成队列啊 x_x)。

但通过本题可以更好地理解栈和队列的性质,此外本题所用到的思想还是比较有用的——两次序列反转得到正序序列(类似与用数组逆置实现数组循环左移的思路,明天会介绍一下)。

另附测试所用主函数:

int main(){while (1){cout << "请输入要执行操作(1.入队 2.出队 3.退出): ";int op;cin >> op;if (op == 1){cout << "请输入入队元素: ";int t;cin >> t;// 执行push操作enqueue(t);}else if (op == 2){// 执行pop操作dequeue();}else if (op == 3){cout<<"程序结束"<<endl;break;}else{cout << "输入错误, 请重新输入: ";}}return 0;
}

再附栈和队列的应用举例:
栈:后缀表达式的计算、记录函数调用信息
队列:用户请求时的CPU分配

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

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

相关文章

Redis学习以及SpringBoot集成使用Redis

目录 一、Redis概述 二、Linux下使用Docker安装Redis 三、SpringBoot集成使用Redis 3.1 添加redis依赖 3.2 配置连接redis 3.3 实现序列化 3.4 注入RedisTemplate 3.5 测试 四、Redis数据结构 一、Redis概述 什么是redis&#xff1f; redis 是一个高性能的&#xf…

数据库恢复技术详解【从基础冗余数据到故障恢复的全过程】

在数据库系统中&#xff0c;数据的安全性和一致性至关重要。无论是面对事务故障、系统故障还是介质故障&#xff0c;数据库都需要具备强大的恢复机制来应对这些潜在风险。本文将带领大家详细了解数据库恢复的实现技术&#xff0c;重点介绍如何利用冗余数据、转储和日志文件来实…

Cpp快速入门语法(下)(2)

文章目录 前言一、函数重载概念与使用C为何支持函数重载&#xff1f; 二、引用概念语法特性权限(常引用)使用场景与指针的区别 三、内联函数四、auto关键字(C11)五、基于范围的for循环(C11)六、指针空值nullptr(C11)总结 前言 承前启后&#xff0c;正文开始&#xff01; 一、函…

【BFS专题】— 解决拓扑排序问题

拓扑排序介绍&#xff1a; 1、课程表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 通过Map<Integer, List<Integer>> 来创建邻接图&#xff0c;数组来表示入度然后遍历课程数组&#xff0c;建图然后再拓扑排序&#xff0c;bfs最后在遍历入度数组&…

14届蓝桥杯嵌入式国赛

目录 前言&#xff1a; 1.使用CUbeMX进行基础初始化配置 &#xff08;1&#xff09;选则芯片与基本初始化 &#xff08;2&#xff09;LED配置 &#xff08;3&#xff09;按键配置 &#xff08;4&#xff09;定时器和PWM以及频率 &#xff08;5&#xff09;ADC电压检测 …

计算机网络 --- 初识协议

序言 上一篇文章中 &#xff08;&#x1f449;点击查看&#xff09;&#xff0c;我们简单的了解了怎么寻找目标计算机&#xff0c;需要通过交换机&#xff0c;路由器等设备跨越多个网络来不断的转发我们需要传输的数据&#xff0c;直至到达目标计算机。  那我们设备之间数据是…

JMeter 中使用 Gson 操作请求中的Boby参数

背景 使用org.json.JSONObject 转换&#xff0c;与原Body参数顺序发生变化&#xff0c;原因&#xff1a;JSONObject内部是用Hashmap来存储的&#xff0c;本质上是一个无序的键值对集合&#xff0c;不应依赖字段的添加顺序。 为解决org.json.JSONObject 输出顺序问题&#xff…

鸿蒙读书笔记2:《鸿蒙操作系统设计原理与架构》

2. OS基础平台部件化 &#xff08;1&#xff09;内核层 内核层包括内核部件和HDF驱动框架部件。当前已提供LiteOS-M、 LiteOS-A、Linux和UniProton这4种内核部件&#xff0c;未来还可增加更多类 型的内核部件。LiteOS、Linux内核部件可以按需部署在不同设备之 上&#xff0c;内…

echarts X轴文本太长 formatter自定义文本的显示方式

如果ECharts中X轴的文本太长&#xff0c;可以通过设置axisLabel的rotate属性来旋转标签&#xff0c;或者使用formatter函数来自定义文本的显示方式。另外&#xff0c;可以开启axisLabel的interval属性来控制显示的标签的间隔。 option {tooltip: {},xAxis: {type: category,d…

p14 使用阿里云服务器的docker部署NGINX

拉取NGINX的镜像 这里因为之前已经配置过从阿里云的镜像仓库里面拿镜像所以这里直接就执行docker pull nginx拉取NGINX镜像就OK了 运行NGINX镜像 这里执行docker run -d --name nginx01 -p 3344:80 nginx这里3344是服务器访问的端口80是容器内部的端口&#xff0c;可以看到…

【C++ Primer Plus习题】16.5

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <list> using namespace…

硬件工程师笔试面试——集成电路

目录 17、集成电路 17.1 基础 集成电路实物图 17.1.1 概念 17.1.2 集成电路的发展历程 17.1.3 集成电路的分类 17.1.4 集成电路的制造工艺 17.1.5 集成电路的应用 17.2 相关问题 17.2.1 集成电路的制造工艺中,光刻技术是如何实现的? 17.2.2 在集成电路设计中,如何…

微信电脑版聊天图片DAT格式文件转为普通JPG图片

1-7 本文章主要教你如何恢复微信聊天中的聊天图片&#xff0c;主要应用场景是&#xff0c;当你的微信被封号了&#xff0c;或者无法登录了&#xff0c;会导致微信聊天中的聊天图片没办法再打开&#xff0c;如果是重要的图片&#xff0c;那就有损失了&#xff0c;所以有了本文的…

【无人机设计与控制】四旋翼无人机轨迹跟踪及避障Matlab代码

摘要 本文主要研究了四旋翼无人机在复杂环境中的轨迹跟踪与避障控制策略。通过Matlab/Simulink对四旋翼无人机进行了建模与仿真。系统集成了避障算法&#xff0c;使得无人机在执行任务时能够有效避开障碍物&#xff0c;保证飞行的安全性与稳定性。 理论 无人机飞行控制通常涉…

leetcode-枚举算法

1.两数之和 题目一&#xff1a;两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素…

Java项目实战II基于Spring Boot的宠物商城网站设计与实现

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网…

6--SpringBootWeb案例(详解)

目录 环境搭建 部门管理 查询部门 接口文档 代码 删除部门 接口文档 代码 新增部门 接口文档 代码 已有前端&#xff0c;根据接口文档完成后端功能的开发 成品如下&#xff1a; 环境搭建 1. 准备数据库表 (dept 、 emp) -- 部门管理 create table dept( id int un…

快速入门Vue

Vue是什么 Vue.js&#xff08;通常简称为Vue&#xff09;是一个开源的JavaScript框架&#xff0c;用于构建用户界面和单页应用程序&#xff08;SPA&#xff09;。它由尤雨溪&#xff08;Evan You&#xff09;在2014年开发并发布。Vue的核心库只关注视图层&#xff0c;易于上手…

python实现多个pdf文件合并

打印发票时&#xff0c;需要将pdf合并成一个&#xff0c;单页两张打印。网上一些pdf合并逐渐收费&#xff0c;这玩意儿都能收费&#xff1f;自己写一个脚本使用。 实现代码&#xff1a; 输入pdf文件夹路径data_dir&#xff0c;统计目录下的“合并后的PDF”文件夹下&#xff0c;…