算法导论 10.1-6和10.1-7

算法导论 10.1-6

题目:说明如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。

  1. 思考

    栈实现的是先入后出策略,而队列实现的是先入先出策略。用栈实现队列重点是要实现出队。

    两个栈一个实现入队一个实现出队,要使出队的栈的栈顶为先入的元素,就要将入队的栈的元素弹出同时逆序压入出队的栈。

  2. 实现

    假定两个栈A和​B

    入队:向栈A中压入元素。

    出队:从栈B中弹出元素。当B中为空时,将A中的所有元素弹出(此时得到的元素为压入的逆序)然后将这些元素压入栈B,在对B执行pop,完成出队。

  3. 运行时间

    入队:O(1)

    出队:最差情况为O(n),当栈B为空时。

算法导论 10.1-7

题目:说明如何用两个队列来实现一个栈,并分析有关栈操作的运行时间。

  1. 实现

    假定两个队列AB。先设定A为主队列,B为从队列

    压入:主队列(A)元素入队。

    弹出:只保留最后一个主队列(A)入队的元素,将A中的其他元素出队再入队从队列(B),将主队列(A)中最后最后一个元素出队,即为弹出的元素。此时主从队列角色互换。

  2. 运行时间

    压入:O(1)

    弹出:O(n)n为栈中元素的个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值