【数据结构OJ题】用栈实现队列

原题链接:https://leetcode.cn/problems/implement-queue-using-stacks/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

 

2. 思路分析

用两个栈实现,一个栈进行入队操作,另一个栈进行出队操作。
出队操作: 当出队的栈不为空时,直接进行出栈操作;如果为空,需要把入队的栈元素全部导入到出队的栈,然后再进行出栈操作

3. 代码实现

typedef int STDataType;
#define INIT_CAPACITY 4
typedef struct Stack
{STDataType* a;int top;  //栈顶int capacity;  //容量
}ST;//初始化栈
void STInit(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空
bool STEmpty(ST* ps);
//销毁栈
void STDestroy(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? INIT_CAPACITY : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc failed");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);//空assert(ps->a > 0);--ps->top;
}STDataType STTop(ST* ps)
{assert(ps);//空assert(ps->a > 0);return ps->a[ps->top - 1];
}int STSize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}void STDestroy(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}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 myQueuePeek(MyQueue* obj) {if(STEmpty(&obj->popst)){//捯数据while(!STEmpty(&obj->pushst)){STPush(&obj->popst,STTop(&obj->pushst));STPop(&obj->pushst);}}return STTop(&obj->popst);
}int myQueuePop(MyQueue* obj) {int front=myQueuePeek(obj);STPop(&obj->popst);return front;
}bool myQueueEmpty(MyQueue* obj) {return STEmpty(&obj->popst)&&STEmpty(&obj->pushst);
}void myQueueFree(MyQueue* obj) {STDestroy(&obj->popst);STDestroy(&obj->pushst);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);
*/

 

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

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

相关文章

Jmeter对websocket进行测试

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar下载 公司使用websocket比较奇怪,需要带认证信息进行长连接,通过websocket插件是请求失败,如下图,后面通过代码实现随再打包jar包完成websocket测试 本地实现代码如下: pa…

C++学习笔记总结练习:C++完美转发

完美转发 1 概念 首先解释一下什么是完美转发&#xff0c;它指的是函数模板可以将自己的参数“完美”地转发给内部调用的其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。 template<typename T> void fu…

前馈神经网络解密:深入理解人工智能的基石

目录 一、前馈神经网络概述什么是前馈神经网络前馈神经网络的工作原理应用场景及优缺点 二、前馈神经网络的基本结构输入层、隐藏层和输出层激活函数的选择与作用网络权重和偏置 三、前馈神经网络的训练方法损失函数与优化算法反向传播算法详解避免过拟合的策略 四、使用Python…

【HCIP】08.ISIS中间系统

链路状态协议&#xff0c;传递LSA信息ISIS基于数据链路层封装在OSI时&#xff0c;也有自己的网络层地址和自己的路由协议&#xff0c;即ISIS。之前的ISIS支持OSI的网络层地址&#xff0c;是为OSI中的CLNP&#xff08;无连接网络协议&#xff09;网络设计的路由协议&#xff0c;…

情人节特别定制:多种语言编写动态爱心网页(附完整代码)

写在前面案例1&#xff1a;HTML Three.js库案例2&#xff1a;HTML CSS JavaScript案例3&#xff1a;Python环境 Flask框架结语 写在前面 随着七夕节的临近&#xff0c;许多人都在寻找独特而令人难忘的方式来表达爱意。在这个数字时代&#xff0c;结合创意和技术&#xff0…

Ubuntu22.04编译Nginx源码

执行如下命令 # ./configure --sbin-path/usr/local/nginx/nginx --conf-path/usr/local/nginx/nginx.conf --pid-path/usr/local/nginx/nginx.pid输出结果&#xff0c;出现如下&#xff1a; Configuration summary using system PCRE2 library OpenSSL library is not used …

计算机视觉入门 3)最大池化

目录 一、最大池化最大池化进行压缩平移不变性 二、代码示例步骤2&#xff1a;图像读取转换步骤2&#xff1a;Filter & ReLU步骤3&#xff1a;Pool 一、最大池化 最大池化进行压缩 在Keras中&#xff0c;通过一个 MaxPool2D 层&#xff0c;将压缩步骤添加到之前的模型中&…

电脑找不到MSVCR120.dll怎么办?MSVCR120.dll是什么?

在我们的日常生活和工作中&#xff0c;电脑故障是难以避免的问题。而MSVCR120.dll文件是Windows系统中的一个重要组件&#xff0c;如果出现损坏或丢失&#xff0c;可能会导致程序无法正常运行&#xff0c;这个问题可能是由于系统文件损坏、病毒感染等原因导致的。因此&#xff…

Day17-Node后端身份认证-JWT

Day17-Node后端身份验证 一 密码加密 1 MD5加密 创建MD5.js//node提供了一个内置模块crypto用于密码加密 const crypto = require("crypto")module.exports.getMd5 = function(password){const md5

记录一次wordpress项目的发布过程

背景&#xff1a;发布一套已完成的代码到线上&#xff0c;有完整的代码包&#xff0c;sql文件&#xff0c;环境是linux 宝塔。无wordpress相关经验。 过程&#xff1a;正常的发布代码 问题1&#xff1a;访问自己的域名后跳转到别的域名。 解决&#xff1a; 修改数据表wp_optio…

Apipost中自定义接口字段如何配置

Apipost项目设置中可以配置接口文档中的自定义接口字段&#xff0c;创建状态码字典。分享分档时会展示到文档页面 状态码字典 在状态码字典中可以自定义状态码即其含义 自定义的状态码会在分享的API文档中展示 接口属性 接口属性中可以自定义接口和接口文档展示字段&#xf…

MySQL索引

目录 一、什么是索引 二、索引的原理 三、优缺点 四、分类 1、聚簇索引--顺序IO 2、非聚簇索引--随机IO 五、索引的设计原则 六、创建索引 1、创建表时创建索引 2、在已经存在的表上创建索引 3、使用ALTER TABLE语句来创建索引 1)普通索引 2&#xff09;唯一性索引 …

2308C++协程流程4

参考 #include <协程> #include "简异中.cpp" //用来中文定义的.构 任务{构 承诺型{任务 取中(){中{协柄<承诺型>::从承诺(*本)};}从不挂起 初挂起(){中{};}从不挂起 终挂起()无异{中{};}空 中空(){ 输出<<"取协程结果\n"; }//5空 对异…

蓝奥声智能工业安全用电监测与智慧能源解决方案

能源管理变得越来越重要。如今&#xff0c;能源成本已成为国内预算的核心因素&#xff0c;因此用电监控对大多数现代企业来说都很重要。许多企业在日常能源消耗监控中面临着一些挑战&#xff0c;因为它们的规模庞大&#xff0c;基础设施多样化&#xff0c;灵活性低&#xff0c;…

前端框架学习-React(一)

React 应用程序是由组件组成的。 react 程序是用的jsx语法&#xff0c;使用这种语法的代码需要由babel进行解析&#xff0c;解析成js代码。 jsx语法&#xff1a; 只能返回一个根元素 所有的标签都必须闭合&#xff08;自闭和或使用一对标签的方式闭合&#xff09; 使用驼峰式…

Java之包,权限修饰符,final关键字详解

包 2.1 包 包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术&#xff0c;不同的技术类放在不同的包下&#xff0c;方便管理和维护。 在IDEA项目中&#xff0c;建包的操作如下&#xff1a; 包名的命名规范&#xff1a; 路径名.路径名.xxx.xxx // 例如&#xff…

sql数据导出到excel

一、打开Navicat Premium 12 二、导出

R语言处理缺失数据(1)-mice

#清空 rm(listls()) gc()###生成模拟数据### #生成100个随机数 library(magrittr) set.seed(1) asd<-rnorm(100, mean 60, sd 10) %>% round #平均60&#xff0c;标准差10 #将10个数随机替换为NA NA_positions <- sample(1:100, 10) asd[NA_positions] <- NA #转…

ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

大模型之BloomLLAMA----SFT(模型微调)

0. 简介 随着chatgpt的爆火&#xff0c;最近也有很多大模型在不断地出现&#xff0c;比如说Bloom系列以及以LLAMA为基础的ziya和baichuan。这些模型相较于chatglm来说&#xff0c;更加具有发展前景&#xff0c;因为其是完全可商用&#xff0c;并可以不断迭代更新的。最近作者在…