剑指offer C ++双栈实现队列

news/2024/12/2 14:57:41/

1. 基础


队列:先进先出,即插入数据在队尾进行,删除数据在队头进行;

栈:后进先出,即插入与删除数据均在栈顶进行。

2. 思路
两个栈实现一个队列的思想:用pushStack栈作为push数据的栈,用popStack栈作为pop数据的栈。

只要是对队列进行push操作,就将数据push入pushStack栈中。
要实现队列的pop操作,有二点原则,如果popStack为空的话那么我们就将pushStack所有的元素放到popStack中,然后取popStack栈顶元素就是队列的队头;如果popStack不为空的话,我们就直接获取popStack的栈顶元素。
对于top操作来说和pop操作类似,只是最后一步不用pop了。

3. 代码

// ReverseList.cpp : 定义控制台应用程序的入口点。
//#include <iostream>
#include <Stack>
using namespace std;class CQueue
{
public:CQueue() {}void appendTail(int value) {Sin.push(value);}int deleteHead() {if (Sout.empty()) {while (!Sin.empty()) {Sout.push(Sin.top());Sin.pop();}}if (!Sout.empty()) {int res = Sout.top();Sout.pop();return res;}else {return -1;}}stack<int> Sin, Sout;
};int main(int argc, char* argv[])
{CQueue test;test.appendTail(1);test.appendTail(2);test.appendTail(3);test.appendTail(4);test.appendTail(5);test.appendTail(6);test.appendTail(7);int result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;result = test.deleteHead();std::cout << "result:" << result << std::endl;return 0;
}


http://www.ppmy.cn/news/1381041.html

相关文章

ImportError: libstdc++.so.6: version `GLIBCXX_3.4.29‘ not found

报错&#xff1a; ImportError: /public/software/compiler/gcc/gcc-9.3.0/lib64/libstdc.so.6: version GLIBCXX_3.4.29 not found (required by /public/home/python3.8/site-packages/pandas/_libs/window/aggregations.cpython-38-x86_64-linux-gnu.so)这个ImportError表…

细粒度IP定位参文2(Corr-SLG):A street-level IP geolocation method (2021年)

[2]S. Ding, F. Zhao, and X. Luo, “A street-level IP geolocation method based on delay-distance correlation and multilayered common routers,” Secur. Commun. Netw., vol. 2021, no. 1, pp. 1–10, 2021. 智能设备的地理位置可以帮助提供多媒体内容提供商和5G网络中…

Linux认识与学习BASH

Linux认识与学习BASH 认识BASH这个Shellshell是什么系统的合法shell与/etc/shells功能Bash Shell的功能查询命令是否为Bash shell 的内置命令(type)命令的执行与快速编辑按钮 shell的变量功能什么是变量&#xff1f;变量的使用与设置&#xff1a;echo、变量设置规则、unset环境…

触发器

触发器的用途1 利用触发器检查输入数据的合理性 利用触发器维护冗余数据查看触发器 一、为什么使用触发器 触发器&#xff08;TRIGGER&#xff09;是MySQL的与表的insert&#xff0c;delete&#xff0c;update语句相关的数据库对象之一&#xff0c;当表上出现特定事件时&#…

FFmpeg开发笔记(十)Linux环境给FFmpeg集成vorbis和amr

FFmpeg内置了aac音频格式&#xff0c;在《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“5.2.2 Linux环境集成mp3lame”又介绍了如何给FFmpeg集成mp3格式&#xff0c;常见的音频文件除了这两种之外&#xff0c;还有ogg和amr两种格式也较常用。其中ogg格式的编解码…

高效的ElasticSearch Java API - my-elasticsearch-starter

ES Java Api有很多种&#xff0c;本文主要是基于Spring Boot进行封装的&#xff0c;为什么选择Spring Boot&#xff0c;可以看往期文章 Elasticsearch入门必读指南&#xff1a;到底选择哪个ES版本更合适 。 Spring Boot现在也是Java生态中主流的开发框架使用最广泛&#xff0c;…

配送平台从设计到实践的经验总结

配送平台在现代物流领域扮演着重要的角色&#xff0c;它通过协调货物的运输和交付&#xff0c;为商家和消费者提供了高效、可靠的配送服务。本篇博客文章将深入探讨配送平台从设计到实践的全过程&#xff0c;并分享关键的经验和最佳实践。 ### 1. 业务需求与目标 在设计配送平…

Linux异步通知实验:应用程序对异步通知的处理

一. 简介 前面文章学习了 应用程序对异步通知的处理方法&#xff0c;另一篇文章实现了Linux驱动对异步通知的处理&#xff1a; Linux应用程序对异步通知的处理-CSDN博客 Linux异步通知实验&#xff1a;驱动中异步通知的处理-CSDN博客 本文继续Linux异步通知实验&#xff0c…