文章目录

  • ==**队列接口见 [算法开启小码农队列血脉](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);
}

算法开启队列转栈武魂相关推荐

  1. 【PAT】PAT总结《搜索、打表、分治、排序算法、队列、栈、堆、Hash》

    打表 打表这个技巧其实我们在素数部分的题已经涉及到了.还是要仔细思考,什么时候应该打表,打表有助于减少后续的计算的时候,我们应该打表, 特别是查询量特别大,即时计算无论多么快都会超时的情况.或者逆向运 ...

  2. 数据结构与算法 | 用队列实现栈

    上一章实现了用栈来实现队列,这一次我们试试用队列来实现栈. 因为栈的特性是先进后出,队列是先进先出. 所以我们可以想到用两个队列,一个空队列,一个放数据,当我们入队的时候将数据直接放入非空队列,出队的 ...

  3. 一些值得注意的算法题——队列、栈

    239. 滑动窗口最大值 // 使用一个单调双端队列维护滑动窗口中的最大值次大值等 // 每次移动窗口,将队尾比新增元素小的都删除(因为无论这些元素在不在窗口中,新增元素都是最大元素) // 如果队首 ...

  4. 算法开启栈转队列武魂

    文章目录 ==**栈接口见 [算法开启小码农栈血脉](https://blog.csdn.net/diandengren/article/details/121055584?spm=1001.2014 ...

  5. 算法与数据结构(part5)--栈与队列

    学习笔记,仅供参考,有错必纠 文章目录 算法与数据结构–基于python 栈 栈是什么 栈(ADT)的操作 栈的实现 队列 队列是什么 队列的操作 队列的实现 双端队列 双端队列是什么 双端队列的操作 ...

  6. java使用队列实现栈思路_算法面试:队列实现栈的方案

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇介绍的是如何用两个队列实现栈的问题.这道题作为上一篇文章算法面试:栈实现队列 ...

  7. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  8. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  9. python【力扣LeetCode算法题库】225-用队列实现栈

    用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使用队列的基 ...

最新文章

  1. 用C语言实现三子棋游戏(附上思路+项目展示+源代码)
  2. 语义分割--ParseNet: Looking Wider to See Better
  3. Office 2016 for Mac 15.24已推送至Office Insider慢速更新通道
  4. python啥意思-星号*在Python中是什么意思?
  5. great sentences for university sentences
  6. Android学习----AndroidManifest.xml文件解析
  7. boost::math::bernoulli_b2n用法的测试程序
  8. sas ondemand for academics使用
  9. Flask中路由系统以及蓝图的使用
  10. 成为C++高手之实战项目
  11. Vue学习之监视属性watch
  12. Mac使用010editor
  13. VSeWSS更新文档
  14. 测试耳机的噪音测试软件,测试你的耳机音效,听这十首歌就够了
  15. html如何解决412问题,html5-video – 如何修复412(前置条件失败)错误HTML5视频标记
  16. 作为一个Java初学者,怎样从一个新手快速入门?
  17. android时钟字体,抖音文字云时钟app-抖音文字云时钟安卓版(word clock)v1.0下载
  18. 大卫·希尔伯特:数学界的无冕之王
  19. 代码随想录算法训练营第九天
  20. go http post请求

热门文章

  1. PostgreSQL psql 命令语法参数说明
  2. Unity3D —— 手机设备震动接口
  3. 解密古代五大美男的凄惨结局
  4. git服务器更换IP地址后本地仓库设置
  5. java生成唯一订单号
  6. HDU 5964 平行四边形/Pland 【平面几何】
  7. 微信营销解密个人分析
  8. 复制一段文本粘贴到Excel中(带自动换格换行)
  9. 钢铁侠材质制作——2、线条轮廓部分的制作
  10. Web前端开发常用英文