6、基础数据结构-队列

1、 队列的定义

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

队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表,LIFO。

2、队列的特点

  1. 线性表:链表或者数组
  2. FIFO

3、队列的分类

  1. 顺序(单向)队列:(Queue) 只能在一端插入数据,另一端删除数据
    顺序(单向)队列
  2. 循环(双向)队列(Deque):每一端都可以进行插入数据和删除数据操作
    循环(双向)队列(Deque)

4、队列的基本操作

队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:

  • 入队enqueue(),放一个数据到队列尾部;
  • 出队dequeue(),从队列头部取一个元素。

所以,队列跟栈一样,也是一种操作受限的线性表数据结构。作为一种非常基础的数据结构,队列的应用也非常广泛,特别是一些具有某些额外特性的队列,比如循环队列、阻塞队列、并发队列。它们在很多偏底层系统、框架、中间件的开发中,起着关键性的作用。

5、基于数组的实现

public class ArrayQueue {
    private int data[];

    //头
    private int head = 0;

    //尾
    private int tail = 0;

    //数组的大小,最大的空间
    private int n = 0;

    //当前已经存在几个数了
    private int size;

    public ArrayQueue(int cap) {
        this.data = new int[cap];
        n = cap;
    }

    /**
     * 入队列
     * @param m
     */
    public void push(int m) {
        // 判断队列是不是已经满了
        if (tail == n) {
            //
            return;
        }
        data[tail++] = m;
        size++;
    }

    public int pop() {
        if (isEmpty()) {
            return -1;
        }
        //涉及到数组移动
        return data[head++];
    }

    public boolean isEmpty() {
        return head == tail;
    }

    public void show(){

        System.out.println(Arrays.toString(data));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值