本文主要是介绍为什么循环队列要浪费一个存储空间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是队列
队列和数组,链表,栈一样都是属于线性数据结构,而队列又和栈比较相似,都属于操作受限的数据结构,其中栈是“后入先出”,而队列是“先进先出”。
和栈一样,队列也仅有两个基本操作:入队和出队(栈则是入栈和出栈)。往队列中放元素称之为入队,往队列中取元素称之为出队,然而相对于栈来说,队列又会复杂一点。
队列中通常需要定义两个指针:head
和 tail
(当然,也有称之为:front
和 rear
)分别用来表示头指针和尾指针。初始化队列时,head
和 tail
相等,当有元素入队时,tail
指针往后移动一位,当有元素出队时,head
指针往后移动一位。
队空和队满
根据上面的队列初始化和入队出队的过程,我们可以得到以下三个关系:
- 初始化队列时:
head=tail=-1
(这里也可以设置为0
,看具体实现)。 - 队列满时:
tail=size-1
(其中size
为初始化队列时队列的大小)。 - 队列空时:
head=tail
(比如上图中的第一和第三个队列)。
队列的实现
和栈一样,队列也可以通过数组或者链表来实现,通过数组来实现的队列我们称之为“顺序队列”,通过链表实现的队列称之为“链式队列”。
数组实现队列
package com.lonely.wolf.note.queue;/*** 基于数组实现自定义单向队列。FIFO(first in first out)先进先出* @author lonely_wolf* @version 1.0* @date 2021/12/26* @since jdk1.8*/
public class MyQueueByArray<E> {public static void main(String[] args) {MyQueueByArray myQueue = new MyQueueByArray(3);System.out.println("队列是否为空:" + myQueue.isEmpty());//输出:truemyQueue.enqueue(1);myQueue.enqueue(2);myQueue.enqueue(3);System.out.println("队列是否已满:" + myQueue.isFull());//输出:trueSystem.out.println("第1次出队:" + myQueue.dequeue());//输出:1System.out.println("第2次出队:" + myQueue.dequeue());//输出:2System.out.println("第3次出队:" + myQueue.dequeue());//输出:3System.out.println("队列是否为空:" + myQueue.isEmpty());//输出:trueSystem.out.println("队列是否已满:" + myQueue.isFull());//输出:true}private Object[] data;private int size;//队列长度private int head;//队列头部private int tail;//队列尾部public MyQueueByArray(int size) {//初
这篇关于为什么循环队列要浪费一个存储空间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!