力扣T232:用栈来实现队列

发布时间:2026/9/29 11:14:41

力扣T232:用栈来实现队列 题目 描述思路分析栈是先入后出队列是先入先出故需要用两个栈去实现队列step1将1234随便入 栈中step2出队时先出去的是1按顺序将非空栈的元素入栈到空栈再在stack2中出栈如果再次执行出队操作就让stack2再出栈step3再入队5不可以直接再次入队到stack2中不然5就会变为队头所以入队在stack1中若要取队头元素取stack2即可综上所述只要入队都在stack1中出队都在stack2中故可定义一个栈stackpush用于入队stackpop用于出队代码实现拿过来实现栈的函数void StackInit(ST* ps, SLDataType x) { ps-arr NULL; ps-top ps-capacity 0; } void StackPush(ST* ps, SLDataType x) { assert(ps); if (ps-top ps-capacity) { int newcapacity ps-capacity 0 ? 4 : 2 * ps-capacity; SLDataType* tmp (SLDataType*)realloc(ps-arr, newcapacity * sizeof(SLDataType)); if (tmp NULL) { perror(realloc fail!); exit(1); } ps-arr tmp; ps-capacity newcapacity; }//判断当前的栈是否满容量或者无容量 ps-arr[ps-top] x; } bool STEmpty(ST* ps) { assert(ps); return ps-top 0; } //如果为空那么返回ture //如果不为空那么返回false void StackPop(ST* ps) { assert(!STEmpty(ps)); --ps-top; } SLDataType StackTop(ST* ps) { assert(!STEmpty(ps)); return ps-arr[ps-top - 1]; } void StackDestroy(ST* ps) { if (ps-arr) { free(ps-arr); ps-arr NULL; } ps-top ps-capacity 0; }1.定义结构体typedef int SLDataType; typedef struct Stack { SLDataType* arr; int top; int capacity; }ST; typedef struct MyQueue { ST stackpush; ST stackpop; }MyQueue;2.初始化创建一个结构体把该结构体指针返回用malloc创建一个MyQueue大小的内存空间而后用两个栈直接调用初始化函数MyQueue* myqueueCreat() { MyQueue* pst (MyQueue*)malloc(sizeof(MyQueue)); if (pst NULL) { perror(fail); exit(-1); } StackInit(pst-stackpush,0); StackInit(pst-stackpop, 0); return pst; }3.入队直接入在stackpushvoid myQueuePush(MyQueue* obj, SLDataType x) { StackPush(obj-stackpush, x); }4.出队先要判断stackpop是否为空栈如果为空栈则需要将stackpush中的元素全部挪到stackpush中再进行出队SLDataType myQueuePop(MyQueue* obj) { if (STEmpty(obj-stackpop) ){ while (StackSize(obj-stackpush) 0) { StackPush(obj-stackpop, StackTop(obj-stackpush)); StackPop(obj-stackpush); } }先取出stackpush栈顶元素入在stackpop中删除stackpush的栈顶元素直到stackpush的有效元素变为0挪移元素的过程结束出队操作用top接收stackpop的栈顶元素因为要返回删除值之后直接出栈即可SLDataType top StackTop(obj-stackpop); StackPop(obj-stackpop); return top;完整代码实现SLDataType myQueuePop(MyQueue* obj) { if (STEmpty(obj-stackpop) ){ while (StackSize(obj-stackpush) 0) { StackPush(obj-stackpop, StackTop(obj-stackpush)); StackPop(obj-stackpush); } } SLDataType top StackTop(obj-stackpop); StackPop(obj-stackpop); return top; }5.取队头元素把stackpop的栈顶元素返回即可若stackpop为空栈仍要挪移元素SLDataType myQueuePeek(MyQueue* obj) { if (STEmpty(obj-stackpop)) { while (StackSize(obj-stackpop)0) { StackPush(obj-stackpop, StackTop(obj-stackpush)); StackPop(obj-stackpop); } } return StackTop(obj-stackpop); }6.判空两个栈都为空即为空队bool myQueueEmpty(MyQueue* obj) { return STEmpty(obj-stackpush) STEmpty(obj-stackpop); }7.销毁将两个栈都销毁而后释放指针obj指向的空间再置为NULL即可void myQueueFree(MyQueue* obj) { StackDestroy(obj-stackpush); StackDestroy(obj-stackpop); free(obj); obj NULL; }
延伸阅读

更多相关文章

2026/9/29 11:14:41

AI什么都能教,为什么家庭教育反而更重要了?

在学校门口,一位妈妈对老师说:“老师,孩子就交给你了”这句话,我们说了几十年,说得那么自然——好像教育,天然就是学校的事。 但AI时代,这个假设正在松动。孩子回家问AI,十秒钟讲得比…

2026/9/29 11:14:41

杆状病毒-昆虫细胞表达系统:重组蛋白生产的黄金平台

杆状病毒-昆虫细胞表达系统(Baculovirus–Insect Cell Expression System,简称 BEVS)是一种成熟的真核重组蛋白表达平台。自20世纪80年代 Smith 等人首次将外源基因导入杆状病毒并实现高水平表达以来,该系统逐渐发展成为生物制药和…

2026/9/29 11:14:41

EtherCAT与FSoE硬核解析:确定性通信与功能安全实现原理

1. 这不是普通工业以太网——EtherCAT与FSoE到底在解决什么问题?你手头正调试一台汇川H5U控制器,接了24个660伺服轴,通信一跑就报错:..\ethercat\objdef.c(890): warning: #767-d: conversion from pointer to small。你查遍论坛&…

2026/9/29 13:49:53

模型优化器实战:从Adam显存优化到INT8量化部署全解析

1. 模型优化器到底在解决什么问题第一次接触 Model-Optimizer 这个概念,是在一个推荐系统的排序模型上。当时线上推理延迟卡在 85ms 下不去,GPU 利用率却只有 30% 出头,团队里几个人盯着 Profiler 数据看了两天,最后发现问题不在模…

2026/9/29 13:49:53

指纹芯片选型避坑指南:从场景定义到量产落地的关键维度

指纹芯片选型这件事,看起来是纯粹的“参数对比”:分辨率多少、识别速度多少、功耗多少,价格一张表拉出来,似乎就能拍板。但真正在终端厂商这边干过的人都知道,一个不小心,选型就能变成项目事故的开端——屏…

2026/9/29 13:49:53

OpenHarmony I2C驱动开发实战:从HDF/HDI分层到排障全攻略

最近在给一块 RK3568 开发板做 OpenHarmony 外设适配,翻车次数最多的不是 USB 也不是 SPI,而是 I2C 总线。传感器、触摸屏、EEPROM、音频编解码器……几乎每个板子都挂着 I2C 设备。明明协议简单到只有两根线,真到了 OpenHarmony 环境里&…

2026/9/29 13:44:53

人工智能模型与算法练习题精讲:从读题到验证的完整解题路径

简介:这份PDF文档是《人工智能:模型与算法》课程的配套练习题集,面向正在修读人工智能导论、机器学习基础等课程的高校学生,以及需要巩固理论概念的备考者。内容覆盖人工智能概述、可计算性理论、逻辑斯蒂回归、潜在语义分析、线性…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/28 6:05:15

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 0:04:04

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:04:04

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑