如何用两个栈模拟实现一个队列
s1和s2分别是两个栈,用两个栈实现一个队列的规则如下:
如何入队: 入队只向s1里面入队
如何出队: 看s2里面有没有值,有的话,直接出即可
s2里面没有值,为空怎么办?
将s1里面的值,全部颠倒存放到s2,这时候s2就不空了,则直接出即可
这里需要函数调函数,所以需要栈能够实现的相关函数,这里把链接如下,需要结合一起看。
(35条消息) 数据结构——栈(顺序栈)_张淑芬~的博客-CSDN博客
用两个栈模拟实现的队列的结构体设计:
//用两个栈模拟实现的队列的结构体
typedef struct Two_stack_queue
{struct Stack s1;//这里的Stack是顺序栈struct Stack s2;
}Two_stack_queue, * PTwo_stack_queue;
可执行函数声明:
//初始化
void my_Init_2stack_queue(struct Two_stack_queue* tsq);//入队
bool my_Push(PTwo_stack_queue tsq, ELEM_TYPE val);//出队(还需要一个输出参数,帮助我将出队的值带出来)
bool my_Pop(PTwo_stack_queue tsq, ELEM_TYPE* rtval);//获取队头元素值(还需要一个输出参数,帮助我将出队的值带出来)
bool my_Top(PTwo_stack_queue tsq, ELEM_TYPE* rtval);//判空
bool my_IsEmpty(PTwo_stack_queue tsq);//有效元素个数
int my_Get_length(PTwo_stack_queue tsq);//打印
void my_Show(PTwo_stack_queue tsq);//清空
void my_Clear(PTwo_stack_queue tsq);//销毁
void my_Destroy(PTwo_stack_queue tsq);
初始化;
//初始化
void my_Init_2stack_queue(struct Two_stack_queue* tsq)
{assert(tsq != NULL);Init_Stack(&tsq->s1);//直接调用s1和s2自身的初始化函数即可Init_Stack(&tsq->s2);
}
入队,出队
//入队
bool my_Push(PTwo_stack_queue tsq, ELEM_TYPE val)
{assert(tsq != NULL);return Push(&tsq->s1, val);//调用栈吱声的入队函数
}//出队(还需要一个输出参数,帮助我将出队的值带出来)
//从s2出,如果s2不空,直接出,
//如果s2空,先将s1的数据全部颠倒存放到s2里,这时s2就不空了
bool my_Pop(PTwo_stack_queue tsq, ELEM_TYPE* rtval)
{assert(tsq != NULL);if (my_IsEmpty(tsq))//证明模拟实现的队列里有数据,在哪不确定{return false;}if (IsEmpty(&tsq->s2))//确定了数据在s1里{ELEM_TYPE tmp;while (!IsEmpty(&tsq->s1))//只要s1里面还有值 就取出来放到s2里面{Pop(&tsq->s1, &tmp);Push(&tsq->s2, tmp);}return Pop(&tsq->s2, rtval);}else//如果s2不空 直接出值{return Pop(&tsq->s2, rtval);}
}
获取队头元素值(还需要一个输出参数,帮助我将出队的值带出来)
//获取队头元素值(还需要一个输出参数,帮助我将出队的值带出来)
bool my_Top(PTwo_stack_queue tsq, ELEM_TYPE* rtval)
{assert(tsq != NULL);if (my_IsEmpty(tsq))//证明模拟实现的队列里有数据,在哪不确定{return false;}if (IsEmpty(&tsq->s2)){ELEM_TYPE tmp;while (!IsEmpty(&tsq->s1))//只要s1里面还有值 就取出来放到s2里面{Pop(&tsq->s1, &tmp);Push(&tsq->s2, tmp);}return Top(&tsq->s2, rtval);}else{return Top(&tsq->s2, rtval);}
}
判空,有效元素个数
//判空
bool my_IsEmpty(PTwo_stack_queue tsq)
{assert(tsq != NULL);if (IsEmpty(&tsq->s1) && IsEmpty(&tsq->s2)){return true;}return false;
}//有效元素个数
int my_Get_length(PTwo_stack_queue tsq)
{assert(tsq != NULL);return Get_length(&tsq->s1)+Get_length(&tsq->s2);
}
打印,清空,销毁
//打印
void my_Show(PTwo_stack_queue tsq)
{assert(tsq != NULL);//先s2 后s1 //s2从上到下打印 s1从下到上int len = Get_length(&tsq->s2);for (int i = len - 1; i >= 0; i--){printf("%d ", tsq->s2.base[i]);}Show(&tsq->s1);
}//清空
void my_Clear(PTwo_stack_queue tsq)
{assert(tsq != NULL);Clear(&tsq->s1);Clear(&tsq->s2);
}//销毁
void my_Destroy(PTwo_stack_queue tsq)
{assert(tsq != NULL);Destroy(&tsq->s1);Destroy(&tsq->s2);
}
如何用两个栈模拟实现一个队列相关推荐
- 用栈实现队列---用两个栈模拟实现一个队列
入队列:直接将元素放进s1(s1栈顶为模拟队列的队尾); 出队列:如果s2非空,直接让s2出栈(s2栈顶为模拟队列的队头): 如果s2为空,将s1中所有元素导入s2中,然后让s2出栈. 获取队头元素 ...
- 《剑指offer》c++版本 9. 用两个栈来实现一个队列
如题: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 本题考察对数据结构队列,栈的理解.队列的特点是FIFO,先进先出.栈的特点是FILO,先进后出.题目要求我 ...
- 牛客网(剑指offer) 第五题 用两个栈来实现一个队列
//用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. //方法一:没有用到栈 $queue=array(); function mypush($node) {glo ...
- 化栈为队(两个栈来实现一个队列)
实现一个MyQueue类,该类用两个栈来实现一个队列. 示例: MyQueue queue = new MyQueue();queue.push(1); queue.push(2); queue.pe ...
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...
- N5-用两个栈来实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; /*** 用两个栈来实现一个队列,完成队列的Push和P ...
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution { ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- 剑指offer两个栈来实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2 ...
- 两个栈来实现一个队列的C++代码(某公司社会招聘笔试题)
利用两个栈来实现一个队列, 这个问题很常见. 最关键的是要有好的思路, 至于实现, 那是很简单的事情了. 在本文中, 也想说说自己的思路, 但是, 我觉得用代码来表述思路更符合我的习惯, 也是我的菜 ...
最新文章
- 基于用户投票的排名算法(一):Delicious和Hacker
- Android MTK平台最完备的开机动画修改教程
- smartform 中currency 字段的小数点问题
- PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较
- 最近微信方面的更新 getUserInfo:fail scope unauthorized
- JavaFX列表示例
- PHP语言 -- 发起流程
- 英特尔发布全新英特尔® INDE 2015工具套件
- 手机自动化测试:Appium源码分析之跟踪代码分析七
- 惠普台式电脑重装系统仍然启动不了,怎么办
- 1041: 谭浩强C语言(第三版)习题5.5
- 省市区三级联动(拼接写法)
- win10 同时多用户远程桌面连接-RDPWrap-v1.6.2-support-21H2-19044.1949
- (*(volatile unsigned int *))详解
- 淘宝网店如何提升无线端宝贝权重,抢占更多无线流量?
- idea IntelliJ IDEA 2018.2.5 x64 破解
- 地理计算 | EXCEL中快速计算列表的经纬度距离
- unity ShaderLab 基础之【像素混合Blend】Blend命令详解 shaderLab blend blendOp透明度颜色混合
- C# 改变DataGridView标题行的边框颜色
- 计算机设备的名称,计算机设备名称词汇
热门文章
- 广东省8月份同城快递和上门签收分析-你的签收率是多少?
- Visual Studio - 安装VAX
- SPSS新手教程——通过探索性分析,检验数据的正态性分布
- 常见 MIME 类型列表
- Cisco 路由器破解密码
- 什么叫误差的反向传播,反向传播误差怎么算的
- 【图像处理】色彩空间 YUV 420 SP / YUV 420 P 含义 RGB转换 YUV 黑色怎么表示
- mega软件 linux,Linux系统下使用MegaCli软件对磁盘阵列进行操作
- vue2.0网易云音乐播放器 (实时更新)
- ROON1.8无法找到asio驱动的解决办法