数据结构7-用栈实现队列/用队列实现栈

栈的概念:

队列的概念:

使用栈实现队列,最主要的问题是,出队时要弹出栈底的数据1,使用双栈来解决这个问题,st_push里面压入了12345,要弹出1 ,先把st_push的数据压入 st_pop, 由于栈 后进先出的性质,全部压入之后,就变成了54321,此时1就是st_pop的栈顶数据。通过st_pop就可以移除或返回“队列”的开头元素,从而实现pop()  peak()两个功能。一个栈st_push用于从“队尾”压入数据,另一个栈st_pop用于从“队头”弹出数据。

empty()功能  return st_push.empty()&&st_pop.empty() 即可

push()功能, st_push.push(x)即可

使用队列实现栈,难点在于“出栈”时要弹出队列最后面的元素,也可以使用双队列实现

pop()实现

这两个队列中,一个用于存数据非空,另一个用来导数据,不用的时候就是空队列。要实现“出栈”也就是要弹出队尾的1,可以把队列q1的元素压入q2,之留下最后一个元素1,可以用while( q1.size()>1)控制,循环结束之后就只剩下最后一个元素1了,这样q1就能弹出/返回队列中的最后一个元素了。   总的来说就是把非空的链表里的元素导入空链表,只剩下最后一个元素时停止导入,返回值并弹出即可

top()实现

哪个队列非空,就return 这个队列的 back()

push()实现

往非空的队列push即可

empty()

return  q1.empty()&&q2.empty()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值