当前位置: 首页 > 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…...

保姆级教程:Langchain框架详解 - 大模型开发者的必备技能

什么是Langchain Langchain是一款提供给用户与大模型之间快捷沟通的代理框架&#xff0c;其核心设计思想就是整合各大模型厂商的接口&#xff0c;给用户提供一个快捷入口能快速实现自己的agent。 核心组件 •agent&#xff1a;Langchain的核心部分&#xff0c;所有的操作都围…...

OpenClaw隐私保护方案:百川2-13B本地化部署处理敏感数据实战

OpenClaw隐私保护方案&#xff1a;百川2-13B本地化部署处理敏感数据实战 1. 为什么选择本地化部署处理敏感数据 去年我在帮一家小型律所做文档自动化改造时&#xff0c;遇到了一个棘手问题。他们需要从大量客户合同中提取关键条款&#xff0c;但合同内容涉及大量商业机密和客…...

OpenClaw轻量化方案实测:nanobot镜像性能与成本分析

OpenClaw轻量化方案实测&#xff1a;nanobot镜像性能与成本分析 1. 为什么需要轻量化OpenClaw方案 第一次听说OpenClaw时&#xff0c;我就被它的自动化能力吸引了——能让AI像人类一样操作我的电脑&#xff0c;完成各种重复性工作。但当我真正尝试在本地部署标准版OpenClaw时…...

STM32CubeIDE开发环境详解与实战指南

STM32CubeIDE开发环境全解析&#xff1a;从入门到实战1. 开发环境概述1.1 STM32CubeIDE核心特性STM32CubeIDE是基于Eclipse框架的集成开发环境&#xff0c;专为STM32微控制器设计。其主要技术特性包括&#xff1a;集成STM32CubeMX配置工具内置GCC编译工具链支持GDB调试接口跨平…...

从供热管道泄漏模拟出发,聊聊Fluent中那些容易被忽略的‘粘性模型’选择细节

从供热管道泄漏模拟看Fluent粘性模型选择的工程智慧 供热管道泄漏事故的数值模拟一直是市政工程中的难点——当高温高压流体从破损处喷涌而出时&#xff0c;流动形态会经历从管道内湍流到自由射流的复杂转变。这种多尺度流动对湍流模型的选择提出了严苛考验&#xff0c;而大多数…...

Pixel Dream Workshop 算法原理浅析:从扩散模型到创意生成

Pixel Dream Workshop 算法原理浅析&#xff1a;从扩散模型到创意生成 1. 引言&#xff1a;理解扩散模型的价值 最近两年&#xff0c;扩散模型在图像生成领域掀起了一场革命。从最初的DALLE到Stable Diffusion&#xff0c;再到各种创意生成工具&#xff0c;这项技术正在改变我…...

从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么?

从订餐流程到并发编程&#xff1a;Petri网中的‘库所’与‘变迁’到底在模拟什么&#xff1f; 想象一下&#xff0c;你正在用手机订外卖&#xff1a;选择菜品、下单支付、等待制作、骑手配送——这个看似简单的流程背后&#xff0c;隐藏着一个精妙的系统状态转换模型。这正是Pe…...

PCB设计中孔间距的DFM隐患,你避开了吗?

1. PCB孔间距设计&#xff1a;你可能忽略的定时炸弹 刚入行那会儿&#xff0c;我总觉得PCB设计就是把线路连通就行&#xff0c;直到亲眼看到产线上因为孔距问题报废的第三批板子——密密麻麻的破孔像蜂窝煤&#xff0c;有的孔边缘铜箔直接翘起来短路。老师傅指着板子说&#xf…...

谷歌DeepMind与卡内基梅隆大学揭秘声音背后的脸

这项由谷歌DeepMind与卡内基梅隆大学联合开展的研究&#xff0c;发表于2024年的计算机视觉与模式识别顶级会议CVPR&#xff08;IEEE/CVF Conference on Computer Vision and Pattern Recognition&#xff09;&#xff0c;论文编号为arXiv:2404.01975&#xff0c;有兴趣深入了解…...

QLVideo:macOS视频管理效率提升的完整解决方案

QLVideo&#xff1a;macOS视频管理效率提升的完整解决方案 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.com/g…...