C语言面试题之化栈为队

news2024/11/26 11:57:04

化栈为队

实例要求

  • 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 1024

typedef 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.coloradmin.cn/o/1580101.html

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

相关文章

关于51单片机TMOD定时器的安全配置

定时器介绍: -------------------------------------------------------------------------------------------------------------------------- 首先配置的是控制寄存器 TCON 说直白点,这个寄存器就是用来计数的,打开计时器,关…

UEditor 任意文件上传漏洞

前言 前段时间在做某政府单位的项目的时候发现存在该漏洞,虽然是一个老洞,但这也是容易被忽视,且能快速拿到shell的漏洞,在利用方式上有一些不一样的心得,希望能帮助到一些还不太了解的小伙伴,故此写了此篇…

AI爆款文案 巧用AI大模型让文案变现插上翅膀

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

kali基础渗透学习,永恒之蓝,木马实战

简介 kali的学习本质是在linux上对一些攻击软件的使用,只是学习的初期 先在终端切换到root用户,以便于有些工具对权限的要求 下载链接 镜像源kali 攻击流程 公网信息搜集 寻找漏洞,突破口,以进入内网 进入内网&#xff0c…

组装机械狗电子玩具方案

这款机械狗玩具电子方案结合了现代电子技术和人工智能元素,旨在为用户提供一个高科技、互动性强的娱乐体验。通过不断的软件更新和硬件迭代,机械狗的功能将持续扩展。 一、功能特点: 1、自动巡游:机械狗能够自主在房间内巡游&am…

用Wireshark工具对gRPC接口进行本地抓包

前言: 本人一名敲代码的程序员,突然领导安排研究gRPC接口,并且抓包分析, 抓包工具试了Charles、mitmproxy都不行,浪费很多时间,最后使用Wireshark工具对本地启动的gRPC接口成功抓包,关于安装W…

modelsim 仿真bmp图片实现RGB_YCrCb

用modelsim_se软件仿真bmp图片,可在modesim中实现一些图片处理算法和查看效果 本文以最简单的仿真一副bmp图像为例,实现RGB_YCrCb的modelsim仿真,带源工程 1、先在本地建立文件夹 2、首先打开moselsim 3、新建库和新建项目,保存到建立的文件…

逐行讲解python实现A*路径规划

目录 搜索步骤关键点开集合和闭集合复杂度优化 代价父节点替换 距离地图设置 完整代码备注 搜索步骤 A*路径规划是一种广度优先搜索算法,需要在栅格地图上进行搜索。其主要搜索步骤如下: 得到栅格地图,确定起点和终点位置;计算起…

Vue项目打包配置生产环境去掉console.log语句的方法

一、Vue2项目 使用webpack内置的 terser 工具,在vue.config.js文件加上相应的配置即可。 二、Vue3项目 同样是使用 terser 工具,不过vite没有内置terser,需要手动安装依赖 安装完后在vite.config.js文件加上相应的配置即可。 2024-4-9

深挖抖快近2000个品类,我们发现了10万亿“她经济”的新商机!

在这个数字化时代,女性消费力量正以前所未有的速度崛起。根据埃森哲数据显示,我国现有近4亿20岁-60岁的女性消费者,其每年所掌握的消费支出高达10万亿元! 面对庞大的“她经济”市场,专属于女性的三八妇女节&#xff0c…

【Python系列】读取 Excel 第一列数据并赋值到指定列

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

米多论文方便吗 #经验分享#经验分享

米多论文是一款专业的论文写作、查重和降重工具,被广泛认可为高效、靠谱、方便的软件。无论是学生、科研人员还是教师,都可以从中受益匪浅。 首先,米多论文拥有强大的查重功能,可以帮助用户快速检测论文中的抄袭内容,提…

openGauss 5.0 单点企业版部署_Centos7_x86(上)

背景 通过openGauss提供的脚本安装时,只允许在单台物理机部署一个数据库系统。如果您需要在单台物理机部署多个数据库系统,建议您通过命令行安装,不需要通过openGauss提供的安装脚本执行安装。 本文档环境:CentOS7.9 x86_64 4G1…

人社大赛算法赛题解题思路分享+季军+三马一曹团队

团队成员介绍: 梅鵾 上海交通大学 众安科技 算法工程师 吴栋梁 复旦大学 众安科技 算法工程师 李玉娇 复旦大学 众安科技 算法工程师 一、赛题背景分析及理解 本赛题提供了部分地区2016年度的医疗保险就医结…

最新剧透前沿信息GPT-5或将今年发布

GPT2 很糟糕 ,GPT3 很糟糕 ,GPT4 可以 ,但 GPT5 会很好。 PS:GPT2 很糟糕,3 很糟糕,4 可以,5 很可以。 如果想升级GPT4玩玩,地址 今年发布的具有推理功能的 GPT5不断发展,就像 iPhone 一样 Sam Altman 于 17 日&am…

SD-WAN在金融行业的重要性

金融行业的数字化转型已成为当今的主要趋势,而软件定义广域网(SD-WAN)作为金融机构网络架构的新宠,其地位日益凸显。随着金融业务的日益复杂化和网络连接需求的不断增长,SD-WAN的优势愈发显著。本文将深入探讨SD-WAN在…

鲸鱼优化算法(Whale Optimization Algorithm)

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 算法背景 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种模拟鲸鱼捕食行为的优化算法。想象一下,你…

java中使用雪花算法(Snowflake)为分布式系统生成全局唯一ID

(全局唯一ID的解决方案有很多种,这里主要是介绍和学习Snowflake算法) 什么是雪花算法(Snowflake) 雪花算法(Snowflake Algorithm)是由Twitter公司在2010年左右提出的一种分布式ID生成算法&…

参加2023 甲骨文圆桌会议

2023年10月13日,我参加了2023 甲骨文圆桌会议,并做了《Oracle高可用架构的最佳实践》主题演讲。 照片为当时活动现场: