力扣 225. 用队列实现栈(C语言实现)

news2024/11/26 1:37:11

目录

  • 1.解题思路
  • 2.代码实现

1.解题思路

这道题如果使用C++会好写的多,因为可以使用C++提供的队列来实现,但如果使用C语言则必须手写一个队列来实现,在这里我用了我前面文章中实现好的队列来解答,首先因为队列是先进先出,而栈是后进后出,因此我们可以设计两个队列,其中一个队列放数据,另一个队列为空
在这里插入图片描述
当使用POP接口出栈时,则可将队列一的前N-1个数据挪到队列二上,这样一来,队列一剩余的那个数就为要出栈的数
在这里插入图片描述

即这道题的精髓就是两个队列之间数据的传递.

2.代码实现

队列实现代码:

typedef int QDataType;
// 链式结构:表示队列 
typedef struct QListNode
{
	struct QListNode* _next;
	QDataType _data;
}QNode;
// 队列的结构 
typedef struct Queue
{
	QNode* _front;
	QNode* _rear;
}Queue;

void QueueInit(Queue* q)
{
	assert(q);
	q->_front = NULL;
	q->_rear = NULL;

}
void QueuePush(Queue* q, QDataType data)
{
	assert(q);
	if (q->_front == NULL)
	{
		QNode* tmp = (QNode*)malloc(sizeof(QNode));
		tmp->_data = data;
		tmp->_next = NULL;
		q->_front = q->_rear = tmp;
	}
	else
	{
		QNode* tmp = (QNode*)malloc(sizeof(QNode));
		tmp->_data = data;
		tmp->_next = NULL;
		q->_rear->_next = tmp;
		q->_rear = tmp;
	}


}
void QueuePop(Queue* q)
{
	assert(q->_front != NULL);
	QNode* tmp = q->_front->_next;
	free(q->_front);
	q->_front = tmp;

}
QDataType QueueFront(Queue* q)
{
	assert(q->_front);
	return q->_front->_data;


}
QDataType QueueBack(Queue* q)
{
	assert(q->_rear);
	return q->_rear->_data;
}
int QueueSize(Queue* q)
{
	QNode* tmp = q->_front;
	int num = 0;
	while (tmp)
	{
		num++;
		tmp = tmp->_next;
	}
	return num;

}
bool QueueEmpty(Queue* q)
{
	return q->_front == NULL;

}
void QueueDestroy(Queue* q)
{
	QNode* tmp = q->_front;
	while (tmp)
	{
		QNode* next = tmp->_next;
		free(tmp);
		tmp = next;
	}

}

解题接口代码:

typedef struct {
	Queue q1;
	Queue q2;
} MyStack;


MyStack* myStackCreate()
{
	MyStack* s = (MyStack*)malloc(sizeof(MyStack));
	QueueInit(&s->q1);
	QueueInit(&s->q2);
}

void myStackPush(MyStack* obj, int x) {
	if (!QueueEmpty(&obj->q1))
	{
		QueuePush(&obj->q1, x);
	}
	else
	{
		QueuePush(&obj->q2, x);
	}
}

int myStackPop(MyStack* obj) {
	Queue* p1 = &obj->q1;
	Queue* p2 = &obj->q2;
	if (!QueueEmpty(&obj->q2))
	{
		p1 = &obj->q2;
		p2 = &obj->q1;
	}
	while (QueueSize(p1)>1)
	{
		QueuePush(p2, QueueFront(p1));
		QueuePop(p1);
	}
	int tmp = p1->_front->_data;
	QueuePop(p1);
	return tmp;
}

int myStackTop(MyStack* obj) {
	if (!QueueEmpty(&obj->q1))
		return QueueBack(&obj->q1);
	else
	{
		return QueueBack(&obj->q2);
	}

}

bool myStackEmpty(MyStack* obj) {
	if (!QueueEmpty(&obj->q1) || QueueEmpty(&obj->q2))
		return false;
	else
		return true;
}

void myStackFree(MyStack* obj) {
	QueueDestroy(&obj->q1);
	QueueDestroy(&obj->q2);
}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

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

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

相关文章

揭秘视频号创作者分成计划,带你玩赚视频号流量主,保姆级教程

项目介绍 今天给大家分享一个视频号流量主的一个项目,也就是视频号创作者广告分成计划。这个项目在目前来说是一个蓝海赛道,做的人是比较少,作为副业来说还是非常适合个人来做的。如果大家有工作室的话,也可以进行批量操作&#…

2021年06月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 小猫位置在舞台中心,点击一次小猫后能前进10步的程序为? A: B: C: D: 答案:B 第2题 快速切换到下一个背景图片应该使用哪个积木? A: B:

MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』

✨个人主页: 北 海 🎉所属专栏: MySQL 学习 🎃操作环境: CentOS 7.6 阿里云远程服务器 🎁软件版本: MySQL 5.7.44 文章目录 1.创建数据库2.数据库中的编码问题2.1.字符集与校验集2.3.支持的字符…

环保气膜建筑的运维成本在哪几个方面

作为一种环保建筑,气膜结构在工业和文体领域得到了广泛认可。尽管气膜建筑在经济上具有明显的优势,但对于不了解它的人来说,他们可能会下意识地认为在运营和维护过程中会产生大量费用。今天,让我们一起了解一下气膜建筑在运营维护…

【蓝桥杯选拔赛真题68】Scratch打地鼠游戏 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch打地鼠游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

未来之路:大模型技术在自动驾驶的应用与影响

本文深入分析了大模型技术在自动驾驶领域的应用和影响,万字长文,慢慢观看~ 文中首先概述了大模型技术的发展历程,自动驾驶模型的迭代路径,以及大模型在自动驾驶行业中的作用。接着,详细介绍了大模型的基本定义、基础功…

【论文阅读】(CTGAN)Modeling Tabular data using Conditional GAN

论文地址:[1907.00503] Modeling Tabular data using Conditional GAN (arxiv.org) 摘要 对表格数据中行的概率分布进行建模并生成真实的合成数据是一项非常重要的任务,有着许多挑战。本文设计了CTGAN,使用条件生成器解决挑战。为了帮助进行公…

数据同步到Redis消息队列,并实现消息发布/订阅

一、假设需求: 某系统在MySQL某表中操作了一条数据在其他系统中,实时获取最新被操作数据的数据库名、数据表名、操作类型、数据内容 应用场景: 按最近项目的一个需求来说: 1.当某子系统向报警表中新增了一条报警数据;…

外包能做多久?这才是掩藏在虚假繁荣后的真实

讲一下我的故事和想法,你们自己寻思一下 我25岁,中级测试,外包,薪资13.5k,人在上海。 内卷什么的就不说了,而且人在外包那些高级精英年薪大几十的咱也接触不到,就说说外包吧。 假设以我为界限…

2023年亚太杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模…

GB28181/GB35114国标平台LiveGBS适配国产信创环境,使用国产数据库达梦数据库、高斯数据库、瀚高数据库的配置方法...

1、如何配置切换信创达梦数据库? livecms.ini -> [db]下面添加配置如: ... [db] dialectdm url dm://SYSDBA:Aa12345678localhost:5236/livegbs 2、如何配置切换高斯数据库? livecms.ini -> [db]下面添加配置如: ... [db] d…

【论文阅读】CTAB-GAN: Effective Table Data Synthesizing

论文地址:[2102.08369] CTAB-GAN: Effective Table Data Synthesizing (arxiv.org) 介绍 虽然数据共享对于知识发展至关重要,但遗憾的是,隐私问题和严格的监管(例如欧洲通用数据保护条例 GDPR)限制了其充分发挥作用。…

爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

🚀 作者:阿辉不一般 🚀 你说呢:生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀作图工具:draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话,还请…

深度学习之基于YoloV5钢材表面缺陷检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习技术在计算机视觉领域的应用为表面缺陷检测系统的发展提供了强大的推动力。本文将介绍基于YoloV5的钢材表面…

算法训练 第七周

一、最小栈 本题要求我们实现一个最小栈数据结构,要求它可以实现栈的基本功能,并且还能使用常数时间复杂度来获取栈中的最小值。 1.辅助栈 我们可以在普通栈的基础上再添加一个维护最小值的辅助栈来实现这个数据结构,我们先创建一个普通的栈…

李想「避战」后,问界的下一个对手是谁?

作者 | 魏启扬 来源 | 洞见新研社 10月份,理想卖出了40422台车,又一次刷新了自己的历史纪录。 饶是如此,一向锋芒毕露的理想汽车创始人李想面对华为时,还是选择了“避战”,“不和华为吵架,实在吵不过”。…

请求头,响应头

目录 常见的请求方式 GET/POST HEAD(报文首部,验证URI有效性) PUT/DELETE(报文文件) OPTIONS(查询URI支持的HTTP方法) Connection: keep-alive TCP 就会一直保持连接。 Cache-Control public:响应…

vscode删除后重装还有原来的配置问题,彻底删除vscode,删除vscode安装过的插件和缓存

VSCode卸载后进行重新安装,发现新安装的还有原来的一些配置,卸载的不彻底,有时候也容易出问题,可按照如下方法卸载干净: 1.进入控制面板卸载VSCode,也可以在VSCode的安装目录下用程序自带的卸载程序 2.这…

视频直播点播平台EasyDSS无法删除分组,如何解决?

EasyDSS视频推拉流平台可支持用户自行上传视频文件,也可将上传的点播文件作为虚拟直播进行播放。平台能支持多屏播放,可兼容Windows、Android、iOS、Mac等操作系统,还能支持CDN转推,具备较强的可拓展性与灵活性。 有用户反馈&…

直播推流与拉流简概

推流:将直播内容推送至服务器的过程 拉流:为服务器已有直播内容,用指定地址进行拉取的过程 在推流中,我们想要进行传输到服务端, 那么肯定要将数据使用传输协议进行封装,变成流数据。常用的流传输协议有哪几种呢? RT…