用队列实现栈(力扣第225题)


#include "stdio.h"
#include "stdbool.h"
#include "string.h"
#include "stdlib.h"
#include "assert.h"//初始化队列
typedef int QueueDataType;typedef struct queue {QueueDataType val;struct queue* next;
}Qnode;typedef struct Queue {Qnode* phead;//队头Qnode* ptail;//队尾int size;//队列中的有效数据
}Queue;//初始化队
void QueueInit(Queue* pq);//入队
void QueuePush(Queue* pq,QueueDataType x);//出队
void QueuePop(Queue* pq);//获取队首元素
QueueDataType QueueFront(Queue* pq);//获取队尾元素
QueueDataType QueueBack(Queue* pq);//获取队列有效个数
int QueueSize(Queue* pq);//判断队列是否为空,为空返回1,非空返回0
bool QueueEmpty(Queue* pq);//打印队列
void QueuePrint(Queue* pq);//销毁队列
void QueueDestory(Queue* pq);#define _CRT_SECURE_NO_WARNINGS 1//初始化队
void QueueInit(Queue* pq)
{assert(pq);pq->size=0;pq->phead=pq->ptail=NULL;
}//入队
void QueuePush(Queue* pq, QueueDataType x)
{assert(pq);assert(pq);Qnode* newnode = (Qnode*)malloc(sizeof(Qnode));if (newnode == NULL){printf("malloc fail\n");exit(-1);}pq->size++;newnode->val = x;newnode->next = NULL;if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}
}//出队
void QueuePop(Queue* pq) {assert(pq);Qnode* next = pq->phead->next;free(pq->phead);pq->size--;pq->phead = next;
}//获取队首元素
QueueDataType QueueFront(Queue* pq) {assert(pq);assert(pq->size > 0);assert(pq->phead);return pq->phead->val;
}//获取队尾元素
QueueDataType QueueBack(Queue* pq) {assert(pq);assert(pq->ptail);assert(pq->size > 0);return pq->ptail->val;
}//获取队列有效个数
int QueueSize(Queue* pq) {assert(pq);return pq->size;
}//判断队列是否为空,为空返回1,非空返回0
bool QueueEmpty(Queue* pq) {assert(pq);return pq->size == 0 ? 1 : 0;
}//打印队列
void QueuePrint(Queue* pq) {assert(pq);assert(pq->phead);while (!QueueEmpty(pq)){printf("%d\n", pq->phead->val);QueuePop(pq);}
}//销毁队列
void QueueDestory(Queue* pq) {assert(pq);Qnode* cur = pq->phead;while (cur) {Qnode* next = cur->next;free(cur);cur = next;}pq->phead = pq->ptail = NULL;
}typedef struct {Queue pq1;Queue pq2;} MyStack;MyStack* myStackCreate() {MyStack* ST=(MyStack*)malloc(sizeof(MyStack));QueueInit(&ST->pq1);QueueInit(&ST->pq2);return ST;
}void myStackPush(MyStack* obj, int x) {if(QueueEmpty(&obj->pq1)){QueuePush(&obj->pq2,x);}else{QueuePush(&obj->pq1,x);}
}int myStackPop(MyStack* obj) {if(QueueEmpty(&obj->pq1)){while((&obj->pq2)->phead!=(&obj->pq2)->ptail){QueuePush(&obj->pq1,QueueFront(&obj->pq2));QueuePop(&obj->pq2);}int vala=QueueFront(&obj->pq2);QueuePop(&obj->pq2);return vala;}if(QueueEmpty(&obj->pq2)){while((&obj->pq1)->phead!=(&obj->pq1)->ptail){QueuePush(&obj->pq2,QueueFront(&obj->pq1));QueuePop(&obj->pq1);}}int valb=QueueFront(&obj->pq1);QueuePop(&obj->pq1);return valb;
}int myStackTop(MyStack* obj) {if(QueueEmpty(&obj->pq1)){return (&obj->pq2)->ptail->val;}return (&obj->pq1)->ptail->val;
}bool myStackEmpty(MyStack* obj) {if(QueueEmpty(&obj->pq1)&&QueueEmpty(&obj->pq2)){return true;}return false;
}void myStackFree(MyStack* obj) {Qnode* cur1 = (&obj->pq1)->phead;while(cur1){Qnode* next=cur1->next;free(cur1);cur1=next;}(&obj->pq1)->phead=(&obj->pq1)->ptail=NULL;Qnode* cur2 = (&obj->pq2)->phead;while(cur2){Qnode* next=cur2->next;free(cur2);cur2=next;}(&obj->pq2)->phead=(&obj->pq2)->ptail=NULL;(&obj->pq2)->phead=(&obj->pq2)->ptail=NULL;free(obj);obj=NULL;
}/*** Your MyStack struct will be instantiated and called as such:* MyStack* obj = myStackCreate();* myStackPush(obj, x);* int param_2 = myStackPop(obj);* int param_3 = myStackTop(obj);* bool param_4 = myStackEmpty(obj);* myStackFree(obj);
*/

 

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

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

相关文章

微信小程序地图polyline坐标太多异常显示BUG

描述 微信小程序map地图上显示polyline线,点位超过1250个出现bug,(仅真机上出现,模拟器上正常) 这里以加载四川省边界为例, 以下是示例代码 // 读取geojson数据 uni.request({url: https://geo.datav.aliyun.com/a…

openplc Linux 使用modbus RTU 从机通讯

1.Linux 环境下,openplc 默认使用的是modbus tcp协议通信。 想要使用串口 modbus rtu 通讯可以通过在runtime中添加SlaveDevices从机设备 2.添加设备,分配地址。 左边添加串口配置,右边是需要通讯的地址,从机地址都是从100开始&am…

yolov8 区域计数

yolov8 区域计数 1. 基础2. 计数功能2.1 计数模块2.2 判断模块 3. 主代码4. 实验结果5. 源码 1. 基础 本项目是在 WindowsYOLOV8环境配置 的基础上实现的,测距原理可见上边文章 2. 计数功能 2.1 计数模块 在指定区域内计数模块 def count_objects_in_region(bo…

STM32 堆栈内存以及变量存储分布

STM32的程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内, 地址范围为0x0000 0000至0xFFFF FFFF。其中FLASH为ROM类型,储存的数据掉电不易失;RAM中存储的数据掉电易失。以STM32F103系列为例,最多有512KB的FLA…

Discuz! X3.4 升级至 Discuz! X3.5 详细教程

第一步:从其他以前的 Discuz! X 版本升级Discuz! X3.4 请先升级到Discuz! X3.4,升级教程网上比较普遍,在此不再论述。 第二步:Discuz! X3.4 升级至 Discuz! X3.5 (Discuz 从 X3.5 以后,不在发布GBK版本&…

【软考】UML中的图之类图

目录 1. 说明2. 图示3. 类图使用方式3.1 对系统的词汇建模3.2 对简单的协作建模3.3 对逻辑数据库模式建模 1. 说明 1.类图(Class Diagram)展现了一组对象、接口、协作和它们之间的关系。2.在面向对象系统的建模中所建立的最常见的图是类图。3.类图给出系…

离线数仓数据导出-hive数据同步到mysql

离线数仓数据导出-hive数据同步到mysql MySQL建库建表数据导出 为方便报表应用使用数据,需将ads各指标的统计结果导出到MySQL数据库中。 datax支持hive同步MySQL:仅仅支持hive存储的hdfs文件导出。所以reader选hdfs-reader,writer选mysql-wri…

怎样在外网登录访问CRM管理系统?

一、什么是CRM管理系统? Customer Relationship Management,简称CRM,指客户关系管理,是企业利用信息互联网技术,协调企业、顾客和服务上的交互,提升管理服务。为了企业信息安全以及使用方便,企业…

SSM小程序作品集展示微信小程序

采用技术 SSM小程序作品集展示微信小程序的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 用户功能 用户注册 用户首页 作品集 优秀作者 我的分享 管…

powershell@命令行提示符样式配置自定义@pwsh重写prompt显示电量内存时间等信息

文章目录 abstract流行的powershell prompt模块示例 powershell原生修改Prompt函数配置文档Prompt命令来自哪里 简单修改带上电量和时间的Prompt 复杂修改预览FAQ:没有必要修改相关仓库地址样式选择平衡样式花哨样式响应性能 小结 abstract 在 PowerShell 中,可以通…

CSDN积分和等级和 能创建专栏数量的关系。还差1000多分!

积分查询:CSDN 博客积分规则 博客积分是CSDN对用户努力的认可和奖励,也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。积分规则具体如下: 1、每发布一篇原创或者翻译文章:可获得10分; 2、每发布一篇转载…

做一个答题pk小程序多少钱

在探讨“做一个答题pk小程序多少钱”这一问题时,我们首先需要明确的是,小程序的价格并非固定不变,而是受到多种因素的影响。这些因素包括但不限于小程序的复杂度、功能需求、开发周期、技术难度以及开发团队的规模和经验等。因此,…

Web前端 JavaScript笔记7

js的执行机制 js是单线程 同步:前面一个任务执行结束之后,执行后一个 异步:异步任务,引擎放在一边,不进入主线程,而进入任务队列的任务 js通过浏览器解析,浏览器靠引擎解析 回调函数同步任务执行…

LabVIEW卡尔曼滤波技术

LabVIEW卡尔曼滤波技术 在现代航空导航中,高精度和快速响应的方位解算对于航空安全至关重要。通过LabVIEW平台实现一种卡尔曼滤波方位解算修正技术,以改善传统导航设备在方位解算中的噪声干扰问题,从而提高其解算精度和效率。通过LabVIEW的强…

Java基础之JVM基础调优与常见问题

常见命令 以下命令的介绍,全部在jdk8环境下运行的; jps ☆☆☆☆☆ 查看当前运行的进程号; jmap ☆☆☆ jmap命令可以查看jvm的内存信息,class对应的实例个数以及占用的内存大小 jmap -histo 查看当前java进程 [rdVM-8-12-c…

Ugee手写板Ex08 S设置流程

手写笔的结构 笔尖 鼠标左键 上面第一个键:鼠标右键(效果有时候也不完全等同) 上面第二个键:鼠标中键 WPS ①打开pdf ②批注->随意画->画曲线 效果如下:

小程序中使用HTTPS调用自带文本安全内容检测接口(msg_sec_check)的实现方法

在小程序中调用自带的文本安全内容检测接口,你需要使用小程序提供的wx.request方法。以下是一个示例代码: javascript代码: // 假设你已经获取了access_token,如果不知道如何获取,可以参考我上一篇文章 const access_token 你的access_tok…

Python 基于docker部署的Mysql备份查询脚本

前言 此环境是基于docker部署的mysql,docker部署mysql可以参考如下链接: docker 部署服务案例-CSDN博客 颜色块文件 rootbogon:~ 2024-04-18 16:34:23# cat DefaultColor.py ######################################################################…

java音乐播放器系统设计与实现springboot-vue

后端技术 SpinrgBoot的主要优点有: 1、为所有spring开发提供了一个更快、更广泛的入门体验; 2、零配置; 3、集成了大量常用的第三方库的配置; Maven: 项目管理和构建自动化工具,用于java项目。 java: 广泛使用的编程语…

python使用tkinter和ttkbootstrap制作UI界面(二)

这次讲解UI界面常用的主键,延续上文的框架进行编写,原界面如下: Combobox组件应用(下拉框) """Combobox组件"""global comvalue_operatorcomvalue_operator tk.StringVar()value_ope…