首页 > 其他分享 >设计循环队列

设计循环队列

时间:2023-04-14 10:56:16浏览次数:38  
标签:obj 队列 MyCircularQueue return int 循环 bool 设计 rear

设计循环队列

题目链接

思路

这道题如果用循环链表会有很多问题, 如图下

 

下面首先说一下用数组实现循环队列的结构

 

然后用这个结构实现入队, 出队, 判空, 判满操作操作, 如图下

 

 

下面代码实现

typedef struct {
    int* dys;
    int front;
    int rear;
    int k;
} MyCircularQueue;


MyCircularQueue* myCircularQueueCreate(int k) {
   MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
   obj->dys = (int*)malloc(sizeof(int)*(k+1));
   obj->front = obj->rear = 0;
   obj->k = k;
   return obj;
}

bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    return obj->front == obj->rear;
}

bool myCircularQueueIsFull(MyCircularQueue* obj) {
    return (obj->rear+1) % (obj->k+1) == obj->front;
}
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    // 如果队列满了,就不能再入队
    if (myCircularQueueIsFull(obj))
        return false;
    obj->dys[obj->rear] = value;
    obj->rear++;
    // 防止越界
    obj->rear %= (obj->k+1);
    return true;
}

bool myCircularQueueDeQueue(MyCircularQueue* obj) {
     // 如果队列为空,不能出队
    if (myCircularQueueIsEmpty(obj))
        return false;
    obj->front++;
    obj->front %= (obj->k+1);
    return true;
}

int myCircularQueueFront(MyCircularQueue* obj) {
    if (myCircularQueueIsEmpty(obj))
        return -1;
    return obj->dys[obj->front];
}

int myCircularQueueRear(MyCircularQueue* obj) {
    if (myCircularQueueIsEmpty(obj))
        return -1;

    if (0 == obj->rear)
    {
        return obj->dys[obj->k];
    }
    return obj->dys[obj->rear-1];
}


void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->dys);
    free(obj);
}

/**
 * Your MyCircularQueue struct will be instantiated and called as such:
 * MyCircularQueue* obj = myCircularQueueCreate(k);
 * bool param_1 = myCircularQueueEnQueue(obj, value);
 
 * bool param_2 = myCircularQueueDeQueue(obj);
 
 * int param_3 = myCircularQueueFront(obj);
 
 * int param_4 = myCircularQueueRear(obj);
 
 * bool param_5 = myCircularQueueIsEmpty(obj);
 
 * bool param_6 = myCircularQueueIsFull(obj);
 
 * myCircularQueueFree(obj);
*/

 

标签:obj,队列,MyCircularQueue,return,int,循环,bool,设计,rear
From: https://www.cnblogs.com/xumu11291/p/17316044.html

相关文章

  • vivo全球商城:电商交易平台设计
    作者:vivo官网商城开发团队-ChengKun、LiuWei本文介绍了交易平台的设计理念和关键技术方案,以及实践过程中的思考与挑战。点击查阅:《vivo全球商城》系列文章一、背景vivo官方商城经过了七年的迭代,从单体架构逐步演进到微服务架构,我们的开发团队沉淀了许多宝贵的技术与经......
  • 聊一聊对领域驱动设计中“领域”这个词语的理解与分析方法
    1.什么是领域百度百科对领域的解释:领域具体指一种特定的范围或区域领域一般指的是业务的问题域,领域是有边界的,边界内,规定了我们要做什么,要做的范围,软件项目从开始到交付的过程中,所有涵盖的业务,每个业务模块或者方向都有自己的业务范围和问题比如做家装行业的公司进行软件系......
  • 嵌套循环
    publicabstractclassprintRectangle{publicstaticvoidmain(String[]args){printRectangle();System.out.println("--------");printTeiangle();System.out.println("--------");printTeiangl......
  • 剑指 Offer 09. 用两个栈实现队列 && leetcode225.用队列实现栈
     剑指Offer09.用两个栈实现队列 classCQueue{private:stack<int>inStack,outStack;voidin2out(){//这里必须是while循环,如果是if判断,则输出栈日常只有一个值,没有起到先入后出的作用while(!inStack.empty()){//将输入栈栈顶......
  • Enemy状态机设计思路
    前言:为了更清晰的认识状态机并且理清Enemy设计思路,所以整理了一下Enemy的代码设计逻辑做了一张简单的思维图先进行一个简单的认识干货:FMS有限状态机状态机类似于动画器(animator),动画器可以简单清晰地管理游戏角色的动画:待机、跳跃、下落、跑步……,状态机的目的也是如......
  • [USACO12MAR]Flowerpot S 单调队列
    [USACO12MAR]FlowerpotStag:单调队列很惭愧,今天发现自己连滑动窗口都不会了,遂做了一些题两滴水的高度之差大于等于D的情况下的最小花盆宽度暴力思路:对于任意两点求水滴高度差是否大于等于D,若大于等于\(D\)则计算最下的两点距离\(w\)但这显然是能过但不完全过,手玩一下样例,是......
  • 华为认证HCIE Datacom培训理论技术学习关于中队列技术
    华为认证HCIEDatacom培训理论技术学习关于中队列技术关注WOLFLAB网络技术实验室,讲师:崔志鹏,杨广成。关注我,每周都会更新,华为认证WOLFLAB网络技术实验室!华为认证HCIE(1) FIFO:先进先出队列,是单队列技术,不会引入额外延迟,延迟只与队列长度有关,不提供任何差分服务。(2) RR:轮询调度,采用轮询......
  • Linux操作系统ARM指令集与汇编语言程序设计
    一、实验目的1.了解并掌握ARM汇编指令集2.应用ARM指令集编写一个程序操控开发板上的LED灯二、实验要求应用ARM汇编指令集编写程序,实现正常状态下开发板上的LED灯不亮,按下一个按键之后开发板上的LED灯进入流水灯模式。三、实验原理四个LED灯的电路如下图所示:四个按键电路图......
  • 如何用ChatGPT做设计?激发设计师们的灵感
    伴随着人工智能技术的迅猛发展,AI工具在设计领域中的应用也越来越广泛。当前,诸如ChatGPT等AI工具不仅可以进行自然语言处理,还可以应用于图像、视频等多种媒体领域,为设计师们提供了丰富的应用场景。使用Chatgpt:1、打开多御浏览器。2、在多御浏览器首页,找到【ChatGPT】。提供灵感和......
  • 使用vue+bpmn-js实现activiti的流程设计器__Vue.js
    https://www.vue-js.com/topic/5f6c4af84590fe0031e591ef完整代码见github:https://github.com/griabcrh/vue-activiti-demo适配activitiimportactivitiModdleDescriptorfrom'../js/activiti.json';this.bpmnModeler=newBpmnModeler({container:ca......