1.什么是队列?
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
2. 队列的特点:
队列是一种先进先出(First In First out)的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。
3. 队列顺序存储有什么不足?
使用数组实现的顺序存储,当做出队列操作时,所有的元素都需要向前移动一位,性能很低。
4. 什么是循环队列?
队列头尾相接的顺序存储结构称为循环队列。
如图所示:front记住队头元素下标,rear记住队尾元素的下一个元素。
注意:
1. 只凭等式front=rear是无法判断队空还是队满,所以我们约定当队列头指针front在队尾指针rear的下一个位置上时,作为队列"已满"的标志,当队列满时,数组中还会有一个空闲位置。
2. 我们也可以设置一个标志变量flag,当(front == rear && flag == 0) 队列为空, 当(front == rear && flag == 1)队列为满。
5. Java使用数组实现循环队列:
//循环队列的顺序存储结构(数组实现)
public class LoopQueue<T> {
private Object[] arr; // 对象数组,队列最多存储
private int front; // 记住队首下标位置
private int rear; // 记住队尾下标的下一个位置
private static final int DEFAULT_SIZE = 3; // 定义数组默认长度
public LoopQueue() {
this(DEFAULT_SIZE);
}
public LoopQueue(int size) {
arr = new Object[size];
front = 0;
rear = 0;
}
// 将元素追加到队列尾部
public boolean enqueue(T data) {
if ((rear + 1) % arr.length == front) { // 判断队列是否已满
System.out.println("队列已满,无法入队..");
return false;
}
arr[rear] = data; // 将元素data赋值到队尾
System.out.println(data + "入队..");
rear = (rear + 1) % arr.length; // real下标向后移一位,若到最后则转到数组头部
return true;
}
// 队列头部的第一个元素出队
@SuppressWarnings("unchecked")
public T dequeue() {
if (rear == front) { // 判断队列是否为空
System.out.println("队列已空,无法出队..");
return null;
}
Object data = arr[front];
System.out.println(data + "出队..");
front = (front + 1) % arr.length; // front下标向后移一位,若到最后则转到数组头部
return (T) data;
}
// 获取队列中元素个数
public int size() {
return (rear - front + arr.length) % arr.length;
}
public static void main(String[] args) {
LoopQueue<String> queue = new LoopQueue<String>();
queue.enqueue("张三");
queue.dequeue();
queue.enqueue("李四");
queue.enqueue("王五");
queue.enqueue("赵六");
queue.dequeue();
queue.enqueue("田七");
queue.dequeue();
queue.enqueue("周八");
System.out.println("队列中元素个数为: " + queue.size());
}
}
6. 循环队列的不足:
如果只是顺序存储,算法的性能不咋的,但是循环队列却不得不面临数组可能溢出的问题,有什么好的解决办法吗?
请见下节 --
链队列,未完待续 . . .
分享到:
相关推荐
大话数据结构 .pptx
接着,书中会深入讲解存储层次结构,从CPU缓存到主内存,再到外部存储设备,阐述如何通过缓存策略优化数据访问速度。此外,还会涉及虚拟内存管理,解释如何在物理内存不足时,利用硬盘空间作为虚拟内存,确保系统的...
《大话数据分析:Tableau数据可视化实战》的数据集是一份重要的资源,对于想要学习和提升Tableau数据可视化技能的人来说极具价值。Tableau是一款强大的商业智能工具,它允许用户通过直观的拖放界面来探索和可视化...
大话存储2:存储系统架构与底层原理极限剖析》内容简介:网络存储是一个涉及计算机硬件以及网络协议/技术、操作系统以及专业软件等各方面综合知识的领域。目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对...
大话存储:存储系统底层架构原理极限剖析(终极版)第4部分 大话存储:存储系统底层架构原理极限剖析(终极版)第4部分
大数据也可以定义为来自各种来源的大量非结构化或结构化数据。从学术角度而言,大数据的出现促成广泛主题的新颖研究。这也导致各种大数据统计方法的发展。大数据并没有统计学的抽样方法;它只是观察和追踪发生的事情...
大话数据结构
大话存储:存储系统底层架构原理极限剖析(终极版)第3部分 大话存储:存储系统底层架构原理极限剖析(终极版)第3部分大话存储:存储系统底层架构原理极限剖析(终极版)第3部分
3. 存储系统的基础技术:讨论了计算机IO基本概念、硬盘物理结构、盘片数据结构和工作原理等基础知识。 4. RAID技术:书中有对七种常见RAID技术原理的详细分析,并对性能细节进行了对比。 5. 磁盘阵列技术:涉及...
《大话存储终极版》是IT领域内一本深受读者喜爱的存储技术图书,作者冬瓜哥(张冬)以其通俗易懂的语言,深入浅出地介绍了存储领域的诸多知识。这本书对于初学者来说是一份非常宝贵的资源,可以帮助他们快速入门并...
大话存储:存储系统底层架构原理极限剖析(终极版)_张冬2015.01_P989
《算法与数据结构C与C++描述》是针对计算机科学中的核心概念——算法和数据结构进行深入探讨的教材。在编程领域,理解并熟练运用这些概念对于提升代码效率和优化程序设计至关重要。本文将详细阐述其中的关键知识点。...
"大话存储2:存储系统架构与底层原理极限剖析" 本节将对存储系统的基本概念、技术和架构进行详细介绍。存储系统是计算机系统中的一种复杂系统,主要负责数据的存储、管理和保护。它可以是一个独立的硬件设备,也...
个人自用
Android之大话设计模式——:抽象工厂模式借鉴.pdf
基于《大话数据结构》进行数据结构的学习
数据结构是计算机科学中的一个重要概念,它主要研究如何组织和存储数据,以便可以高效地访问和修改这些数据。数据结构的选择对于算法的效率有着直接的影响。本次内容将围绕“栈”、“队列”、“树”以及“二叉树”等...
本课件涵盖了数据结构的多个重要主题,包括线性表、栈和队列、串、数和二叉树、图、查找以及内部排序。 线性表是最基本的数据结构之一,它是一组按顺序排列的元素集合。每个元素都有一个唯一的索引,可以实现快速...