理解环形队列
解读环形队列-C语言实现 环形队列(Circular Queue)是一种特殊的队列数据结构。与普通的线性队列不同,环形队列在物理存储上表现为一个首尾相连的环状结构,在逻辑上则仍然遵循先进先出(FIFO)的原则。 特点 循环利用空间:当队列中的元素被删除后,原来的空间可以被重新使用 队头队尾指针:使用head和end两个指针标识队列的头部和尾部 队满与队空判断:需要特殊处理,通常预留一个位置不使用 动态调整:可以动态调整数组大小来适应数据量变化 应用场景 缓冲区管理:在网络编程或硬件驱动程序中管理固定大小的缓冲区 生产者消费者模型:在多线程环境中用作数据共享的数据结构 滑动窗口算法:实现高效的数据处理策略 串口接收:STM32中常用于串口接收,实现数据异步使用 图解 非循环队列 非循环队列由一个头指针head和一个尾指针end构成。 入队操作: end = end + 1,然后将数据存入end指向的空间: 出队操作: 出队就是将head指向空间的数据抛出,然后head加一: 判断队空: end = -1 表示队空 end + 1 = head 表示队空 判断队满:end + 1 = MAX_SIZE 循环队列 循环队列的head指针并不指向数据头,而是指向上一次被删除的数据地址。 下标范围控制: end = (end+1) % MAX_SIZE head = (head+1) % MAX_SIZE 入队操作: 出队操作: 判断队满:head = (end+1) % MAX_SIZE 判断队空:head == end ...