Java基础 - 队列

本文介绍了队列的基本概念和性质,包括先进先出(FIFO)原则。详细讲解了队列的分类,如顺序队列、链式队列、循环队列、双端队列和优先级队列,并探讨了它们的实现方式和特点。同时,讨论了队列在实际应用中的场景,如阻塞队列和消息队列在进程调度中的作用。
摘要由CSDN通过智能技术生成

队列 是 先进先出( FIFO,First In, First Out) 的线性表。在具体应用中通常用链表或者数组来实现,用数组实现的队列叫作 顺序队列 ,用链表实现的队列叫作 链式队列

  • 队列的操作在两端进行,即 在后端(rear)进行插入操作也就是 入队 enqueue,在前端(front)进行删除操作也就是出队 dequeue

  • 在队列中,删除的数据还保留着内存中,但头指针已不再指向它

  • 队列和栈一样,存在上溢和下溢。此外,还存在”假溢出“现象

队列的分类

为了方便起见,约定:初始化建空队时,令front=rear=0,当队空时:

front=rear

当队满时:front=rear 亦成立

单队列

单队列又分为顺序队列(数组实现)和链式队列(链表实现)。单队列从前面删除元素,从后面插入元素,类似于现实中的排队(只是不允许插队🤣)。

顺序队列

队列的顺序存储结构,又称为顺序队列,顺序队列实际上是运算受限的顺序表。

在顺序队列,由于数组分配的存储空间存在边界,头尾指针不断增加而不减小(或只减小而不增加),被删除元素的存储空间不能重新利用,会发生”假溢出“,即明明有位置却不能添加元素。

解决假溢出的方法有许多种,如:设定队首指针不动,只要插入元素,在队列的末尾直接插入;只要删除元素,从队首的位置直接删除就行了,但这样会造成大量的数据元素移动。一种更好的办法是,将队列循环起来,也就是循环队列。

链式队列

链式队列,使用带头指针front和尾指针rear的单链表实现。一般用单向链表来实现,不采用循环双链表或者双链表主要是双链表的空间开销(空间复杂度,多前继指针)相对单链表来说大了不少,而单链表只要新增头指针和尾指针就可以轻松实现常数时间内(时间复杂度为O(1))访问头尾结点。

Java实现链式队列的其中一种方法:

class linkqueue{
   
    private link front;
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值