LeetCode | 225. 用队列实现栈

LeetCode | 225. 用队列实现栈

OJ链接

在这里插入图片描述

  • 此题可以用两个队列去实现一个栈,每次始终保持一个队列为空,
    入栈操作相当于给非空队列进行入队操作

  • 入数据,把不为空的队列入

  • 出数据,把不为空的队列数据导入为空,直到最后一个

  • 出栈操作相当于非空队列的队尾元素出队,此时需要把非空队列除最后一个元素之外的其余元素入队到空队列,然后出队最后一个队尾元素

在这里插入图片描述

代码如下:

typedef int QDataType;

typedef struct QueueNode
{
	struct QueueNode* next;
	QDataType data;
}QueueNode;

typedef struct Queue
{
	QueueNode* head;
	QueueNode* tail;
}Queue;


void QueueInit(Queue* pq);//队列初始化
void QueueDestroy(Queue* pq);//销毁
void QueuePush(Queue* pq,QDataType x);//添加
void QueuePop(Queue* pq);//删除
QDataType QueueFront(Queue* pq);//头数
QDataType QueueBack(Queue* pq);//尾数
int QueueSize(Queue* pq);//个数
bool QueueEmpty(Queue* pq);//判断是否为空


void QueueInit(Queue* pq)
{
	assert(pq);
	pq->head = pq->tail = NULL;
}
void QueueDestroy(Queue* pq)//销毁
{
	assert(pq);
	while (pq->head !=NULL)
	{
		QueueNode* tmp = pq->head;
		pq->head = pq->head->next;
		free(tmp);
	}
	pq->head = pq->tail = NULL;
}
void QueuePush(Queue* pq, QDataType x)//添加
{
	assert(pq);
	QueueNode* NewNode = (QueueNode*)malloc(sizeof(QueueNode));
	NewNode->data = x;
	NewNode->next = NULL;
	if (pq->head ==NULL)
		pq->head = pq->tail=NewNode;
	else
	{
		pq->tail->next = NewNode;
		pq->tail = NewNode;
	}
}
void QueuePop(Queue* pq)//删除
{
	assert(pq);
	assert(pq->head);
	if (pq->head == pq->tail)
		pq->tail = NULL;
	QueueNode* tmp = pq->head->next;
	free(pq->head);
	pq->head = tmp;
	
}
QDataType QueueFront(Queue* pq)//头数
{
	assert(pq);
	assert(pq->head);
	return pq->head->data;
}
QDataType QueueBack(Queue* pq)//尾数
{
	assert(pq);
	assert(pq->tail);
	return pq->tail->data;
}
int QueueSize(Queue* pq)//个数
{
	assert(pq);
	int count = 0;
	QueueNode* tmp = pq->head;
	while (tmp != NULL)
	{
		count++;
		tmp = tmp->next;
	}
	return count;
}
bool QueueEmpty(Queue* pq)//判断是否为空
{
	if (QueueSize(pq) == 0)
		return true;
	else
		return false;
}
typedef struct {
    Queue q1;
    Queue q2;
} MyStack;


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

void myStackPush(MyStack* obj, int x) {
    Queue*cur=&obj->q1;//选出含有数据的队列
    if(!QueueEmpty(&obj->q2))
        cur=&obj->q2;
    QueuePush(cur,x);
}

int myStackPop(MyStack* obj) {
    Queue*cur1=&obj->q1;//有数据
    Queue*cur2=&obj->q2;//无数据
    if(!QueueEmpty(&obj->q2))
    {
        cur1=&obj->q2;
        cur2=&obj->q1;
    }
    while(cur1->head!=cur1->tail)
    {
        QueuePush(cur2,QueueFront(cur1));
        QueuePop(cur1);
    }
    int top=QueueFront(cur1);
    QueuePop(cur1);
    return top;
}

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

bool myStackEmpty(MyStack* obj) {
    return (QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2));
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1334. 阈值距离内邻居最少的城市

分析题目两点“阈值距离”、“邻居最少”。 “阈值距离”相当于定了个上界,求节点之间的最短距离。 “邻居最少”相当于能连接的点的数量。 求节点之间的最短距离有以下几种方法: 在这道题当中,n的范围是100以内,所以可以考虑O(n…

超详细!!新手必看!STM32--独立看门狗IWBG

一、看门狗是什么? 答:看门狗是一个12bit的递减计数器。当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,CPU收到复位信号,系统复位重新运行。在计数没减到0之前,重置了计数器的值的话&…

降水短临预报模型trajGRU简介

1 前言 trajGRU 是在对 convLSTM 的改进,且这两个模型是同一个作者。 convLSTM 在降水短临预报这块已经超越传统模型,但其是局部不变性的(location-invariant),而自然的运动和转换(如旋转)是局部变化的(location-invariant)。作者为了能够使…

【python 生成器 面试必备】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 2

这篇文章要解决的问题:How to Pass Value to Generators Using the “yield” Expression in Python ref:https://python.plainenglish.io/yield-python-part-ii-e93abb619a16 1.如何传值 yield 是一个表达式!!!! yi…

⑤ 【MySQL】DCL语句 —— 用户管理、权限控制

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL用户与权限 ⑤ 【MySQL】DCL语句 —— 用…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FREERTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…

临床决策分析(DCA)演示APP:理解DCA分析

临床决策分析(DCA)演示APP:理解DCA分析 之前讨论了DCA分析的分析过程和作用,认为其最主要的作用是确定预测模型的决策阈值,从而促进预测模型与临床的结合。DCA的影响不止于此,在DCA分析中,预测…

JLMR Micro Super Resolution Algorithm国产微超分算法DEMO

一、简介 目前,做超分算法基本还是以AI训练为主,但是AI基本上都是基于既定场景的训练。而传统的算法基本上都是利用上下文的纹理预测、插值等方案,在图像放大过程中会出现模糊,或马赛克等现象。 我们基于加权概率模型&#xff0c…

Control的Invoke和BeginInvoke

近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下。感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 。 (一)Control的Invoke和BeginInvoke 我们要基于以下认识: (1&#x…

【ASP.NET】Hello World

文章目录 1. 几个概念2. 搭建开发环境2.1 .NET SDK2.2 IDE & Editor 3 First Project3.1 步骤3.2 模板3.3 项目结构3.4 请求的处理流程 Reference Link 1. 几个概念 .NET 是一个平台,包括 .NET Framework、.NET Core、ASP.NET、C#等,可以构建桌面、W…

手写一个starter

文章目录 starter命令规则项目演示新建工程Pom引入依赖定义属性配置定义自动配置类配置EnableAutoConfiguration业务实现项目中使用 什么是Starter?Starter其实就是我们经常在maven中的导入的各种模块,自定义Starter可以快速的满足开发的需求&#xff0c…

夸克发布自研大模型 加速下一代搜索体验创新

国产大模型阵营再添新锐选手。11月14日,阿里巴巴智能信息事业群发布全栈自研、千亿级参数的夸克大模型,将应用于通用搜索、医疗健康、教育学习、职场办公等众多场景。夸克App将借助自研大模型全面升级,加速迈向年轻人工作、学习、生活的AI助手…

智能运维软件,提升效率的利器

随着信息技术的飞速发展,企业对于IT系统的依赖程度日益加深。为保障IT系统的稳定运行,越来越多的企业选择智能运维管理软件,以全面高效的监控和管理系统和资产情况。 一、运维监控平台的重要性 无监控,不运维。将资产并入监控系…

git使用patch进行补丁操作

文章目录 前言一、format-patch/am生成和应用补丁1、生成2、应用 二、patch文件解读 前言 在软件开发中,代码协作和版本管理是至关重要的。Git 是一个流行的分布式版本控制系统,它提供了各种功能来简化团队合作和代码管理。但是如何给已有项目打补丁&am…

计算机组成原理:大而快——层次化存储

原文链接www.xiaocr.fun/index.php/2023/11/14/计算机组成原理大而快-层次化存储/ 引言 关于两种局部性 时间局部性:如果某个数据被访问,那么在不久的将来它可能再次被访问空间局部性:如果某个数据项被访问,与它相邻的数据项可…

onlyoffice 进阶开发 二次开发 连接器(connector)开发

阅读须知:本文针对有对word/excel进行js操作的需求 本次改造基于V7.3.3进行,已经去除:连接器(connector)限制 可以自由调用Api.xxx()、connector.executeMethod()、connector.callCommand() 已经自行改造过docker更新进入仓库。 小伙伴们…

python 爬虫之requests 库以及相关函数的详细介绍

get 函数 当你使用 requests.get 函数时,你可以按照以下步骤来发起一个 GET 请求: 导入 requests 模块: 在你的 Python 脚本或程序中,首先导入 requests 模块。 import requests指定目标 URL: 设置你要请求的目标 URL…

ACM练习——第二天

今天又是一天课,满课,很累哈,计组真的挺难的,但是多学学还是可以学明白。行吧,继续进入今天的ACM练习,现阶段都是主要练习Java到C的语言过渡。 因为今天的题目多半都是昨天的延伸,我就不提供Jav…

Python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。 比如,要测试一个接口的数据,接口返回的数据格式如下: {"code": "20000", "data": ["孙悟空","李白&quo…

【C语言学习】24 - strcpy()函数

文章目录 1 函数原型2 参数3 返回值4 使用说明5 示例5.1 示例1 1 函数原型 strcpy():将str指向的字符串拷贝至dest,函数原型如下: char *strcpy(char *dest, const char *src);2 参数 strcpy()函数有两个参数src和dest: 参数s…