首页 > 编程知识 正文

如何用两个栈实现一个队列,剑指offer分类

时间:2023-05-06 03:55:42 阅读:26807 作者:2943

主题方法1 :以堆栈1为主存储器,堆栈2为组队时的辅助空间方法2 :堆栈1和堆栈2均为主存储器

主题

在两个堆栈中实现一个队列,完成队列的推送和Pop操作。 队列中的元素是int类型。

方法1 :以堆栈1为主记忆,堆栈2为出队辅助空间思路入队操作:将元素直接添加到堆栈1中出队操作:将堆栈1中的元素全部移动到堆栈2中,将堆栈2的堆栈顶部元素出队,显示堆栈2中的元素if (堆栈1.empty () ) { return -1; //在堆栈2 while (! 堆叠1.empty () (堆叠2.push )堆叠1.pop ) ); //删除堆栈2的堆栈顶部result=stack2.pop (; //将堆栈2的所有元素先入后出堆栈1 while (! 堆叠2.empty () (堆叠1.push )堆叠2.pop ) ); }返回结果; }结果

方法2 )堆栈1和堆栈2均作为主存思路入队操作。 将元素放入有元素的堆栈中,默认情况下将第一个元素添加到堆栈1的出队操作)1.如果有元素的堆栈的顶级元素不是最后一个堆栈元素,则直接出队。 2 .如果共享元素堆栈中的堆栈顶部元素是最后一个堆栈元素,则将共享元素堆栈中除堆栈底部之外的所有元素移动到另一个空堆栈,并实现堆栈底部的公共语音推送(intvalue )。{ a=value if (堆叠2.empty () )堆叠1.push ) value; (else )堆叠2.push ) ) value; } } public int pop () { int result=-1; if (堆栈1.empty ) (堆栈2.empty ) ) {返回结果; (if (! 堆叠1.empty ()堆叠1.peek )!=a () {返回堆栈1.pop }; (if (! 堆叠2.empty ()堆叠2.peek )!=a ({返回堆栈2.pop ); (if )堆叠2.empty ) ) while )堆叠1.size )1)堆叠2.push )堆叠1.pop ) ); } result=stack1.pop (; } else { while (堆叠2.size (1)堆叠1.push )堆叠2.pop ) ); } result=stack2.pop (; }返回结果; }结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。