队列简易教程

队列是一种遵循先进先出(FIFO)原则的数据结构,常用于顺序执行和访问的场景。本文介绍了队列的基本概念、应用场景,如操作系统中的优先级队列和消息队列,并详细阐述了顺序队列和循环队列的实现,包括节点定义、初始化、入队、出队和获取队头元素的操作。同时对比了普通顺序队列和循环队列在空间利用率上的差异。
摘要由CSDN通过智能技术生成

队列(FIFO)

概论

基本概念

只在线性表的一端进行添加元素,在线性表的另一端进行删除元素的数据结构称为队列。这种规则称为 **FIFO(first input first output)**原则。 进入队列的一端称为“队尾”,出队列的一端称为“队头”。

在这里插入图片描述

应用场景

根据队列的存储特性,只需要使用数据结构实现一种顺序执行 / 访问的场景可以使用队列。计算机开发中使用队列这种逻辑结构也非常广泛,像操作系统中的优先级队列,消息队列等。

分类

根据实现方式可以分为:链式队列顺序队列。顺序队列的一种非常常见的优化结构称为 循环队列

方法

实现循环队列

普通的顺序队列和循环队列比较

普通的顺序队列只能往顺序表的尾部添加元素,只能从顺序表的开头删除元素。而删除元素就是让队头下标+1.

这样就造成了一个结果:队列已经满了,但是可用元素却没有把队列所有空间利用完。

就像这样:

在这里插入图片描述

逻辑上已经删除的元素还依然占用着队列底层的空间,这就产生了大大的浪费。为了解决这个问题,就出现了 循环队列。

当队列已经“满”了的时候,需要添加新元素,如果是普通的顺序队列,逻辑上就是这样子的:

在这里插入图片描述

循环队列在面对这个问题的时候,这样子优化,就起到了充分利用空间的作用:

在这里插入图片描述

当队列已经”满“了的时候,它将新元素从队首开始添加,覆盖掉已经删除掉的元素,就起到了一个重复利用队列底层空间的效果。

定义节点

节点元素构成:

  • 顺序表(即指定大小的数组)
  • 对头下标
  • 对尾下标
#define MAXSIZE 10
typedef int DataType;
typedef struct Node{
   
    DataType _data[MAXSIZE];
    int _front;
    int _tail;
} Queue;
初始化

初始化队列的时候将对头和对位的下标都置为0。

void InitQueue(Queue* queue){
   
    assert(queue
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值