首页 > 代码库 > 两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】
两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】
关于两个栈实现一个队列和两个队列实现一个栈问题,网上有很多资料。这里只描述自己认为操作最少的方法。
两个栈实现一个队列
思想:假设两个栈分别为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>
<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>
两个栈实现一个队列和两个队列实现一个栈【算法导论课后题】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。