数据结构之队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列可以由数组实现,也可以由链表实现,下面代码以数组实现队列。

数组实现队列思路:
1)需要两个变量(或者说是指针),指向队列的头部和尾部,队列初始化时都指向为-1(代表指针开始指向队列头部的前一个位置),front为头部,rear为尾部。
2)定义一个数组array和一个maxSize变量,创建数组时用maxSize,这也是用数组实现队列的缺点之一,队列大小有限。
3)怎么判断队列为空?当front==rear相等时,队列为空。
4)怎么判断队列满了?当rear=maxSize-1,队列就满了。
5)队列插入元素时,从队尾插入,先判断队列是否满了,如果满了就不插入,未满就插入元素e,先将队尾rear指针向后移一位再插入数据
rear++ array[rear] = e
6)队列取出元素时,从队首取出,先判断队列是否为空,为空就不能取出,不为空就取出队列第一个元素,先将队首指针向后移一位再取出元素
front++ int e = array[front] return e

在这里插入图片描述
在这里插入图片描述

具体代码如下:
定义一个队列对象:

class ArrayQueue {
    private int maxSize;
    private int[] queue;
    private int front;
    private int rear;

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        queue = new int[maxSize];
        front = -1;
        rear = -1;
    }
}

判空,判断满,打印队列,插入和取出方法:

public Boolean isEmpty(){//当队首和队尾指针相同,即为空
    return this.front == this.rear;
}
public Boolean isFull(){
    return this.rear == maxSize - 1;
}
public void printQueue(){
    for (int i : queue) {
        System.out.printf("%3d",i);
    }
    System.out.println();
}
public void put(int e){
    if (this.isFull()){
        System.out.println("队列已经满了");
    }else {
        this.rear++;
        queue[rear] = e;
    }
}
public int get(){
    if (!this.isEmpty()){
        this.front++;
        int e = queue[front];
        queue[front] = 0;
        return e;
    }else{
        return -1;
    }
}

以上就用数组实现了队列,但队列只能使用一次,不能重复使用,后续考虑使用链表实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值