数据结构与算法 :队列与栈的操作以及Java中的List和Queue

本文将介绍用数组实现栈的方法,以及队列与栈的一些经典操作。

用数组实现栈

由于栈的逻辑结构是先进后出后进去的先出来,图解如下:

从图解看出,用数组实现栈时比较简单,只需要维护index的值防止数组越界即可,代码实现:

public class MyStack {
    private int[] array;
    private int index;
    
    public MyStack(int size) {
        this.array = new int[size];
    }
    
    //入栈
    public void push(int value) {
        if (index >= array.length) {
            throw new RuntimeException("栈满,不让加了");
        }
        array[index++] = value;
    }
    
    //出栈
    public int pop() {
        if (index <= 0) {
            throw new RuntimeException("栈空,不能取出");
        }
        return array[--index];
    }
}
复制代码

用数组实现队列

我们再来图解分析一下,如何用数组实现队列。

入队列,依次加入1,2,3,4,5:

队列达到给定数组的长度个元素后,下面来分析一下从队列取出数据、再添加数据的过程:

要符合队列的先进先出特性,这个数组就像一个循环数组,当队列满(指队列元素个数达到指定数组长度)了,取出元素,再继续添加元素的时候,index又来到了开始的位置,如此往复。

现在我们假设两个指针,begin和end,再增加一个变量size来表示队列当前元素个数。

当size大于指定数组长度时,就不能往队列里插入数据了;当size<0时,就不能从队列取数据了——也就是说用这个size变量来控制能否push和pop。

当要插入数据时,将要插入的数据放到end的位置,然后让end++,此时需要注意下标越界的问题,若end大于等于size了,就需要将end设置到0的位置了,图解如下:

当要取出数据时,因为队列的先进先出特点,最先进入到队列的数据在begin位置,所以从begin位置取数,同时让begin++,来到新的最早进入队列的数据位置,同理也要注意begin的下标是否越界。如下图所示:

从上面的分析可知,插入数据和取出数据用size和begin、end指针就可以完成。

用数组实现队列的代码如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值