C语言队列的链式存储结构

#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);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值