Linux C语言实现-------队列

本文详细介绍了Linux环境中使用C语言实现队列的数据结构,重点讲解了循环队列的概念、工作原理以及如何通过数组和链式结构来实现。通过示例代码展示了入队、出队操作,并解释了如何判断队列是否为空或满。
摘要由CSDN通过智能技术生成

1 什么是队列:

老规矩 , 先上一张数据结构的图(1):


                图1

希望同学们对这张图加以深刻的理解, 对于以后数据结构会有很大的帮助的

图中说明了队列(FIFO)是和 栈(STACK) ,线性表(LIST)(链表,数组),同属于是线性结构,线性结构存储方式分为顺序存储方式和链式存储方式, 上一章的栈已经分别实现了,小伙伴可以看下源码自行体验下,带的有注释的

队列和栈一样 , 也是属于一种受限的线性表, 其特性为跟栈是相反的 , 为先进先出

其只能在其中一端进行插入,叫做队尾(rear), 另一端进行删除,叫做队头(front),在队列中入队n个元素话 , 队列中的元素如下(a1, a2...an),当前a1为队头,an为队尾, 因为先进先出的关系, 出队也只能从a1,a2...依次到an的方式出队,如下图2:


                图2

继续用车来做个比喻吧 ,一个火车通过山洞(队列),从第一节(队头)车厢(数据)先进去,到山洞的另一头,同样也是第一节车厢先出去,依次才到后面的2...n节车厢

2 队列的实现:

因为是线性表, 同样是顺序的方式和链式两种实现

首先是顺序队列:

建立顺序队列,首先要为其静态(数组)或者动态申请(malloc)开辟一块空间,这块空间的大小取决于队列里数据的总大小,队尾(rear)指针始终指向队列的最后一个元素,每次入队操作rear+1, 队头始终指向队列第一次元素,每次出队操作front+1, 因为考虑到内存的合理利用,每次入队或者出队的长度超过队列的总长度的时候,就让它指向队列的第一个元素位置, 即 rear = (rear + 1) % max,front = (front + 1) % max,此时的队列就形成了一个可以循环利用的环形,  我们称之为循环队列。

在循环队列中,判断队列是否为空front == rear , 而是否为满也是front == read,于是乎聪明的先烈们想了个办法 , 放弃队列中的一个节点,用来判断是否队满, 即 (read + 1) % N == front ? 1 : 0。

理一下思路吧

1,队头始终指向出队的元素的位置

2,队尾始终指向入队的

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值