首页 > 编程知识 正文

使用两个栈实现一个队列,java栈的数据结构

时间:2023-05-04 22:19:19 阅读:26825 作者:3591

面试中经常出现手写两个队列实现一个堆栈,两个堆栈实现一个队列的问题,很头疼。 今天我仔细分析,给你看我想的Java代码。 (一个)两个队列实现一个堆栈。

将元素添加到两个队列中。 哪个队列为空,是为了在输出元素时移动对应的元素(末尾的元素除外),在非空队列中添加元素。 输出数据时,请对两个队列执行相变操作,将非空队列按顺序添加到空队列中,直到输出最后一个元素。

//*

*两个队列实现一个堆栈

* @auther gjdxbw

* @date 2019/7/18

*/

公共类twoqueueimplstack {

私密性queuequeue1=new array deque (;

私密性queuequeue2=new array deque (;

//*

*将数据压入堆栈

* @param element

*/

公共语音推送(集成器元件) {

//如果两个队列为空,则优先队列1

if(queue1.isempty () queue2.isEmpty () )。

queue1.添加(元素);

返回;

}

如果queue1为空,则queue2中有数据,可以直接放入queue2

if(queue1.isempty () ) ) ) )。

queue2.添加(元素);

返回;

}

如果queue1为空,则queue2中有数据,可以直接放入queue2

if(queue2.isempty () ) ) ) )。

queue1.添加(元素);

返回;

}

}

//*

*取出堆栈中的数据

* @return

*/

公共集成器轮询

//如果两个队列为空,则直接抛出异常

if(queue1.isempty () queue2.isEmpty () )。

thrownewruntimeexception (堆栈信息);

}

如果//queue1为空,则将queue2的元素依次添加到queue1中,然后弹出最后一个元素

if(queue1.isempty () ) ) ) )。

wile(queue2.size ) )1) {

队列1 .添加(队列2 .轮询);

}

返回队列2.poll (;

}

如果//queue2为空,则将queue1的元素依次添加到queue2中,然后弹出最后一个元素

if(queue2.isempty () ) ) ) )。

wile(queue1.size ) )1) {

队列2 .添加(队列1 .轮询);

}

返回队列1.poll (;

}

返回空值;

}

publicstaticvoidmain (字符串[ ] args ) {

twoqueueimplstackqs=newtwoqueueimplstack (;

QS.push(2;

QS.push(4;

QS.push(7;

QS.push(5;

系统. out.println (QS.poll ) );

系统. out.println (QS.poll ) );

QS.push(1;

系统. out.println (QS.poll ) );

}

}

输出结果:

(二)两个堆栈实现一个队列:

第一个堆栈只负责添加元素,第二个堆栈在弹出元素时,首先判断当前堆栈是否为空,如果为空,则将第一个堆栈的数据直接推入第二个堆栈,输出堆栈的第一个元素,从而实现排队效果; 如果第二个堆栈中有数据,直接将该数据推入第一个堆栈,输出时直接输出第二个堆栈顶部的元素即可!

//*

*在两个堆栈上实现一个队列

* @auther gjdxbw

* @date 2019/7/18

*/

公共类twostackimplqueue {

私密堆栈1=new stack (;

私密堆栈2=new stack (;

//*

*堆栈1只负责队列要素的压入

* @param element

*/

公共语音推送(集成器元件) {

sack1.添加(元素;

}

//*

*取出队列顶部的元素

* @return

*/

公共集成器轮询

//堆叠2为空时,将堆叠1中的元素推入堆叠2

if (堆叠2.isempty () ) ) )。

wile (堆栈1.size ) )0) {

堆叠2 .添加(堆叠1.pop ) );

}

}

if (堆叠2.isempty () ) ) )。

thrownewruntimeexception (' queue isempty!' );

}

Integer head=stack2.pop (;

返回头;

}

publicstaticvoidmain (字符串[ ] args ) {

twostackimplqueuesq=newtwostackimplqueue (;

sq.push(1;

sq.push(3;

sq.push(5;

sq.push(4;

sq.push(2;

系统. out.println (sq.poll ) );

系统. out.println (sq.poll ) );

sq.push(7;

系统. out.println (sq.poll ) );

}

}

输出结果:

请每天一点点进步,加油……。

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