C语言面试题之化栈为队

化栈为队

实例要求

  • C语言实现实现一个MyQueue类,该类用两个栈来实现一个队列;
  • 示例:
MyQueue queue = new MyQueue();queue.push(1);
queue.push(2);
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false
  • 说明:
  • 1、只能使用标准的栈操作 ,即只有 push to top, peek/pop from top, size 和 is empty
    操作是合法的;
  • 2、所使用的语言也许不支持栈。
  • 3、可以使用 list 或者 deque(双端队列)来模拟一个栈,
  • 4、只要是标准的栈操作即可。
  • 5、假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。

实例分析

  • 一、算法思想:
  • 若实现一个队列的功能,需要用到两个栈来实现此功能,创建两个栈S1和S2;
  • 二、入队列:
  • 所有的数据元素都入栈到S1,即所有的数据元素在S1完成入队列;
  • 三、出队列:
  • 判断S2是否为空;
  • 若S2不为空,则数据元素在S2出栈,即数据元素在S2完成出队列;
  • 若S2为空且S1不为空,则S1中所有数据元素依次在S1出栈并依次入栈到S2,接下来,所有的数据元素在S2出栈,即所有的数据元素在S2完成出队列;
  • 若S2为空且S1为空,即所构造的队列为空;

示例代码

#define maxSize 1024typedef struct {int stack1[maxSize];int top1; // 栈1的栈顶指针int stack2[maxSize];int top2; // 栈2的栈顶指针
} MyQueue;/** Initialize your data structure here. */
MyQueue* myQueueCreate() {MyQueue* queue = (MyQueue*)malloc(sizeof(MyQueue));queue->top1 = -1; // 栈1为空queue->top2 = -1; // 栈2为空return queue;
}/** Push element x to the back of queue. */
void myQueuePush(MyQueue* obj, int x) {obj->stack1[++obj->top1] = x; // 将元素压入栈1
}/** Removes the element from in front of queue and returns that element. */
int myQueuePop(MyQueue* obj) {if (obj->top2 == -1) { // 如果栈2为空while (obj->top1 != -1) { // 将栈1中的元素逐个弹出并压入栈2,以颠倒顺序obj->stack2[++obj->top2] = obj->stack1[obj->top1--];}}if (obj->top2 == -1) { // 如果栈2仍为空,说明队列为空return -1;}return obj->stack2[obj->top2--]; // 弹出栈2的栈顶元素
}/** Get the front element. */
int myQueuePeek(MyQueue* obj) {if (obj->top2 == -1) { // 如果栈2为空while (obj->top1 != -1) { // 将栈1中的元素逐个弹出并压入栈2,以颠倒顺序obj->stack2[++obj->top2] = obj->stack1[obj->top1--];}}if (obj->top2 == -1) { // 如果栈2仍为空,说明队列为空return -1;}return obj->stack2[obj->top2]; // 返回栈2的栈顶元素,但不弹出
}/** Returns whether the queue is empty. */
bool myQueueEmpty(MyQueue* obj) {return obj->top1 == -1 && obj->top2 == -1; // 如果栈1和栈2均为空,则队列为空
}void myQueueFree(MyQueue* obj) {free(obj);obj = NULL;
}/*** 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.rhkb.cn/news/301404.html

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

相关文章

NCI SEER breast cancer美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型(2024年新项目)

​作者Toby,来源公众号:python生物信息学,美国国立癌症研究所数据库乳腺癌生存分析和乳腺癌预测模型 NCI美国国立癌症研究所(NationalCancerInstitute,NCI) 美国国立癌症研究所(NCI)是美国国家卫生研究院(NIH&#xf…

USACO 2024 Open Bronze铜组题解

迟到了一个月的题解...... Logical Moos: 啊这题放在铜组T1雀食有点BT...... 首先,我们关注l前第一和r最后那两组。如果这俩有一个是true,那答案肯定也是true。 否则,在l和r外边的都是false。那我们就只用仔细看l和r中间的玩意儿。对于l和…

如何挂载img镜像以及lvm分区

上一章节,我在win10下利用qemu安装了一个aarch64的 kylin-server-v10的ISO系统镜像包。安装时将系统安装到了虚拟硬盘kylin-server-v10.img 里,现在有个需求,要读出kylin-server-v10.img中文件系统的内容。 通过fdisk命令可以看到 kylin-ser…

利用AI结合无极低码(免费版)快速实现接口开发教程,会sql即可,不需要编写编译代码

无极低码无代码写服务+AI实践 本次演示最简单的单表无代码增删改查发布服务功能,更复杂的多表操作,安全验证,多接口调用,自自动生成接口服务,生成二开代码,生成调用接口测试,一键生成管理界面多条件检索、修改、删除、查看、通用公共接口调用、通用无限级字典调用等后续…

web前端框架设计第四课-条件判断与列表渲染

web前端框架设计第四课-条件判断与列表渲染 一.预习笔记 1.条件判断 1-1:v-if指令:根据表达式的值来判断是否输出DOM元素 1-2:template中使用v-if 1-3:v-else 1-4:v-else-if 1-5:v-show(不支…

生成式AI的情感实验——AI能否产生思想和情感?

机器人能感受到爱吗?这是一个很好的问题,也是困扰了科学家们很多年的科学未解之谜。虽然我们尚未准备好向智能机器赋予情感,但智能机器却已经可以借助生成式人工智能(AI)来帮助我们表达自己的情感。 自然情感表达 AI正…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时, 1,Toggle初始时默认会有一个被勾选(ison为true),可以自己打勾指定 2,不能取消勾选 Allow Switch Off属性值为true时, 1,Toggl…

安达发|包装容器行业APS生产排程计划管理特点

在包装容器行业中,APS(高级计划排程系统)是企业实现生产自动化、信息化的重要组成部分。一个有效的APS生产排程计划管理对于提高生产效率、降低生产成本、保障交货期以及提升客户满意度具有至关重要的作用。以下是对包装容器行业APS生产排程计…

基于Springboot框架四川成都某大学教室自习室预约系统设计与实现 研究背景和意义、国内外现状

二、国内外现状 在国内外,教室和自习室预约系统作为高校信息化建设的重要组成部分,已经得到了广泛的关注和应用。不同国家和地区的高校在预约系统的建设和应用方面呈现出不同的特点和趋势。 在国内方面,随着高校信息化建设的不断深入&#…

麒麟系统下安装qt5.9.1后不能输入中文

引言 在虚拟机上安装麒麟系统后,安装了qt5.9.1,只能输入英文和数字不能输入中文注释,编译的程序也不能输入中文。 原因 安装后的麒麟系统自带搜狗输入法,原本可以输入中文,但是qt5.9.1缺少支持搜狗输入法的fcitx插件。所以qt5.9.1中不能输入中文。 解决方法 安装fcit…

MWeb Pro For Mac v4.5.9 强大的 Markdown 软件中文版

MWeb 是专业的 Markdown 写作、记笔记、静态博客生成软件,目前已支持 Mac,iPad 和 iPhone。MWeb 有以下特色: 软件下载:MWeb Pro For Mac v4.5.9 软件本身: 使用原生的 macOS 技术打造,追求与系统的完美结合…

【MySQL探索之旅】数据库设计以及聚合查询

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

RIP配置不求人:手把手教你配置RIP路由

#教育优质作者发文挑战赛# 大家好,今天给同学们介绍一下RIP基本功能相关配置 01、基本概念 RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离…

企业必看:几个在线文档编辑器天花板

在线文档编辑器是企业工作必不可少的工具,不仅能够帮助企业实现高效协作,还能提升文档管理的便捷性和安全性。在众多在线文档编辑器中,有几个工具因其出色的性能和广泛的应用而备受瞩目,成为了企业使用的热门选择。接下来&#xf…

Driver not loaded之记录Qt访问MySql的解决经历

对于这个问题的本质原因,我也搞不明白,所以记录的方法不一定对所有人行之有效。我的目的很简单,就是把数据库用起来,经过查找网上资料,最终把数据库跑起来了。因此记录如下: 1,出现这个问题是缺…

基于单片机钢琴电子节拍器系统设计

**单片机设计介绍,基于单片机钢琴电子节拍器系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机钢琴电子节拍器系统设计是一个综合性的项目,它结合了单片机编程、音频处理、用户界面设计等多个领域的…

Master节点快照回退遇到的容器不存在的问题

这次遇到的问题说起来有点扯,k8s集群出了点问题,kuboard无法访问,查看容器状态后,初始问题简单的以为是kuboard出问题了,理论上来说重新安装kuboard即可, 由此问题引发的系统bug,导致master节点…

探索Flutter混淆在提高应用安全性方面的作用

在移动应用开发中,保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具,帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆,并提供了相关的操作步骤和注意事项。 📝 摘要 本…

zabbix绑定钉钉进行通知,网页端添加JavaScript,无脑式操作

文章目录 前言一、编辑zabbix告警JavaScript脚本二、代码如下:编辑消息模板,自定义markdown格式的消息。 总结 前言 随着人工智能的不断发展,zabbix监控这门技术也越来越重要,一下进入正题。 一、编辑zabbix告警JavaScript脚本 没…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块,实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明: 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”,…