#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef int DataType_t;
typedef struct LinkQueue
{
DataType_t *data;
struct LinkQueue *prev;
struct LinkQueue *next;
} LkQueue_t;
LkQueue_t *LkQueue_Create(void)
{
LkQueue_t *Head = (LkQueue_t *)calloc(1, sizeof(LkQueue_t));
if (NULL == Head)
{
perror("calloc memory for Head is failed");
exit(-1);
}
Head->data = NULL;
Head->prev = Head;
Head->next = Head;
return Head;
}
LkQueue_t *LkQueue_NewNode(DataType_t data)
{
LkQueue_t *New = (LkQueue_t *)calloc(1, sizeof(LkQueue_t));
if (NULL == New)
{
perror("Calloc memory for NewNode is Failed");
return NULL;
}
New->data = data;
New->next = New;
New->prev = New;
return New;
}
bool LkQueue_IsEmpty(LkQueue_t *Head)
{
return (Head->next == Head) ? true : false;
}
bool LkQueue_Enqueue(LkQueue_t *Head, DataType_t data)
{
LkQueue_t *Phead = Head->next;
LkQueue_t *New = LkQueue_NewNode(data);
if (LkQueue_IsEmpty(Head))
{
Head->next = New;
}
else
{
New->next = Phead;
New->prev = Phead->prev;
Phead->prev->next = New;
Phead->prev = New;
}
return true;
}
DataType_t LkQueue_Dequeue(LkQueue_t *Head)
{
DataType_t temp = 0;
LkQueue_t *Phead = Head->next;
if (LkQueue_IsEmpty(Head))
{
printf("LkQueue is Empty!\n");
return false;
}
if (Phead->next == Phead)
{
Head->next = Head;
}
else
{
Phead->prev->next = Phead->next;
Phead->next->prev = Phead->prev;
Head->next = Phead->next;
}
temp = Phead->data;
Phead->prev = NULL;
Phead->next = NULL;
free(Phead);
return temp;
}
void LkQueue_Print(LkQueue_t *Head)
{
LkQueue_t *Phead = Head->next;
while (Phead->next != Head->next)
{
printf("data=%d\n", Phead->data);
Phead = Phead->next;
}
printf("data=%d\n", Phead->data);
}
int main(int argc, char const *argv[])
{
LkQueue_t *Head = LkQueue_Create();
printf("*********************************入队********************************\n");
LkQueue_Enqueue(Head, 5);
LkQueue_Enqueue(Head, 2);
LkQueue_Enqueue(Head, 1);
LkQueue_Enqueue(Head, 4);
LkQueue_Enqueue(Head, 6);
LkQueue_Print(Head);
printf("\n");
printf("*********************************出队********************************\n");
printf("出队元素为%d\n", LkQueue_Dequeue(Head));
printf("出队元素为%d\n", LkQueue_Dequeue(Head));
printf("出队元素为%d\n", LkQueue_Dequeue(Head));
printf("出队元素为%d\n", LkQueue_Dequeue(Head));
printf("出队元素为%d\n", LkQueue_Dequeue(Head));
printf("\n");
printf("*********************************入队********************************\n");
LkQueue_Enqueue(Head, 6);
LkQueue_Enqueue(Head, 4);
LkQueue_Enqueue(Head, 1);
LkQueue_Enqueue(Head, 2);
LkQueue_Enqueue(Head, 5);
LkQueue_Print(Head);
printf("\n");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术