栈实现队列(队列实现栈)


我们在上期学了队列的相关知识,所以我们得实际应用。那栈和队列是否可以相互实现呢?那必然是可以的。接下来我们就实际操作一下吧!

栈实现队列

我们是通过栈来实现队列的,所以我们定义一个类QueueImplByStack;并且实现队列的接口。因为我们宏观来看还是在操作队列。我们的思想就是使用两个栈来实现一个队列的进行的操作。一个是主栈,一个是暂存元素的栈。比如出队操作,我们可以先把主栈内的元素仅仅只留栈底元素,其余全部弹栈到暂存栈里面,留下的元素直接弹出则就是队首元素出队操作,然后在把暂存栈里面的元素弹栈进入到主栈中,现在的顺序就是和之间的顺序是一样的了。其余的操作的思想和出队的思想是一样的。那类里面应该定义两个ArrayStack修饰的栈A与栈B。在写一个无参构造函数默认创建两个栈。

  private ArrayStack<E> stack1;
    private ArrayStack<E> stack2;
    public QueueImplByStack(){
        stack1 = new ArrayStack<>();
        stack2 = new ArrayStack<>();
    }

接下来就写我们的队列操作,操作都是和我们上期学的队列操作一样。乃我们就来写一下吧。

首先是入队操作,队列的入队操作就是从队尾进行入队,和栈思想是一样的,是从栈顶进元素。

出队操作是先进行判空。然后判断栈内有效元素个数是否为一,我们出队的是队首元素就相当于栈底元素,所以得要先不断弹出栈顶元素到stack2,然后在把stack1栈顶弹出即是队首元素出队。最后不要忘了把stack2进行弹栈在入栈到stack1里面。

在查看队首元素的时候思路和删除队首元素的思路是一样的,只是在stack1最后一个元素我们不进行弹栈而是记录起来,最后在返回就是队首元素。

判空操作,清空队列,求队列有效元素个数则都是判断stack1是否为空,清空stack1,求stack1里有效元素个数。

队列迭代器函数就直接调用stack1的迭代器就可以。队列的toString函数也直接调用stack1的toString函数即可。大致思路就是这样,我们直接上代码也包括了我们的测试类。

完整代码

package p2.线性结构;

import p1.接口.Queue;

import jav
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值