Java实现--数据结构--队列

队列的介绍

队列就是一种先进先出的数据结构

例如 排队打饭

我们依旧采用数组实现队列。
不管用什么实现,重要的是什么? 当然是要理解他的思想啊!!!!!!

  • 队列的基本操作就是 入队 出队 他需要两个指针哦,一个指向队头 ,一个指向队尾。
  • 以及队列的大小。

上代码(一步一步来)后面有完整代码。。。。

先定义队列 做准备工作

说明一点 : 头指针要比尾指针快一步,因为如果判空的时候,我们会写 fitst == end ,但是假设这样一种情况,就是 当两个头尾指针都为0的情况下。此时栈里还有一个数字,但是根据我们的逻辑 却是空的。
在这里插入图片描述

    private Object[] queue;  // 定义数组
    private int maxSize;  // 队列大小
    private int fist;  // 指向队头的指针
    private int end;   // 指向队尾的指针
    
    public MyQueue() {
    }
	// 构造器来初始化
    public MyQueue(int maxSize) {
        this.maxSize = maxSize;
        queue = new Object[maxSize];
        this.fist = 0;   
        this.end = -1;// end始终慢first一步(灾难始终慢我一步(狗头))
    }

我们判断队列为空的情况

  // isEmpty ?
    public boolean isEmpty() {
        return fist == end - 1; // so,判空的时候记得给end-1 就ok啦。
    }

我们判断队列满的情况

兄台,坚持一下,看完好吧…,要学习,要努力,不要懈怠。干掉自己
哦?不对,是干掉困难,我们的目标就是充实自己(搞钱)!!!

   // isFull
    public boolean isFull() {
        return end == maxSize - 1;  // 这没啥说的吧。。。。
    }

入队 (入队?入什么队?当然是党的队伍啦!)

同志,信仰不动摇,你是NO.1!

OK ,Go on 吧

// add
    public void add(E element) throws Exception {
        if (isFull()) {
            System.out.println("队列满了.................."); // 我抛异常,你们大可不抛,注解sout输出即可。重点是什么?理解思想好吧。。。
            return ;
        }
        queue[++end] = element; // 入队,加一  
    }

出队 (这可不是出党队伍啊。。狗头)

出队这里有个问题,就是说,我们出队是队头出对吧,按理说是frist++一下,但是就会到最后,本来是5个队列大小的空间,最后一个都放不了。 因为后面的元素没往前移动,每次出队就浪费前一个空间。所以我们就把元素向前移动一下。
在这里插入图片描述

  // remove
    public E remove() throws Exception {
        if(isEmpty()) {
            throw new Exception("队列为空...........");
        }
        E data = (E) queue[fist];
        for (int i = fist; i < end; i++) {
            queue[i] = queue[i+1];
        }
        end--;
        return data;
    }

完整代码

package com.my.Queue;

/**
 * @description: 队列的基本操作  入队 出队
 **/
public class MyQueue<E> {
    private Object[] queue;
    private int maxSize;
    private int fist;
    private int end;

    public MyQueue() {
    }

    public MyQueue(int maxSize) {
        this.maxSize = maxSize;
        queue = new Object[maxSize];
        this.fist = 0;
        this.end = -1;
    }

    // isFull
    public boolean isFull() {
        return end == maxSize - 1;
    }

    // isEmpty
    public boolean isEmpty() {
        return fist - 1 == end;
    }

    // add
    public void add(E element) throws Exception {
        if (isFull()) {
            System.out.println("队列满了..................");
            return ;
        }
        queue[++end] = element;
    }

    // remove
    public E remove() throws Exception {
        if(isEmpty()) {
            throw new Exception("队列为空...........");
        }
        E data = (E) queue[fist];
        for (int i = fist; i < end; i++) {
            queue[i] = queue[i+1];
        }
        end--;
        return data;
    }

    // print queue
    public void print() {
        if(isEmpty()) {
            System.out.println("队列空...........");
        }
        for (int i = fist; i <= end; i++) {
            System.out.print(queue[i]+" ");
        }
        System.out.println();
    }
}

兄der们 加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值