数据结构-队列(详解)

embedded/2025/3/14 4:17:44/

目录

    • 一、队列的基本概念
    • 二、队列的基本操作
    • 三、队列的实现方式
      • 1. 数组实现队列
      • 2. 链表实现队列
    • 四、队列的应用场景
    • 五、总结

一、队列的基本概念

队列是一种特殊的线性表,它只允许在表的一端进行插入操作,在另一端进行删除操作。允许插入的一端称为队尾,允许删除的一端称为队头。队列具有先进先出(First In First Out,FIFO)的特点,即最先插入的元素最先被删除。

二、队列的基本操作

  • enqueue(element):将元素插入到队尾。
  • dequeue():删除队头的元素,并返回该元素。
  • peek():返回队头的元素,但不删除它。
  • isEmpty():判断队列是否为空。
  • isFull():判断队列是否已满(仅在固定大小的队列中适用)。

三、队列的实现方式

1. 数组实现队列

使用数组实现队列时,需要定义一个固定大小的数组来存储队列中的元素,同时使用两个指针(frontrear)分别指向队头和队尾的位置。

java">public class ArrayQueue {private int[] array;private int front;private int rear;public ArrayQueue(int capacity) {array = new int[capacity];front = 0;rear = 0;}public boolean enqueue(int element) {if ((rear + 1) % array.length == front) {return false; // 队列已满}array[rear] = element;rear = (rear + 1) % array.length;return true;}public Integer dequeue() {if (front == rear) {return null; // 队列为空}int element = array[front];front = (front + 1) % array.length;return element;}public Integer peek() {if (front == rear) {return null; // 队列为空}return array[front];}public boolean isEmpty() {return front == rear;}public boolean isFull() {return (rear + 1) % array.length == front;}
}

2. 链表实现队列

使用链表实现队列时,可以动态地添加和删除节点,不需要预先定义队列的大小。链表实现的队列通常包含一个头节点和一个尾节点,分别指向队头和队尾。

java">public class LinkedListQueue {private Node head;private Node tail;private static class Node {int value;Node next;public Node(int value) {this.value = value;}}public LinkedListQueue() {head = null;tail = null;}public void enqueue(int element) {Node newNode = new Node(element);if (tail == null) {head = newNode;tail = newNode;} else {tail.next = newNode;tail = newNode;}}public Integer dequeue() {if (head == null) {return null; // 队列为空}int element = head.value;head = head.next;if (head == null) {tail = null;}return element;}public Integer peek() {if (head == null) {return null; // 队列为空}return head.value;}public boolean isEmpty() {return head == null;}
}

四、队列的应用场景

队列在计算机科学和实际应用中有着广泛的应用,以下是一些常见的场景:

  • 任务调度:操作系统中的任务调度器使用队列来管理等待执行的任务,确保任务按照一定的顺序执行。
  • 缓冲区管理:在数据传输过程中,如网络数据包的接收和发送,队列可以作为缓冲区,暂时存储数据包,以平衡数据的发送和接收速度。
  • 模拟真实场景:在模拟超市收银、银行排队等场景时,队列可以用来表示顾客的排队等待情况,帮助分析和优化服务流程。

五、总结

队列是一种具有先进先出特性的线性表,适用于需要按照顺序处理元素的场景。可以通过数组或链表来实现队列,数组实现的队列具有固定大小,而链表实现的队列则更加灵活。掌握队列的基本操作和实现方式,能够帮助我们在实际开发中更好地解决相关问题。希望本文的讲解和示例对您有所帮助,如果您对队列或其他数据结构有任何疑问,欢迎随时交流探讨!


http://www.ppmy.cn/embedded/172412.html

相关文章

golang中具有 “no copy“的类型

在 Go 语言中,某些类型由于特殊用途或底层实现,可能会被标记为 “no copy”,即它们不能被复制,通常是因为复制会导致意外的行为或错误。这些类型主要包括: 1. sync.Mutex、sync.RWMutex 原因:Mutex 是用于…

Node.js学习分享(下)

Node.js Expressexpress的基本用法创建基本的web服务器监听GET请求监听POST请求把内容响应给客户端获取URL中携带的查询参数获取URL中的动态参数 托管静态资源express.static()托管多个静态资源目录挂载路径前缀 Express路由路由模块化 Express中间件Express中间件的调用流程Ex…

C++零基础LeetCode热题100- 128.最长连续序列

128.最长连续序列 题目描述思路步骤实现代码代码详解提交结果注意 题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路 …

使用curl库编写爬虫程序的指令抓取优质视频

首先,curl本身是一个命令行工具,用来传输数据,支持多种协议,包括HTTP、HTTPS等。用户提到“使用curl库编写爬虫程序”,可能指的是用libcurl库在编程语言中调用,比如Python的pycurl,或者C/C直接使…

PHP前后开发纪录

一.LayUI相关 在LayUI中使用jquery读取本地json文件: // getJSON为直接读取本地文件,要改成调接口$.getJSON(/datafile/enviro-factory.json,function(data){data.forEach(element > {setMarkerLabel(element,T,map)});// setMarkerLabel(data[0],T,map)});二.p…

[Python爬虫系列]bilibili

[Python爬虫系列]bilibili 具体逻辑 bv号 -> 处理多P视频 -> 拿到cid -> sign -> 请求下载,其中sign参考前人算法(https://github.com/SocialSisterYi/bilibili-API-collect) b站视频下载链接 https://api.bilibili.com/x/pl…

EXCEL IF自动填充功能

使用Excel自动填充端口用途:提升工作效率的技巧 在日常工作中,Excel 是一个非常强大的工具,尤其是在处理大量数据时。通过使用 Excel 的自动填充功能,我们可以快速地为数据添加额外的信息,从而提升工作效率。本文将介…

Redis 6.2.7安装配置

Redis-6.2.7下载 下载地址:https://download.redis.io/releases/redis-6.2.7.tar.gz 解压缩文件 tar -zxvf redis-6.0.3.tar.gz 安装gcc yum install gcc 进入压缩包src目录下进行源码编译,将redis安装到/usr/local/redis目录下 cd /opt/software/red…