当前位置:   article > 正文

《征服数据结构》队列和循环队列

《征服数据结构》队列和循环队列

摘要:

1,队列的介绍

2,队列的数组实现

3,队列的链表实现

4,循环队列的介绍

1,队列的介绍

队列(queue)是一种先进先出(FIFO, First-In-First-Out)的数据结构,就像大家排队买票一样,先来的先买。队列只允许在后端(rear)插入,在前端(front)删除。

98a03ab010b372d97289933ab5ff9f99.png

队列是一种非常简单的数据结构,在考试和面试中遇到的也比较多,队列的实现方式一般有两种方式,一种是通过数组实现,一种是通过链表实现。

2,队列的数组实现

使用数组实现队列需要先声明一个数组,然后使用两个变量rear和front分别指向队列的尾部和头部,rear实际指向的是尾部元素的下一个位置。

因为数组的长度在初始化的时候就已经确定,当队列中元素的个数等于数组长度的时候就不能再添加了,这个时候也可以考虑扩容,原理比较简单,我们直接看下代码。

0b10d18c34262e9bba9b939f52486d48.png

Java 代码:

  1. public class Queue<E> {
  2.     private final Object[] data; // 队列中存放元素的数组。
  3.     private final int maxSize;// 队列的最大容量,超过最大容量可以考虑扩容。
  4.     private int size; // 队列中元素的个数
  5.     private int front = 0;// 队列的头,只能删除,指向队列的第一个元素
  6.     private int rear = 0// 队列的尾,只能添加,指向队列最后一个元素的下一个位置
  7.     public Queue(int maxSize) {
  8.         if (maxSize <= 0)
  9.             throw new IllegalArgumentException("队列容量必须大于0 : " + maxSize);
  10.         this.maxSize = maxSize;
  11.         data = new Object[this.maxSize];
  12.     }
  13.     // 这地方可以扩容也可以抛异常,这里我们就不在扩容了,关于扩容,大家可以自己去实现
  14.     public void add(E val) {
  15.         if (isFull())
  16.             throw new IllegalStateException("队列已经满了,无法再加入……");
  17.         data[rear++] = val;// 添加元素。
  18.         size++;
  19.     }
  20.     // 删除元素
  21.     public E poll() {
  22.         if (isEmpty())
  23.             throw new IllegalStateException("队列是空的,无法删除……");
  24.         E res = (E) data[front];
  25.         data[front++] = null;
  26.         size--;
  27.         return res;
  28.     }
  29.     // 获取队列头部元素
  30.     public E top() {
  31.         if (isEmpty())
  32.             throw new IllegalStateException("队列为空");
  33.         return (E) data[front];
  34.     }
  35.     public boolean isEmpty() {// 队列是否为空
  36.         return size == 0;
  37.     }
  38.     public boolean isFull() {// 队列是否满
  39.         return rear == maxSize;
  40.     }
  41.     public int size() {// 队列中元素的个数
  42.         return size;
  43.     }
  44. }

C++代码:

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号