#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术