【C语言】用栈实现队列

用两个栈(后进先出)实现队列(先进先出)

题目:232. 用栈实现队列 - 力扣(LeetCode)

typedef int STDataType;
typedef struct Stack
{STDataType* _a;//数组int _top; // 栈顶,类似顺序表中的_sizeint _capacity; // 容量
}Stack;
// 初始化栈
void StackInit(Stack* ps)
{assert(ps);ps->_a = NULL;ps->_capacity = 0;ps->_top = 0;
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool StackEmpty(Stack* ps)
{assert(ps);return ps->_top == 0;
}
// 入栈
void StackPush(Stack* ps, STDataType data)
{assert(ps);//扩容if (ps->_capacity == ps->_top){int newcapacity = ps->_capacity == 0 ? 4 : 2 * (ps->_capacity);STDataType* tmp = (STDataType*)realloc(ps->_a, newcapacity * sizeof(STDataType));if (tmp == NULL){perror("realloc fail");return;}ps->_a = tmp;ps->_capacity = newcapacity;}ps->_a[ps->_top++] = data;
}
// 出栈
void StackPop(Stack* ps)
{assert(ps);assert(!StackEmpty(ps));ps->_top--;
}
// 获取栈顶元素
STDataType StackTop(Stack* ps)
{assert(ps);return ps->_a[ps->_top-1];
}
// 获取栈中有效元素个数
int StackSize(Stack* ps)
{assert(ps);return ps->_top;
}// 销毁栈
void StackDestroy(Stack* ps)
{assert(ps);ps->_capacity = ps->_top = 0;free(ps->_a);ps->_a = NULL;
}typedef struct {Stack Spush;Stack Spop;
} MyQueue;MyQueue* myQueueCreate() {MyQueue*p=(MyQueue*)malloc(sizeof(MyQueue));StackInit(&p->Spush);StackInit(&p->Spop);return p;
}void myQueuePush(MyQueue* obj, int x) {StackPush(&obj->Spush,x);
}
int myQueuePeek(MyQueue* obj) {if(StackEmpty(&obj->Spop)){while(!StackEmpty(&obj->Spush)){int top=StackTop(&obj->Spush);StackPush(&obj->Spop,top);StackPop(&obj->Spush);}}return StackTop(&obj->Spop);
}int myQueuePop(MyQueue* obj) {int front=myQueuePeek(obj);StackPop(&obj->Spop);return front;
}bool myQueueEmpty(MyQueue* obj) {return StackEmpty(&obj->Spop)&&StackEmpty(&obj->Spush);
}void myQueueFree(MyQueue* obj) {StackDestroy(&obj->Spop);StackDestroy(&obj->Spush);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/pingmian/50343.shtml

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

相关文章

MySQL4.索引及视图

1.建库 create database mydb15_indexstu; use mydb15_indexstu;2.建表 2.1 student表学(sno)号为主键,姓名(sname)不能重名,性别(ssex)仅能输入男或女,默认所在系别&a…

linux下usb抓包:wireshark+usbmon

step1. 加载usbmon模块 sudo mount -t debugfs none /sys/kernel/debug #这一步一般不用做,debugfs默认都是挂载的 sudo modprobe usbmon #如果这个命令找不到usbmon,那手动从/lib/modules中insmod sudo apt-get install wireshark 若加载成功&…

Pytorch加载部分预训练模型的参数

问题背景 假设我有一个已训练好的Model1,并已保存它的参数为.pth格式,我有一个与Model1结构完全相同的模型Model2,我希望Model2加载Model1中与特征提取有关的模块的参数,其他模块的参数随机初始化。 应用场景为在K折交叉验证时&…

告别繁琐地推!Xinstall如何一键优化你的App地推方案

在这个移动应用遍地开花的时代,App地推活动早已成为各大厂商获取新用户、提升品牌曝光度的重要手段。然而,传统地推方案中的种种弊端,如填写地推码/邀请码的繁琐、渠道打包的工作量繁重、人工登记上报的不准确等,无一不在拖慢地推…

纯电SUV又一个卷王,比亚迪都没它狠

文 | AUTO芯球 作者 | 雷慢 太狠了,就在刚刚, 我劝阻了一个高中同学暂时不要买宋PLUS纯电版, 因为又一个新能源卷王出现了, 在卷价格上,宋PLUS都没它狠。 不信你们看,埃安V第二代刚发布, …

科技与梦想 | 任正非引领华为的品牌革新之旅

从一个小型的交换设备供应商到全球通信技术的领军企业,华为的发展历程就是一部激动人心的品牌传奇。 在这背后,有一位引领者——任正非,他的远见和决心塑造了华为今日的辉煌。 "把技术做尖,把产品做精,把服务做…

如何快速抓取小红书帖子评论?两大实战Python技巧揭秘

摘要: 本文将深入探讨两种高效的Python方法,助您迅速获取小红书文章下方的所有评论,提升市场分析与用户洞察力。通过实战示例与详细解析,让您轻松掌握数据抓取技巧,为您的内容营销策略提供有力支持。 如何快速抓取小…

可见性::

目录 定义: 解决方法: ①使用synchronized实现缓存和内存的同步 修改一: 加入语句: 代码: 修改2: 在代码块中加入: 代码: 执行结果: 原因: ②使用…

【面试题】测试工程师面试题汇总

1.测试基础 【测试基础】归纳整理2023年面试题-CSDN博客 2.性能测试 【性能测试】归纳整理2023年面试题 3.Python语言 【python】归纳整理2023年常见面试题 4.自动化 https://blog.csdn.net/weixin_46697247/article/details/133493163 5.测试用例 https://blog.csdn.…

java通过poi解析word入门

文章目录 介绍一、了解word docx文档的结构二、引入POI的依赖三、解析Word文档常用API加载Word文档获取文档整体结构获取文档中的段落获取文档中的表格获取文档中的脚注 四、解析Word中的段落示例五、读取Word文档并遍历图片六、解析Word中的图片示例 介绍 Apache POI 是一个处…

基于高光谱图像的压缩感知网络

压缩感知算法原理 压缩感知(Compressed Sensing, CS)是一种信号处理技术,它允许在远低于Nyquist采样率的情况下对信号进行有效采样和重建。压缩感知理论的核心思想是利用信号的稀疏性,通过少量的线性测量重建出原始信号。以下是压…

oncoPredict:根据细胞系筛选数据预测体内或癌症患者药物反应和生物标志物

在14年的时候,oncoPredict函数的开发团队在Genome Biology上发了一篇文章。 这篇文章的核心目的是阐释了使用治疗前基线肿瘤基因表达数据去预测患者化疗反应。开发团队发现使用细胞系去预测临床样本的药物反应是可行的。 鉴于之前的理论,该研究团队首先…

[pycharm]解决pycharm运行程序出现卡住scanning files to index索引的问题

有时候会出现索引问题,显示scanning files to index 解决方法: in pycharm, go to the "File" on the left top, then select "invalidate caches/restart...", and press "invalidate and restart". 然后等它自己重启…

LC 283.移动零

283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: num…

@RestController和@Controller

RestController和Controller 在 Spring MVC 中,RestController 和 Controller 是用于定义控制器的注解,但它们有一些重要的区别。下面是对它们的详细解释和示例: Controller Controller 注解用于标记一个类是一个 Spring MVC 控制器&#…

Marin说PCB之----我的创作纪念日

今天早上打开手机无意间看到了CSDN给我发来的私信,不知不觉中已经是512天了,下面小编我就给诸位道友们分享我和CSDN的那些年。 机缘 有一天小编我正在回去的路上,突然从天上落下一本书,叫信号完整性与电源完整性分析: …

[Mysql-DML数据操作语句]

目录 数据增加:INSERT 全字段插入: 部分字段插入: 一次性添加多条: 数据修改:UPDATE 数据删除:DELECT delete truncate drop 区别 数据增加:INSERT 总体格式:insert into 表…

Vue的安装配置

1.安装node js Node.js — 在任何地方运行 JavaScript (nodejs.org) 2.测试nodejs是否安装成功 node -v npm -v3.通过npm 安装 vue npm install -g vue/cli4.测试vue是否安装成功 vue --version5.打开PyCharm,创建项目:flask-web vue create flask…

定制化爬虫管理:为企业量身打造的数据抓取方案

在数据驱动的时代,企业如何高效、安全地获取互联网上的宝贵信息?定制化爬虫管理服务应运而生,成为解锁专属数据宝藏的金钥匙。本文将深入探讨定制化爬虫管理如何为企业量身打造数据抓取方案,揭秘其在海量信息中精准捕获价值数据的…

音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件

在文章《音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放》中讲述了生成PCM文件的方法。通过FFmpeg命令可以把该PCM文件转为WAV格式的音频文件: ./ffmpeg -ar 44100 -ac 2 -f s16le -acodec pcm_s16le -i aud…