算法开启队列转栈武魂
文章目录
- ==**队列接口见 [算法开启小码农队列血脉](https://blog.csdn.net/diandengren/article/details/121072953?spm=1001.2014.3001.5501)**==
- 用队列实现栈
- 题目
- 栈结构体
- 栈初始化
- 入“栈”
- 出“栈”并取栈顶元素
- 取栈顶元素
- 判断栈空
- 栈销毁
- 栈代码(接口代码去我上面文章取) [算法开启小码农队列血脉](https://blog.csdn.net/diandengren/article/details/121072953?spm=1001.2014.3001.5501)
队列接口见 算法开启小码农队列血脉
用队列实现栈
题目
栈结构体
typedef struct {Queue q1;Queue q2;//两个队列
} MyStack;
栈初始化
MyStack* myStackCreate() {MyStack* st = (MyStack*)malloc(sizeof(MyStack));QueueInit(&st->q1);QueueInit(&st->q2);return st;
}
入“栈”
void myStackPush(MyStack* obj, int x) {if(!QueueErase(&obj->q1)){QueuePush(&obj->q1,x);}else//两个都为空时push给q2{QueuePush(&obj->q2,x);}
}
出“栈”并取栈顶元素
int myStackPop(MyStack* obj) {Queue* emptyQ = &obj->q1;Queue* nonemptyQ = &obj->q2;//假设q2空,q1非空//不是我们就互换位置if(!QueueErase(emptyQ)){nonemptyQ = &obj->q1;emptyQ = &obj->q2;}//非空队长大于一时朝空队里面挪动数据while(QueueSize(nonemptyQ)>1){//把非队空的对头数拿出push给对空的QueuePush(emptyQ,QueueFront(nonemptyQ));//然后把非队空的对头数pop掉QueuePop(nonemptyQ);}//因为要返回栈顶数据所以存完再popint tmp = QueueFront(nonemptyQ);//此时非空队就只还有一个数据,pop掉就行QueuePop(nonemptyQ);return tmp;
}
取栈顶元素
int myStackTop(MyStack* obj) {//谁不为空就去谁队尾数据if(!QueueErase(&obj->q1)){return QueueBack(&obj->q1);}else{return QueueBack(&obj->q2);}
}
判断栈空
bool myStackEmpty(MyStack* obj) {return QueueErase(&obj->q1)&&QueueErase(&obj->q2);
}
栈销毁
void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}
栈代码(接口代码去我上面文章取) 算法开启小码农队列血脉
typedef struct {Queue q1;Queue q2;//两个队列
} MyStack;MyStack* myStackCreate() {MyStack* st = (MyStack*)malloc(sizeof(MyStack));QueueInit(&st->q1);QueueInit(&st->q2);return st;
}void myStackPush(MyStack* obj, int x) {if(!QueueErase(&obj->q1)){QueuePush(&obj->q1,x);}else//两个都为空时push给q2{QueuePush(&obj->q2,x);}
}int myStackPop(MyStack* obj) {Queue* emptyQ = &obj->q1;Queue* nonemptyQ = &obj->q2;//假设q2空,q1非空//不是我们就互换位置if(!QueueErase(emptyQ)){nonemptyQ = &obj->q1;emptyQ = &obj->q2;}//非空队长大于一时朝空队里面挪动数据while(QueueSize(nonemptyQ)>1){//把非队空的对头数拿出push给对空的QueuePush(emptyQ,QueueFront(nonemptyQ));//然后把非队空的对头数pop掉QueuePop(nonemptyQ);}//因为要返回栈顶数据所以存完再popint tmp = QueueFront(nonemptyQ);//此时非空队就只还有一个数据,pop掉就行QueuePop(nonemptyQ);return tmp;
}int myStackTop(MyStack* obj) {//谁不为空就去谁队尾数据if(!QueueErase(&obj->q1)){return QueueBack(&obj->q1);}else{return QueueBack(&obj->q2);}
}bool myStackEmpty(MyStack* obj) {return QueueErase(&obj->q1)&&QueueErase(&obj->q2);
}void myStackFree(MyStack* obj) {QueueDestroy(&obj->q1);QueueDestroy(&obj->q2);free(obj);
}
算法开启队列转栈武魂相关推荐
- 【PAT】PAT总结《搜索、打表、分治、排序算法、队列、栈、堆、Hash》
打表 打表这个技巧其实我们在素数部分的题已经涉及到了.还是要仔细思考,什么时候应该打表,打表有助于减少后续的计算的时候,我们应该打表, 特别是查询量特别大,即时计算无论多么快都会超时的情况.或者逆向运 ...
- 数据结构与算法 | 用队列实现栈
上一章实现了用栈来实现队列,这一次我们试试用队列来实现栈. 因为栈的特性是先进后出,队列是先进先出. 所以我们可以想到用两个队列,一个空队列,一个放数据,当我们入队的时候将数据直接放入非空队列,出队的 ...
- 一些值得注意的算法题——队列、栈
239. 滑动窗口最大值 // 使用一个单调双端队列维护滑动窗口中的最大值次大值等 // 每次移动窗口,将队尾比新增元素小的都删除(因为无论这些元素在不在窗口中,新增元素都是最大元素) // 如果队首 ...
- 算法开启栈转队列武魂
文章目录 ==**栈接口见 [算法开启小码农栈血脉](https://blog.csdn.net/diandengren/article/details/121055584?spm=1001.2014 ...
- 算法与数据结构(part5)--栈与队列
学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...
- java使用队列实现栈思路_算法面试:队列实现栈的方案
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇介绍的是如何用两个队列实现栈的问题.这道题作为上一篇文章算法面试:栈实现队列 ...
- 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...
- 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)
代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...
- python【力扣LeetCode算法题库】225-用队列实现栈
用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使用队列的基 ...
最新文章
- 用C语言实现三子棋游戏(附上思路+项目展示+源代码)
- 语义分割--ParseNet: Looking Wider to See Better
- Office 2016 for Mac 15.24已推送至Office Insider慢速更新通道
- python啥意思-星号*在Python中是什么意思?
- great sentences for university sentences
- Android学习----AndroidManifest.xml文件解析
- boost::math::bernoulli_b2n用法的测试程序
- sas ondemand for academics使用
- Flask中路由系统以及蓝图的使用
- 成为C++高手之实战项目
- Vue学习之监视属性watch
- Mac使用010editor
- VSeWSS更新文档
- 测试耳机的噪音测试软件,测试你的耳机音效,听这十首歌就够了
- html如何解决412问题,html5-video – 如何修复412(前置条件失败)错误HTML5视频标记
- 作为一个Java初学者,怎样从一个新手快速入门?
- android时钟字体,抖音文字云时钟app-抖音文字云时钟安卓版(word clock)v1.0下载
- 大卫·希尔伯特:数学界的无冕之王
- 代码随想录算法训练营第九天
- go http post请求