当前位置: 首页 > news >正文

循环队列的实现

我们知道队列的实现可以用单链表和数组,但是循环链表也可以使用这两种方式。

首先我们来看看单链表:

首先使用单链表,我们需要考虑循环队列的一些特点。

单链表实现循环队列我们要考虑几个核心问题:

首先我们要区别 解决 空 和 满 的问题。多加一个空间,或者加一个size变量来记录。

当front==rail时,为空。

当rail->next == front时为满

其次,我们需要解决如何 能取出队尾的数据。对于单链表,因为我们rail指向队尾的后一个,所以不好取出队尾数据

数组来实现 循环链表:

同样当front==rail时,为空

当 front == (rail+1)%(k+1)时为满

数组解决循环链表,我们要考虑到:当不断出队和入队时如何循环起来?

可以使用if语句来判断,也可以给让rail超出数组大小后,直接回到数组开头。

当rail在第一个位置时,如何找到队尾元素呢?

我们可以使用if,也可以(rail+k)%(k+1)来取到前一个元素。

#include<stdio.h>
#include<assert.h>
#include<stdbool.h>typedef struct {int* a;int front;int rail;int k;
}MyQueue;MyQueue* MyQueueCreat(int k)
{MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));obj->a = (int*)malloc(sizeof(int) * (k + 1));obj->front = obj->rail = 0;obj->k = k;
}
bool isMyQueueEmtp(MyQueue* obj)
{assert(obj);if (obj->front == obj->rail)return true;return false;
}
bool isMyQueueFull(MyQueue* obj)
{assert(obj);return (obj->rail + 1) % (obj->k + 1) == obj->front;
}
bool MyQueueEn(MyQueue* obj, int value)
{assert(obj);if (isMyQueueFull(obj))return -1;obj->a[obj->rail++] = value;obj->rail %= obj->k + 1;
}
bool MyQueueOut(MyQueue* obj)
{assert(obj);obj->front++;obj->front %= obj->k + 1;}int MyQueueFront(MyQueue* obj)
{assert(obj);return obj->a[obj->front];
}
int MyQueueRail(MyQueue* obj)
{asert(obj);if (isMyQueueEmtp(obj))return - 1;return obj->a[obj->rail + obj->k % obj->k + 1];
}void MyQueueFree(MyQueue* obj)
{assert(obj);free(obj->a);free(obj);
}

好的,今天的复习就到这里

http://www.lryc.cn/news/32901.html

相关文章:

  • MTK平台开发入门到精通(休眠唤醒篇)休眠唤醒LPM框架
  • ThreadLocal详解
  • 利用Cookie劫持+HTML注入进行钓鱼攻击
  • 【接口汇总】常用免费的API
  • 数字信号处理知识点
  • 计算机网络第八版——第三章课后题答案(超详细)
  • 九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍
  • 3D目标检测(二)—— 直接处理点云的3D目标检测网络VoteNet、H3DNet
  • Java学习-IO流-常用工具包(hutool)
  • 【LeetCode】1. 两数之和
  • 【数值模型环境搭建】Intel编译器安装
  • 操作VMware vCenter Converter 实现物理机迁移到虚拟机
  • hutool XML反序列化漏洞(CVE-2023-24162)
  • Java简单认识泛型——图文详解
  • AcWing171.送礼物
  • 领域驱动设计-架构篇
  • docker安装kafka
  • Selenium4+Python3系列(十一) - Page Factory设计模式
  • C++基础知识【4】函数及参数
  • 约瑟夫森磁效应
  • 什么是L1和L2正则化,以及它们有什么区别
  • 场景式消费激发春日经济,这些电商品类迎来消费热潮
  • [2.1.4]进程管理——进程通信
  • ChatGPT也有犯晕的时候
  • 机器学习与目标检测作业:连通块算法
  • HBase基础 --- 增删查改
  • 如何基于AI智能视频技术实现公园景区的人流量实时统计?
  • 【JavaWeb】Servlet详解
  • 谁是世界上最好的编程语言?--编程语言70年浅谈
  • Webpack前端资源加载/打包工具