leetcode:用栈实现队列(先进先出)
题目描述
题目链接:232. 用栈实现队列 - 力扣(LeetCode)

题目分析
我们先把之前写的数组栈的实现代码搬过来
用栈实现队列最主要的是实现队列先进先出的特点,而栈的特点是后进先出,那么我们可以用两个栈来实现:
- 一个pushst用来入队列
- 一个popst用来出队列
具体的接口有下面几个:
初始化
malloc一块空间来存两个栈,同时初始化这两个栈


入队列
入数据都入到pushst

出队列
出数据前先需要导数据:当popst为空且pushst不为空的时候,pushst的top数据依次push到popst中,然后返回pop的top数据,然后pop掉top数据;如果pop不为空,则直接返回poptop并pop

返回队头数据

判空
两个栈同时为空则为空

销毁
销毁还是依次销毁

代码示例
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;//标识栈顶位置int capacity;
}ST;
//初始化
void STInit(ST* pst);
//销毁
void STDestroy(ST* pst);
//入栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);
//返回栈顶元素
STDataType STTop(ST* pst);
//判空
bool STEmpty(ST* pst);
//栈的元素个数
int STSize(ST* pst);//初始化
void STInit(ST* pst)
{assert(pst);pst->a = NULL;pst->capacity = 0;pst->top = 0;
}
//销毁
void STDestroy(ST* pst)
{assert(pst);free(pst->a);pst->a = NULL;pst->top = pst->capacity = 0;
}
//入栈
void STPush(ST* pst, STDataType x)
{assert(pst);if (pst->top == pst->capacity){int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;STDataType* tmp = (STDataType * )realloc(pst->a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newcapacity;}pst->a[pst->top] = x;pst->top++;
}
//出栈
void STPop(ST* pst)
{assert(pst);assert(pst->top > 0);pst->top--;
}
//返回栈顶元素
STDataType STTop(ST* pst)
{assert(pst);assert(pst->top > 0);return pst -> a[pst->top - 1];
}
//判空
bool STEmpty(ST* pst)
{assert(pst);/*if (pst->top == 0){return true;}else{return false;}*/return pst->top == 0;
}
//栈的元素个数
int STSize(ST* pst)
{assert(pst);return pst->top;
}typedef struct {ST pushst;ST popst;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* obj=(MyQueue*)malloc(sizeof(MyQueue));STInit(&(obj->pushst));STInit(&(obj->popst));return obj;
}void myQueuePush(MyQueue* obj, int x) {STPush(&(obj->pushst),x);
}int myQueuePop(MyQueue* obj) {int front=myQueuePeek(obj);STPop(&(obj->popst));return front;
}int myQueuePeek(MyQueue* obj) {if(STEmpty(&(obj->popst))){while(!STEmpty(&(obj->pushst))){STPush(&(obj->popst),STTop(&(obj->pushst))); STPop(&(obj->pushst));}}return STTop(&(obj->popst));
}bool myQueueEmpty(MyQueue* obj) {return STEmpty(&(obj->pushst))&&STEmpty(&(obj->popst));
}void myQueueFree(MyQueue* obj) {STDestroy(&(obj->pushst));STDestroy(&(obj->popst));free(obj);
}/*** Your MyQueue struct will be instantiated and called as such:* MyQueue* obj = myQueueCreate();* myQueuePush(obj, x);* int param_2 = myQueuePop(obj);* int param_3 = myQueuePeek(obj);* bool param_4 = myQueueEmpty(obj);* myQueueFree(obj);
*/

相关文章:
leetcode:用栈实现队列(先进先出)
题目描述 题目链接:232. 用栈实现队列 - 力扣(LeetCode) 题目分析 我们先把之前写的数组栈的实现代码搬过来 用栈实现队列最主要的是实现队列先进先出的特点,而栈的特点是后进先出,那么我们可以用两个栈来实现&…...
<JavaEE> 什么是进程控制块(PCB Process Control Block)?
目录 一、进程控制块的概念 二、进程控制块的重要属性 2.1 唯一身份标识(PID) 2.2 内存指针 2.3 文件描述符表 2.4 状态 2.5 优先级 2.6 记账信息 2.7 上下文 一、进程控制块的概念 进程控制块(Process Control Block, PCBÿ…...
简历上的工作经历怎么写
通过了简历筛选,后续的面试官会仔细阅读你的简历内容。他们在找什么呢?他们希望搞清楚你在某一段经历中具体干了什么,并且判断你的能力具体达到了什么水平。 简历在线制作下载:百度幻主简历 面试官喜欢具体的经历 越具体&#x…...
数值分析总结
数值分析总结思维导图 Docs 相关代码的使用和注释 列主元Gauss消元法 %%列主元高斯消元法 function xGauss_lzy(A,b)%A为方程组系数矩阵,b为方程组的右侧向量,x为方程组的解 [n,m]size(A);%%得到矩阵A的行和列的宽度 nblength(b);%%方程组右侧向量的长…...
osg demo汇总
1.example_osganimate 演示了路径动画的使用(AnimationPath、AnimationPathCallback),路径动画回调能够做用在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四种类型的节点上。 演示了osgSim::OverlayNode的使用node 2…...
Leetcode.1590 使数组和能被 P 整除
题目链接 Leetcode.1590 使数组和能被 P 整除 rating : 2039 题目描述 给你一个正整数数组 n u m s nums nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p p p 整除。 不允许 将整个数组都移除。 请你返回你需…...
uniappios请求打开麦克风 uniapp发起请求
第一种 ajax请求方式 uni.request(OBJECT) 参数名类型必填默认值说明平台差异说明urlString是开发者服务器接口地址dataObject/String/ArrayBuffer否请求的参数App(自定义组件编译模式)不支持ArrayBuffer类型headerObject否设置请求的 header,header 中不能设置 Referer。…...
Java 注解在 Android 中的使用场景
Java 元注解有 5 种,常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别,有三种: RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中,并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…...
【开源】基于Vue和SpringBoot的数字化社区网格管理系统
项目编号: S 042 ,文末获取源码。 \color{red}{项目编号:S042,文末获取源码。} 项目编号:S042,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…...
Go语言简要介绍
Golang是一种编程语言,也称为Go或者Go语言。它是由Google开发的一种编译型、静态类型的语言。Golang的目标是提高程序开发的效率,同时保证程序的性能和安全。 Golang在语法结构上类似于C语言,但是通过引入新的概念和语法,比如gor…...
STM32H7 RTC及PC13问题
程序加了RTC时间过后,发现原本的RTC定时唤醒中断也不好使了,开始以为是PC13入侵检测引脚问题,经过测试,发现了一个大问题,当使用 HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BCD); 函数后,RTC变得…...
AntDB“超融合+流式实时数仓”——颠覆50年未变的数据库内核
流式处理引擎,颠覆50年未变的数据库内核 流式处理的概念 2001年9月11日,美国世贸大楼被袭击,美国国防部第一次将“主动预警”纳入国防的宏观战略规划。而IBM作为当时全球最大的IT公司,承担了大量基础支撑软件研发的任务。其中200…...
TZOJ 1376 母牛的故事(递推和递归)
答案1(递推): #include<stdio.h> int main() {int n0,i0;int a[55] { 0,1,2,3,4 }; //数组下标就相当于过了几年,以第四年母牛生出的第一只小母牛成年为周期,初始化前四年的值while (scanf("%d", …...
五种多目标优化算法(MOPSO、MOAHA、NSGA2、NSGA3、MOGWO)求解微电网多目标优化调度(MATLAB)
一、多目标优化算法简介 (1)多目标粒子群优化算法MOPSO 多目标应用:基于多目标粒子群优化算法MOPSO求解微电网多目标优化调度(MATLAB代码)-CSDN博客 (2)多目标人工蜂鸟算法(MOAHA…...
01_原理-事件循环
01_原理-事件循环 文章目录 01_原理-事件循环一、浏览器的进程模型①:何为进程?②:何为线程?③:浏览器有哪些进程和线程? 二、渲染主线程是如何工作的?三、若干解释①:何为异步&…...
Redis的性能,哨兵模式,集群,
Redis的性能管理; redis的数据保存在内存中 redis-cli info memory redis内存使用info memory命令参数解析 used_memory:236026888 由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)…...
如何选择共模噪声滤波器
在当前电子产品中,绝大多数的高速信号都使用地差分对结构。 差分结构有一个好处就是可以降低外界对信号的干扰,但是由于设计的原因,在传输结构上还会受到共模噪声的影响。 共模噪声滤波器就可以用于抑制不必要的共模噪声,而不会对…...
Python与设计模式--模板模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
LoadRunner自动化测试工具的应用
目录 第一部分:Loadrunner的简介 1.1 安装注意事项 1.2 协议的选择或者 VUSER 类型的选取 1.3 LR 的基本原理 1.4 测试脚本录制/分配所遵循的几个原则 第二部分:录制脚本 2.1 录制脚本前需要理解的几个基本概念 2.1.1 事务(Transaction) 2.1.2 集合点(Rendezvous) 2.1…...
工厂模式是一种创建对象的设计模式,使用工厂类来创建对象,而不是直接使用 new 关键字来创建对象。
文章目录 示例代码virtual std::string Operation() const = 0;如何理解std::string Operation() const override {这句如何理解?Factory 类包含一个静态方法 CreateProduct,它根据传入的类型参数来创建并返回具体的产品实例。这句话理解?std::unique_ptr<Product> pr…...
免费开源的质谱分析革新工具:从数据到发现的完整路径
免费开源的质谱分析革新工具:从数据到发现的完整路径 【免费下载链接】OpenMS The codebase of the OpenMS project 项目地址: https://gitcode.com/gh_mirrors/op/OpenMS OpenMS作为一款免费开源的质谱数据分析平台,为科研人员提供了从原始质谱数…...
Android 11+ 适配实战:破解TextToSpeech ‘speak failed: not bound to TTS engine‘ 的权限与引擎绑定之谜
1. 当语音突然沉默:Android 11的TTS报错之谜 那天我正在调试一个天气预报应用,当代码执行到语音播报"今天晴转多云"时,控制台突然抛出红字警告:speak failed: not bound to TTS engine。这个错误在Android 10及以下版本…...
LangFlow问题解决:常见部署错误与连接Ollama配置详解
LangFlow问题解决:常见部署错误与连接Ollama配置详解 如果你正在尝试用LangFlow搭建自己的AI应用工作流,但卡在了部署和配置环节,这篇文章就是为你准备的。LangFlow作为一款低代码的可视化工具,理论上能让构建LangChain流水线变得…...
《QGIS快速入门与应用基础》253:元素锁定(防止误操作)
作者:翰墨之道,毕业于国际知名大学空间信息与计算机专业,获硕士学位,现任国内时空智能领域资深专家、CSDN知名技术博主。多年来深耕地理信息与时空智能核心技术研发,精通 QGIS、GrassGIS、OSG、OsgEarth、UE、Cesium、OpenLayers、Leaflet、MapBox 等主流工具与框架,兼具…...
技术难题攻克指南:Retrieval-based-Voice-Conversion-WebUI常见问题全景解析
技术难题攻克指南:Retrieval-based-Voice-Conversion-WebUI常见问题全景解析 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieva…...
【毕业设计】微信小程序文创商城-从真实支付到模拟支付的实现与优化
1. 微信小程序文创商城支付功能概述 做毕业设计选择微信小程序文创商城是个不错的选题,尤其是支付功能的实现,既能锻炼技术能力,又很实用。我去年指导过几个类似的项目,发现学生们最头疼的就是支付模块。真实支付需要营业执照和公…...
Flutter 3.24.x项目升级AGP 8.6适配Android 15,我踩过的坑和完整配置清单
Flutter 3.24.x项目升级AGP 8.6适配Android 15实战指南 上周在给公司核心项目做技术栈升级时,我花了整整三天时间才把Flutter 3.24.x项目成功迁移到AGP 8.6并适配Android 15(API 35)。这过程中踩过的坑比预想中多得多——从Gradle版本冲突到n…...
PhotoMaker行业应用报告:广告、影视与游戏领域的案例分析
PhotoMaker行业应用报告:广告、影视与游戏领域的案例分析 【免费下载链接】PhotoMaker 项目地址: https://ai.gitcode.com/hf_mirrors/TencentARC/PhotoMaker PhotoMaker是一款通过堆叠ID嵌入技术实现逼真人物照片定制的AI工具,能够帮助创作者快…...
如何通过LeaguePrank实现游戏界面个性化:打造独特的英雄联盟视觉体验
如何通过LeaguePrank实现游戏界面个性化:打造独特的英雄联盟视觉体验 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款专注于英雄联盟客户端界面自定义的开源工具,它通过安全的官方LCU…...
Qwen3-VL-30B效果实测:识别复杂图表毫无压力,回答精准又详细
Qwen3-VL-30B效果实测:识别复杂图表毫无压力,回答精准又详细 1. 开篇:当AI真正"看懂"了世界 想象一下这样的场景:你随手拍下一张满是数据和曲线的科研论文图表,AI不仅能准确识别出每个坐标轴的含义&#x…...
