当前位置: 首页 > news >正文

力扣用队列实现栈

自己写的栈,再让其他函数去调用自己写的栈

typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;//单链表QDataType data;//放数据
}QNode;typedef struct	Queue
{QNode* phead;//头节点QNode* ptail;//尾节点QDataType size; //统计有多少节点
}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->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QueueDestroy(Queue* pq)//销毁
{assert(pq);//第一个结构体QNode* cur = pq->phead;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}void QueuePush(Queue* pq, QDataType x)//插入数据
{ QNode* newnode = (QNode*)malloc(sizeof(QNode));//扩大的是第一个结构体if (newnode == NULL){perror("malloc");return;}newnode->data = x;newnode->next = NULL;if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}void QueuePop(Queue* pq)//队头出数据就是删队头
{assert(pq);assert(!QueueEmpty(pq));if (pq->phead->next  == NULL){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--; 
}QDataType QueueFront(Queue* pq)//返回对头数据
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}QDataType QueueBack(Queue* pq)//返回队尾数据
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}int QueueSize(Queue* pq)//返回总的数据个数
{assert(pq);return pq->size;
}bool QueueEmpty(Queue* pq)//是空的返回真
{assert(pq);return pq->phead == NULL && pq->ptail == NULL; 
}

1.一个结构体包含俩个队列

typedef struct {Queue q1;//第一个队列Queue q2;//第二个队列
} MyStack;

2.希望创造一个包含两个队列的结构体,并且把这样的结构返回去,通过MyStack结构体一把molloc两个队列结构体


MyStack* myStackCreate() {MyStack*obj = (MyStack*)malloc(sizeof(MyStack));if(obj == NULL){perror("molloc");}QueueInit(&obj->q1);QueueInit(&obj->q2);return obj;
}

3.插入数据,q1队列有数据就进入(if语句)把新数据插入q1队列,q1队列没数据就把新数据插入q2队列,若是两个队列都是空就把新数据随便入一个队列

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

4.用两个队列像一个要像一个栈一样出数据取数据,把q1队列的数据倒q2,倒到了最后一个元素再去返回和删除元素

  //移除并返回栈顶元素
int myStackPop(MyStack* obj) {//空数据队列Queue* PEmptyQ = &obj->q1;//有数据队列Queue* PNonEmptyQ = &obj->q2;//假设空数据和有数据队列假设赋值错了if(!QueueEmpty(&obj->q1)){PEmptyQ = &obj->q2;PNonEmptyQ = &obj->q1;}//倒数据while(QueueSize(PNonEmptyQ) > 1){QueuePush(PEmptyQ,QueueFront(PNonEmptyQ));QueuePop(PNonEmptyQ);}int top = QueueFront(PNonEmptyQ);//调用了取对头数据函数QueuePop(PNonEmptyQ);//调用了删除队头数据函数return top;
}

 5.返回栈顶数据,就是返回队列的队尾数据
 //取栈顶元素
int myStackTop(MyStack* obj) {if(!QueueEmpty(&obj->q1)){return QueueBack(&obj->q1);//调用了取队尾的数据的函数}else{return QueueBack(&obj->q2);//调用了取队尾的数据的函数}
}

6.判创建的MyStack结构体q1和q2地址是不是空,如果是空的则标题2创建结构体失败了molloc也失败了
bool myStackEmpty(MyStack* obj) {return QueueEmpty(&obj->q1) && QueueEmpty(&obj->q2);
}

7.程序结束销毁所有建立的空间避免内存泄漏

//释放数据
void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}

相关文章:

力扣用队列实现栈

自己写的栈,再让其他函数去调用自己写的栈 typedef int QDataType; typedef struct QueueNode {struct QueueNode* next;//单链表QDataType data;//放数据 }QNode;typedef struct Queue {QNode* phead;//头节点QNode* ptail;//尾节点QDataType size; //统计有多少节…...

一朵华为云,如何做好百模千态?

点击关注 文丨刘雨琦、郝鑫 2005年华为提出网络时代的“All IP”,2011年提出数字化时代的“All Cloud”,2023年提出智能时代的“All Intelligence”。 截至目前,华为的战略升级经历了三个阶段。 步入智能化,需要迎接的困难依然…...

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀云…...

小程序编译器性能优化之路

作者 | 马可 导读 小程序编译器是百度开发者工具中的编译构建模块,用来将小程序代码转换成运行时代码。旧版编译器由于业务发展,存在编译慢、内存占用高的问题,我们对编译器做了一次大规模的重构,采用自研架构,做了多线…...

FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询

FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询 FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询ffmpeg -versionffmpeg -buildconfffmpeg -formatsffmpeg -muxersffmpeg -demuxersffmpeg -codecsffmpeg -decodersffmpeg -encodersffmpeg -bsfsffmpeg…...

Linux学习记录——삼십일 socket编程---TCP套接字

文章目录 TCP套接字简单通信1、服务端1、基本框架2、获取连接 2、客户端3、多进程4、多线程5、线程池6、简单的日志系统7、守护进程8、其它 TCP套接字简单通信 本篇gitee 学习完udp套接字通信后,再来看TCP套接字。 四个文件tcp_server.hpp, tcp_serve…...

【学习笔记】深度学习分布式系统

深度学习分布式系统 前言1. 数据并行:参数服务器2. 流水线并行:GPipe3. 张量并行:Megatron LM4. 切片并行:ZeRO5. 异步分布式:PATHWAYS总结参考链接 前言 最近跟着李沐老师的视频学习了深度学习分布式系统的发展。这里…...

【数据结构】树、二叉树的概念和二叉树的顺序结构及实现

目录 前言:一、树的概念及结构1.树的概念2.树的相关概念3.树的存储4.树在实际中的运用 二、二叉树概念及结构1.概念2.特殊的二叉树(1)满二叉树(2)完全二叉树 3.二叉树的性质4.二叉树的存储(1)顺序存储(2)链式存储 三、…...

rust学习-string

介绍 A UTF-8–encoded, growable string(可增长字符串). 拥有string内容的所有权 A String is made up of three components: a pointer to some bytes, a length, and a capacity. The length is the number of bytes currently stored in the buffer pub fn as_bytes(&…...

No167.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

【python】pycharm导入anaconda环境

参考 Pycharm导入anaconda环境的教程图解 - 知乎 (zhihu.com)...

【数据结构】逻辑结构与物理结构

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🌳逻辑结构 1.集合结构 2.线性结构 3.树形结构 4.图形结构或网状结构 🌳物理结构 1.顺序存储结构 2.链式存储结构 结语 根据视点的不同,我…...

HTML5高级部分

目录 一、拖拽API1.1 拖拽元素1.2 监听事件1.3 dataTransfer传递数据 二、媒体API2.1 常用监听事件2.2 常用API 三、画布API3.1 canvas 标签3.2 创建canvas对象3.3 常用API 四、地理API4.1 方法 一、拖拽API 1.1 拖拽元素 页面中设置了draggable"true"的元素可以进…...

浏览器输入 URL 并回车发生了什么

本文节选自我的博客:浏览器输入 URL 并回车发生了什么 💖 作者简介:大家好,我是MilesChen,偏前端的全栈开发者。📝 CSDN主页:爱吃糖的猫🔥📣 我的博客:爱吃糖…...

asp.net core mvc 文件上传,下载,预览

//文件上传用到了IformFile接口 1.1文件上传视图 <form action"/stu/upload" method"post" enctype"multipart/form-data"><input type"file" name"img" /><input type"submit" value"上传&…...

Axios有哪些常用的方法?

Axios是一个常用的JavaScript库&#xff0c;用于进行HTTP请求。它提供了一组简洁而强大的方法来发送各种类型的请求&#xff0c;并处理响应数据。以下是Axios中一些常用的方法及其格式&#xff1a; GET请求&#xff1a; axios.get(url[, config]).then(response > {// 请求…...

PL/SQL+cpolar公网访问内网Oracle数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…...

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令&#xff0c;代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI&#xff1a;稳定扩散网页用户界…...

分享三个国内可用的免费GPT-AI网站

AIchatOS国内的不需要梯子 AItianhu同上 国内百度的文心一言一样非常优秀...

使用SDKMAN在Linux系统上安装JDK

本文使用的Linux发行版为Rocky Linux 9.2&#xff0c;可以当做CentOS的平替产品。 SDKMAN是一个sdk包管理工具&#xff0c;通过自带的命令可以快速切换软件环境&#xff0c; 官网地址&#xff1a;https://sdkman.io/。 1、安装sdkman&#xff1a; # curl -s "https://ge…...

MySQL(8) 优化、MySQL8、常用命令

一、MySQL优化 从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间。 服务端参数配置&#xff1b; max_connections3000 连接的创建和销毁都需要系统资源&#xff0c;比如内存、文件句柄&#xff0c;业务说的支持…...

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(三)

思维导图 全选案例 大按钮控制小按钮 小按钮控制大按钮 css伪类选择器checked <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…...

嵌入式汇编大合集

嵌入式汇编 内联汇编的基本格式: asm volatile( /* volatile : 可选,禁止编译器对汇编代码进行优化 */"汇编指令" /* 汇编指令间使用\n分隔 */:"=限制符"(输出参数):"限制符"(输入参数):保留列表 )共四个部分:汇编语句,输出部分,输入部分…...

C#WPF框架MvvMLight应用实例

本文实例演示C#WPF框架MvvMLight应用实例。 目录 一、MVVM概述 二、MVVMLight概述 三、使用MVMLight框架 一、MVVM概述 MVVM概述MVVM是Model-View-ViewModel的简写,主要目的是为了解耦视图(View)和模型(Model)。...

【JVM】双亲委派模型

双亲委派模型 1. 什么是双亲委派模型2. 双亲委派模型的优点 1. 什么是双亲委派模型 提到 类加载 机制&#xff0c;不得不提的一个概念就是“双亲委派模型”。 双亲委派模型指的就是 JVM 中的类加载器如何根据类的全限定名找到 .class 文件的过程 类加载器: JVM 里面专门提供…...

多叉树+图实现简单业务流程

文章目录 场景整体架构流程业务界面技术细节小结 场景 这次遇到一个需求,大致就是任务组织成方案,方案组织成预案,预案可裁剪调整.预案关联事件等级配置,告警触发预案产生事件.然后任务执行是有先后的,也就是有流程概念. 整体架构流程 方案管理、预案管理构成任务流程的基础条…...

Word | 简单可操作的快捷公式编号、右对齐和引用方法

1. 问题描述 在理工科论文的写作中&#xff0c;涉及到大量的公式输入&#xff0c;我们希望能够按照章节为公式进行编号&#xff0c;并且实现公式居中&#xff0c;编号右对齐的效果。网上有各种各样的方法来实现&#xff0c;操作繁琐和简单的混在一起&#xff0c;让没有接触过公…...

leetCode 123.买卖股票的最佳时机 III 动态规划 + 状态压缩

123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff0…...

JavaScript计算两个时间相差多少个小时的封装函数

js中计算两个时间相差小时数 在JavaScript中&#xff0c;你可以使用Date对象来处理日期和时间。下面是一个函数&#xff0c;它接受两个时间字符串作为参数&#xff0c;并返回两者之间的时间差&#xff08;以小时为单位&#xff09;&#xff1a; function calculateHours(time…...

Qt 画自定义饼图统计的例子

先给出结果图&#xff0c;这个例子是将各种事件分类然后统计的其比例&#xff0c;然后画饼图显示出来 这个是我仿照官方给的例子&#xff0c;让后自己理解后&#xff0c;修改的&#xff0c;要生成饼图&#xff0c;需要QT的 charts 支持&#xff0c;安装QT 没有选择这个的&#…...

拼团购物网站怎么做/小程序制作流程

对于很多没有接触过web前端的小白来说&#xff0c;只知道前端就是网页&#xff0c;前端就是大家看到的页面&#xff0c;可对于想要转行或者进入前端的同学&#xff0c;他们更关心web前端学什么&#xff0c;要学多久&#xff0c;下面和千锋广州小编一起来看看吧! 1、前端开发要…...

自己做软件 做网站需要学会哪些/做小程序的公司

格子衫、发量少、木讷、肥宅……长久以来&#xff0c;程序员职业标签化现象普遍。然而播妞想说&#xff0c;这些都是片面的&#xff01;程序员是小编见过最优秀的一个群体&#xff01; 程序员们对世界充满热情&#xff0c;他们思维敏捷而活跃&#xff0c;他们思想睿智而深邃。一…...

网站制作软件下载/广州最近爆发什么病毒

右键工程属性 -> 配置属性 -> 生成事件 ->生成后事件&#xff0c;命令行中的路径加上双引号&#xff0c;如 copy $(ProjectDir)\export\win32\Debug\$(ProjectName).dll $(OutDir) 修改为 copy "$(ProjectDir)\export\win32\Debug\$(ProjectName).dll" &quo…...

天河网站建设设计/网络推广员是干嘛的

数据科学(Data Science)作为一门新兴的学科&#xff0c;很多概念的定义其实没有特别明确。这点跟国内喜欢提的大数据很像。大数据这个概念总让我感觉有点无所适从&#xff0c;因为我实在说不清大数据的明确定义和具体范围。 国外一个做数据服务的网站mango-solutions将从事数据…...

望京网站建设/整合营销策略

在用webpack之前... 或说没有实现组件化之前的web1.0时代! 最终迈向web2..0之后的时代! 华丽的分割线 安装步骤有两步: 1.首先安装 全局 npm install -g webpack 2.再安装局部 npm install --save-dev webpack 为了控制版本不一的情况&#xff0c;实际情况就是这样. 安装好了就…...

网站建设与维护的不足/宁波优化关键词首页排名

LeNet简介 LeNet-5出自论文Gradient-Based Learning Applied to Document Recognition&#xff0c;是一种用于手写体字符识别的非常高效的卷积神经网络。 卷积神经网络 卷积神经网络能够很好的利用图像的结构信息。LeNet-5是一个较简单的卷积神经网络。下图显示了其结构&…...