首页 > 编程语言 > 详细

两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

时间:2015-07-25 21:13:43      阅读:365      评论:0      收藏:0      [点我收藏+]

两个栈实现队列两个队列实现堆栈问题,网上有很多资料。这里仅仅是叙述操作方法的介绍觉得至少。


两个栈实现一个队列

思想:假设两个栈分别为s1,s2。对s1进行入队,出队时,先推断s2是否为空,假设是则将s1中元素压入s2并弹出最上面元素,假设不是,则直接弹出s2最上面的元素。

<span style="font-size:18px;">EnQueue(s1,s2,k){
push(s1,k)</span><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size: 18px;">;</span></span><span style="font-size:18px;">
}
//出队
DeQueue(s1,s2){
if( IsEmptyStack(s2)){
while(sizeofStack(s1) !=0){
push(s2,pop(s1));
}
}
if(IsEmptyStack(s2)){
printf("stack overflow");
}
return pop(s2);
}</span>

两个队列实现一个栈

思想:一个队列用来入栈q1。还有一个作为中转站q2。对不为空的队列进行入栈和出栈操作,入栈时直接入队就可以。出栈时,先将队列中n-1个元素压入中转站,最后一个元素出队

<span style="font-size:18px;">push(q1,q2,k){
if(IsEmptyQueue(q1)){
EnQueue(q2,k);
}
else{
EnQueue(q1,k);
}
}</span>


出栈时须要两个暂时指针pushtmp和tmp作为入栈和中转站(该方法消耗空间)
<span style="font-size:18px;">pop(q1,q2){
Queue pushtmp,tmp;
if(IsEmptyQueue(q1)){
pushtmp=q2;
tmp=q1;
}
else{
pushtmp=q1;
tmp=q2;
}
if(IsEmptyQueue(pushtmp)){
printf("OverFlow");
}
else{
while(sizeof(pushtmp) !=1)
DeQueue(tmp,DeQueue(pushtmp));
}
return Dequeue(pushtmp);
}</span>



版权声明:本文博客原创文章。博客,未经同意,不得转载。

两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

原文:http://www.cnblogs.com/hrhguanli/p/4676445.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!