#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
typedef int DataType_t;
typedef struct LinkQueue
{
DataType_t Data;
struct LinkQueue *Prev;
struct LinkQueue *Next;
} LinkQueue_t;
LinkQueue_t *LinkQueue_Creat(void)
{
LinkQueue_t *Head = (LinkQueue_t *)calloc(1, sizeof(LinkQueue_t));
if (NULL == Head)
{
perror("calloc memory for Head is failed!\n");
exit(-1);
}
Head->Next = Head;
Head->Prev = Head;
return Head;
}
LinkQueue_t *LinkQueue_NewNode(DataType_t data)
{
LinkQueue_t *NewNode = (LinkQueue_t *)calloc(1, sizeof(DataType_t));
if (NULL == NewNode)
{
perror("calloc memory for NewNode is failed!\n");
return NewNode;
}
NewNode->Data = data;
NewNode->Prev = NewNode;
NewNode->Next = NewNode;
return NewNode;
}
bool LinkQueue_IsEmpty(LinkQueue_t *Head)
{
return (Head->Next == Head) ? true : false;
}
bool LinkQueue_Enqueue(LinkQueue_t *Head, DataType_t data)
{
LinkQueue_t *Phead = Head->Next;
LinkQueue_t *NewNode = LinkQueue_NewNode(data);
if (LinkQueue_IsEmpty(Head))
{
Head->Next = NewNode;
NewNode->Next = NewNode;
NewNode->Prev = NewNode;
return true;
}
NewNode->Prev = Phead->Prev;
NewNode->Next = Phead;
Phead->Prev->Next = NewNode;
Phead->Prev = NewNode;
return true;
}
DataType_t LinkQueue_Dequeue(LinkQueue_t *Head)
{
if (LinkQueue_IsEmpty(Head))
{
printf("Link queue is empty!\n");
return false;
}
DataType_t temp = Head->Next->Data;
LinkQueue_t *Phead = Head->Next;
Phead->Prev->Next = Phead->Next;
Phead->Next->Prev = Phead->Prev;
Head->Next = Phead->Next;
Phead->Next = NULL;
Phead->Prev = NULL;
free(Phead);
return temp;
}
bool LinkQueue_Print(LinkQueue_t *Head)
{
LinkQueue_t *Front = Head->Next;
while (Front->Next != Head->Next)
{
printf("%d ", Front->Data);
Front = Front->Next;
}
printf("%d ", Front->Data);
printf("\n");
return true;
}
int main(void)
{
LinkQueue_t *Head = LinkQueue_Creat();
LinkQueue_Enqueue(Head, 1);
LinkQueue_Enqueue(Head, 2);
LinkQueue_Enqueue(Head, 3);
LinkQueue_Print(Head);
printf("The dequeue element is %d\n", LinkQueue_Dequeue(Head));
LinkQueue_Print(Head);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库