力扣例题(用栈实现队列)

目录

链接. - 力扣(LeetCode)

描述

思路

push

pop

peek

empty

代码


链接
. - 力扣(LeetCode)

描述

思路

push

例如我们将10个元素放入栈中,假设最左边为栈顶,最右侧为栈底

则为10,9,8,7,6,5,4,3,2,1

pop

从队列的开头移除并返回元素,队列的开头为最右侧的1

我们先将前面的元素放入空栈中

空栈中元素顺序为2,3,4,5,6,7,8,9,10

我们发现元素顺序反了,说明等下要反转回来

此时原栈中只剩最后一个元素1,我们将1拷贝下来并踢出去即可

此时原栈成为空栈,我们将元素全部放回去即可,原栈顺序改为10,9,8,7,6,5,4,3,2

通过反转我们就顺利的将队列中的第一个元素1给删除了

peek

返回队列开头元素与pop思路基本一致,唯一的不同点为原栈中不需要再将元素1删去,拷贝后直接将元素全部取回来即可。

empty

两个栈均不为空指针即可

代码

typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 栈顶int _capacity;  // 容量 
}Stack;
// 初始化栈 
void StackInit(Stack* ps);
// 入栈 
void StackPush(Stack* ps, STDataType data);
// 出栈 
void StackPop(Stack* ps);
// 获取栈顶元素 
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps);
// 销毁栈 
void StackDestroy(Stack* ps);
void StackInit(Stack* ps) {ps->_a = NULL;ps->_capacity = 0;ps->_top = -1;
}
void StackPush(Stack* ps, STDataType data) {if (ps->_capacity == ps->_top + 1) {int newcapacity = ps->_capacity == 0 ? 4 : 2 * ps->_capacity;STDataType* tmp = (STDataType*)realloc(ps->_a, newcapacity * sizeof(STDataType));if (tmp == NULL) {perror("realloc error");return;}ps->_a = tmp;ps->_capacity = newcapacity;}ps->_top++;ps->_a[ps->_top] = data;
}
void StackPop(Stack* ps) {if (ps->_top == -1) {return;}ps->_top--;
}
STDataType StackTop(Stack* ps) {return ps->_a[ps->_top];
}
int StackSize(Stack* ps) {return ps->_top + 1;
}
int StackEmpty(Stack* ps) {if (ps->_top == -1)return 1;return 0;
}
void StackDestroy(Stack* ps) {ps->_capacity = 0;ps->_top = -1;free(ps->_a);ps->_a = NULL;
}
typedef struct {Stack s1;Stack s2;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* mn = (MyQueue*)malloc(sizeof(MyQueue));StackInit(&(mn->s1));StackInit(&(mn->s2));return mn;
}void myQueuePush(MyQueue* obj, int x) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}StackPush(nonempty, x);
}int myQueuePop(MyQueue* obj) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);int a;if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}while (StackSize(nonempty) != 1) {StackPush(empty, StackTop(nonempty));StackPop(nonempty);}a = StackTop(nonempty);StackPop(nonempty);while (StackSize(empty) != 0) {StackPush(nonempty, StackTop(empty));StackPop(empty);}return a;
}int myQueuePeek(MyQueue* obj) {Stack* nonempty = &(obj->s1), * empty = &(obj->s2);if (StackEmpty(nonempty)) {nonempty = &(obj->s2);empty = &(obj->s1);}while (StackSize(nonempty) != 1) {StackPush(empty, StackTop(nonempty));StackPop(nonempty);}int a = StackTop(nonempty);while (StackSize(empty) != 0) {StackPush(nonempty, StackTop(empty));StackPop(empty);}return a;
}bool myQueueEmpty(MyQueue* obj) {if (StackEmpty(&(obj->s2)) && StackEmpty(&(obj->s1)))return true;return false;
}void myQueueFree(MyQueue* obj) {StackDestroy(&(obj->s1));StackDestroy(&(obj->s2));free(obj);
}

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

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

相关文章

嵌入式 - GPIO编程简介

An Introduction to GPIO Programming By Jeff Tranter Wednesday, June 12, 2019 编者按:本 2019 年博客系列是 ICS 最受欢迎的系列之一,现已更新(2022 年 12 月),以确保内容仍然准确、相关和有用。 本博客是 Integr…

实体类和Entity Class之间有什么联系

实体类(Entity Class)和Entity Class在本质上是相同的,它们都是面向对象编程(OOP)中用于表示具有业务逻辑意义的实体的类。 具体来说,实体类通常被设计用于代表真实世界中的对象或概念,这些对象…

PWRWER

编译烧录完代码之后,按下复位键屏幕会进行刷新,数据不会丢失 如果按下按键,进行页擦除,之后再按下复位键,发现屏幕不会再进行刷新,原因是程序已经被擦除,损毁,无法运行,此…

2024OD机试卷-查找接口成功率最优时间段 (java\python\c++)

题目:查找接口成功率最优时间段 题目描述 服务之间交换的接口成功率作为 服务调用 关键质量特性,某个时间段内的接口失败率使用一个数组表示, 数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数, 给定一个数值(minAverageLost)表示某个时间段内平均失败…

图片转word如何转换?

要将图片转换为Word文档,你可以使用以下方法之一: 以上这些方法都可以帮助你将图片中的文本转换为可编辑的Word文档,你可以根据自己的喜好和需求选择其中一种方法来操作。 使用OCR软件或在线工具:有许多OCR(Optical Ch…

【数据库】为何选择B+树作为索引?与红黑树、B树的对比

摘要: 数据库索引是数据库系统中至关重要的组成部分,影响着数据检索的效率和性能。本文将探讨为何数据库选择B树作为索引的原因,并分别分析红黑树和B树在此场景中的劣势。 介绍: 数据库索引是数据库系统中的重要组成部分&#xf…

实战LangChain(六):深入LangGraph的高级功能与最佳实践

实战LangChain(六):深入LangGraph的高级功能与最佳实践 实战LangChain(一):构建您的第一个聊天机器人_langchai 机器人 实战LangChain(二):探索RAG——为聊天机器人注入知识-CSDN博客 实战LangChain(三):深化交互——利用Neo4j提升聊天机器人的对话能力 实战La…

电子资源|基于SSM+vue的电子资源管理系统(源码+数据库+文档)​

电子资源管理系统 目录 基于SSMvue的电子资源管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&am…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍 文章编号&#x…

python代码实现TF-IDF

1、TF-IDF解释 TF-IDF(Term frequency–inverse document frequency),中文翻译就是词频 - 逆文档频率,是一种用来计算关键词的传统方法。 TF(Term Frequency):TF 的意思就是词频,是…

云计算的优势与未来发展

随着数字化转型的蓬勃发展,云计算作为信息技术应用的基础设施,逐渐成为企业的首选。云计算以其诸多优势和未来发展趋势,为企业带来了更高效、灵活和创新的IT解决方案,助力企业实现数字化转型和业务发展。 云计算的优势 首先&…

C#中的隐式类型转换和显式类型转换

在C#中,类型转换分为隐式类型转换(Implicit Type Conversion)和显式类型转换(Explicit Type Conversion),也称为隐式转换和强制转换。 隐式类型转换(Implicit Type Conversion) 隐…

SQL Server共享功能目录显示灰色无法自行选择

SQL Server共享功能目录显示灰色无法自行调整 一、 将之前安装SQL Server卸载干净 二、 清空注册表 1. 打开注册表,winR,输入regedit 2. 注册表-》编辑-》查找,输入C:\Program Files\Microsoft SQL Server\ 3. 注册表-》编辑-》查找&#x…

算法小记(二分)

题目描述: 输入 𝑛n 个不超过 109109 的单调不减的(就是后面的数字不小于前面的数字)非负整数 𝑎1,𝑎2,…,𝑎𝑛a1​,a2​,…,an​,然后进行 𝑚m 次询问。对于每次询问&a…

docker+nginx+Jenkins自动构建

文章目录 前言一、实操记录问下AI:jenkins 配置新增一个mobilegit配置Build TriggersBuild EnvironmentBuild StepsPost-build Actions 上面一顿配置下来,构建 -- FAILURE 总结 前言 在已有docker-Jenkins-nginx 部署方案上,在另外一台测试…

C++实现一个简单的控制cpu利用率的程序

写一个程序&#xff0c;让控制cpu利用率在20%左右 思路很简单&#xff1a;每个循环控制sleep的时间占比 #include <iostream> #include <chrono> #include <unistd.h>int main() {int ratio 20;int base_time 1000;int sleeptime base_time * (100-ratio…

【计算机网络篇】数据链路层(10)在物理层扩展以太网

文章目录 &#x1f354;扩展站点与集线器之间的距离&#x1f6f8;扩展共享式以太网的覆盖范围和站点数量 &#x1f354;扩展站点与集线器之间的距离 &#x1f6f8;扩展共享式以太网的覆盖范围和站点数量 以太网集线器一般具有8~32个接口&#xff0c;如果要连接的站点数量超过了…

10分钟入门pandas(一)

pandas 是基于python语言的数据分析处理库,使用广泛。本文主要参考pandas的官方入门指导,并结合自己入门使用的一些常用操作进行说明。 pandas通常和numpy结合使用,一般通过如下语句导入numpy和pandas库。 import numpy as np import pandas as pd一. pandas 数据结构 pan…

基于SSM的计算机课程实验管理系统的设计与实现(源码)

| 博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f44…

大屏分辨率适配插件v-scale-screen

前言&#xff1a;大屏分辨率适配繁多&#xff0c;目前我认为最简单且问题最少的的方案就是使用v-scale-screen插件&#xff0c;无需考虑单位转换&#xff0c;position定位也正常使用。 1. 效果 填充满屏幕的效果 保持宽高比的效果 2. 插件原理 原理是通过css transfom 实现…