#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
struct LinkNode* Next;
}LinkNodes;
typedef struct Mes
{
LinkNodes* Use_Node;
int id;
int age;
char name[20];
}Use_Nodes;
typedef struct Link_Queue
{
LinkNodes* Head;
int Size;
LinkNodes* Trial;
}Link_Queues;
typedef void* LQueue;
LQueue Link_Queue_Init();
void Link_Queue_Push(LQueue P_Queues, LQueue value_in);
void Link_Queue_Pop(LQueue P_Queue);
void Link_Queue_Head(LQueue P_Queue, void(*My_prointf)(LQueue));
void Link_Queue_Back(LQueue P_Queue, void(*My_prointf)(LQueue));
void my_printf1(LQueue node_in);
void Link_Queue_Destory(LQueue P_Queue);
void Link_Queue_Len(LQueue P_Queue);
int main() {
printf("---开始创建队列---\n");
LQueue Queue_head = Link_Queue_Init();
printf("---队列创建完毕---\n");
Use_Nodes n1 = {NULL, 1, 21, "花木兰"};
Use_Nodes n2 = {NULL, 2, 21, "凯皇"};
Use_Nodes n3 = {NULL, 3, 21, "百里守约"};
Use_Nodes n4 = {NULL, 4, 19, "百里玄策"};
Use_Nodes n5 = {NULL, 5, 22, "苏烈"};
Use_Nodes n6 = {NULL, 6, 20, "李信"};
printf("---开始入队列--\n");
Link_Queue_Push(Queue_head, &n1);
Link_Queue_Back(Queue_head, my_printf1);
Link_Queue_Push(Queue_head, &n2);
Link_Queue_Back(Queue_head, my_printf1);
Link_Queue_Push(Queue_head, &n3);
Link_Queue_Back(Queue_head, my_printf1);
Link_Queue_Push(Queue_head, &n4);
Link_Queue_Back(Queue_head, my_printf1);
Link_Queue_Push(Queue_head, &n5);
Link_Queue_Back(Queue_head, my_printf1);
Link_Queue_Push(Queue_head, &n6);
Link_Queue_Back(Queue_head, my_printf1);
printf("---入队列完毕---\n");
Link_Queue_Len(Queue_head);
printf("---开始出队列--\n");
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
Link_Queue_Head(Queue_head, my_printf1);
Link_Queue_Pop(Queue_head);
printf("---出队列完毕---\n");
Link_Queue_Len(Queue_head);
printf("---开始销毁队列---\n");
Link_Queue_Destory(Queue_head);
Queue_head = NULL;
printf("---销毁队列完毕---\n");
system("pause");
return 0;
}
LQueue Link_Queue_Init() {
Link_Queues* New_Queue = (Link_Queues*)malloc(sizeof(Link_Queues));
New_Queue -> Head = (LinkNodes*)malloc(sizeof(LinkNodes));
if(New_Queue == NULL || New_Queue -> Head == NULL)
return NULL;
New_Queue -> Head -> Next = NULL;
New_Queue -> Trial = New_Queue -> Head;
return New_Queue;
}
void Link_Queue_Push(LQueue P_Queues, LQueue value_in) {
if(P_Queues == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*)P_Queues;
LinkNodes* My_node = (LinkNodes*) value_in;
My_Queue -> Trial -> Next = My_node;
My_Queue -> Trial = My_Queue -> Trial -> Next;
My_Queue -> Size ++;
}
void Link_Queue_Pop(LQueue P_Queue) {
if(P_Queue == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*)P_Queue;
My_Queue -> Head -> Next = My_Queue -> Head -> Next -> Next;
My_Queue -> Size --;
}
void Link_Queue_Head(LQueue P_Queue, void(*My_prointf)(LQueue)) {
if(P_Queue == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*)P_Queue;
if(My_Queue -> Head -> Next == NULL)
return;
My_prointf(My_Queue -> Head -> Next);
}
void Link_Queue_Back(LQueue P_Queue, void(*My_prointf)(LQueue)) {
if(P_Queue == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*)P_Queue;
if(My_Queue -> Trial == NULL)
return;
My_prointf(My_Queue -> Trial);
}
void my_printf1(LQueue node_in) {
if(node_in == NULL)
return;
Use_Nodes* p1 = (Use_Nodes*) node_in;
printf("id : %d, 年龄 :%d, 姓名:%s\n", p1 ->id, p1 -> age, p1 -> name);
}
void Link_Queue_Destory(LQueue P_Queue) {
if(P_Queue == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*) P_Queue;
free(My_Queue -> Head);
free(My_Queue);
}
void Link_Queue_Len(LQueue P_Queue) {
if(P_Queue == NULL)
return;
Link_Queues* My_Queue = (Link_Queues*)P_Queue;
printf("队列的长度为:%d\n", My_Queue -> Size);
}
C语言队列的链式存储结构
最新推荐文章于 2024-03-11 22:33:08 发布