首页 > 其他分享 >顺序循环队列接口设计

顺序循环队列接口设计

时间:2024-04-28 23:35:03浏览次数:28  
标签:Head 顺序 return 队列 接口 Enqueue Manager CirQueue

/*************************************************
 *
 *   file name:DoubleDoubleCirLkList.c
 *   author   :[email protected]
 *   date     :2024/04/28
 *   brief    :构建顺序循环队列的接口
 *   note     :None
 *
 *   CopyRight (c) 2024    [email protected]    All Right Reseverd
 *
 **************************************************/
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
/*************************************************
 *
 *   func name     :
 *   brief         :
 *   func parameter:
 *
 *
 *   return        :None
 *   note          :None
 *   func author   :[email protected]
 *   date          :2024/04/28
 *   version       :V1.0
 **************************************************/
// 构建顺序循环队列的结构体(队首下标+队尾下标+队列容量+队列首地址)
typedef int DataType_t;
typedef struct CirculaQueue
{
    DataType_t *Addr;
    int Front;
    int Rear;
    unsigned Size;

} CirQueue_t;

// 创建一个顺序循环队列,并对其进行初始化
CirQueue_t *CirQueue_Creat(unsigned int size)
{
    // 为循环队列的管理结构体申请内存空间
    CirQueue_t *Manager = (CirQueue_t *)calloc(1, sizeof(CirQueue_t));
    if (NULL == Manager)
    {
        perror("calloc memory for Manager is failed!\n");
        exit(-1);
    }
    // 为存储新队列的每个元素申请内存空间
    Manager->Addr = (DataType_t *)calloc(size, sizeof(DataType_t));
    if (NULL == Manager)
    {
        perror("calloc memory for Addr is failed!\n");
        free(Manager);
        exit(-1);
    }
    // 初始化循环队列
    Manager->Size = size;
    Manager->Front = 0;
    Manager->Rear = 0;
    return Manager;
}

// 判断队列是否为空
bool CirQueue_IsEmpty(CirQueue_t *Head)
{
    return (Head->Front == Head->Rear) ? true : false;
}
// 判断队列是否已满
bool CirQueue_IsFull(CirQueue_t *Head)
{
    return (Head->Front == (Head->Rear + 1) % Head->Size) ? true : false;
}

// 入队操作
bool CirQueue_Enqueue(CirQueue_t *Head, DataType_t data)
{
    if (CirQueue_IsFull(Head))
    {
        printf("the CirQueue is full,Enqueue %d false!\n", data);
        return false;
    }
    Head->Addr[Head->Rear] = data;
    Head->Rear = (Head->Rear + 1) % Head->Size;
    return true;
}
// 出队操作
DataType_t CirQueue_Dequeue(CirQueue_t *Head)
{
    if (CirQueue_IsEmpty(Head))
    {
        printf("the CirQueue is empty!\n");
        return;
    }
    DataType_t temp = 0;

    Head->Front = (Head->Front + 1) % Head->Size;
    return temp;
}

// 遍历顺序循环队列的元素
bool CirQueue_Print(CirQueue_t *Head)
{
    if (CirQueue_IsEmpty(Head))
    {
        printf("the CirQueue is empty!\n");
        return false;
    }
    for (int i = 0; i < (Head->Rear + Head->Size - Head->Front) % Head->Size; i++)
    {
        printf("%d ", Head->Addr[(Head->Front + i) % Head->Size]);
    }
    printf("\n");
    return true;
}
int main(void)
{
    CirQueue_t *Head = CirQueue_Creat(11);
    CirQueue_Enqueue(Head, 1);
    CirQueue_Enqueue(Head, 2);
    CirQueue_Enqueue(Head, 3);
    CirQueue_Enqueue(Head, 4);
    CirQueue_Enqueue(Head, 5);
    CirQueue_Enqueue(Head, 6);
    CirQueue_Enqueue(Head, 7);
    CirQueue_Enqueue(Head, 8);
    CirQueue_Enqueue(Head, 9);
    CirQueue_Enqueue(Head, 10);
    CirQueue_Enqueue(Head, 11);
    CirQueue_Print(Head);
    CirQueue_Dequeue(Head);
    CirQueue_Print(Head);
    return 0;
}

标签:Head,顺序,return,队列,接口,Enqueue,Manager,CirQueue
From: https://www.cnblogs.com/bell-c/p/18164752

相关文章

  • 双向循环链表队列的接口设计
    /***************************************************filename:DoubleLinkQueue.c*author:[email protected]*date:2024/04/28*brief:构建双向循环链队的接口*note:None**CopyRight(c)[email protected]......
  • java学习-接口
    01、定义接口接口用interface关键字去表示,不可以带私有化修饰符,比如protected、final等。接口就是用来被继承implements实现的,如果不允许访问,那就没意义了。接口同样不允许new实例化。02.接口的作用第一,使某些实现类具有我们想要的功能,比如说,实现了Cloneable接口的类具有拷贝......
  • 接口测试学习111
    1、同步接口:2、异步接口:不需要等接口的调用结果也可以继续执行。轮询方式。3、回调接口:一、代理类型1、协议:http、https。代理fiddler2、协议:TCP协议簇,代理:socks43、协议:TCP、UDP协议簇,代理:socks5二、接口测试范围/类型1、接口功能测2、接口性能和安全测试3、接口兼容性......
  • 短信验证码登录接口,如何防止恶意攻击
    本文相关词汇:OTP-One-TimePassword一次性动态密码,这种验证码具有时效性,通常有效期在1~2分钟内。手机短信验证码就是一种OTP。MFA-多重因子认证。先说单因子认证,我们的系统登录通常是账密登录,这种就是单因子认证方式的登录。现在为了安全,许多网站开始使用双因子认证登录......
  • 接口规范
    需要注意兼容php、java等多语言,即弱类型+强类型如返回user_name字符串类型,就不能查询失败返回null 返回json格式codeint格式msgstring格式data根据接口不同返回不同格式一般是对象或者数组,如果不需要使用data,可以返回null(默认null) php创建对象$obj=newstdClas......
  • system消息队列和posix消息队列
    POSIX消息队列System消息队列主要函数头文件#include<sys/msg.h>intmsgget(key_tkey,intoflag)intmsgsnd(intmsqid,constvoid*ptr,size_tlength,intflag)ssize_tmsgrcv(intmsqid,void*ptr,size_tlength,longtype,intflag)intmsgctl(intmsqid,......
  • Python-PyQt5接口压测工具分享
    1、页面介绍  2、运行效果 ......
  • C#身份查验接口、身份证文字识别接口、金融身份验证
    针对金融领域远程自主开户的实名认证,翔云人工智能开放平台提出了有针对性的解决方案。翔云实名认证API其中包含了身份证实名认证、人脸识别、人证合一和银行卡实名认证,可快速识别提取用户身份信息,实时联网权威数据源进行用户身份的验证,既解决了远程身份认证问题,也避免了身份被......
  • .net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问we
    1.使用soapCorenuget包 2.新建接口及实现2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用  4.启动程序,直接访问对应的asmx地址  ......
  • SecureCRT命令行快捷键(字母顺序版)
    Ctrl+a光标到开头Ctrl+b光标前移一个字符相当于←Ctrl+c中断当前程序Ctrl+d退出当前窗口或当前用户Ctrl+e光标到末尾Ctrl+f光标后移一个字符相当于→Ctrl+g退出匹配搜索Ctrl+h删除光标前1个字符<---BackspaceCtrl+i补全命令与Table相同......