• 数据结构之链队(超级详细的分析哦)


    写此博文目的:

    1.方便自己日后复习,加深自己的理解

    2.也希望能给被链队困惑的朋友一点启发

    链队:

    将单链表按照队列的方式进行操作

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    typedef struct node{
        int data;
        struct node    *next;
    }Qnode, *pQnode;//节点
    
    typedef struct {
        pQnode    frond;
        pQnode    rear;
    }LinkQueue;//队列,头节点和尾节点
    /***************************************************/
    //初始化链队
    int InitLinkQueue(LinkQueue *Q)
    {
        pQnode head = (pQnode)malloc(sizeof(Qnode));//申请头节点的储存空间
        head->next = NULL;//头节点指向的下一个节点为空
        Q->frond = Q->rear = head;//链队的头尾节点都是头结点
        /*
        说明:链队列置空就建立一个空的头节点,然后头尾指针都指向这个空的头节点
        */
        return 1;
    }
    /***************************************************/
    //入队
    int EnQueue(LinkQueue *Q, int e)
    {
        pQnode pNew = (pQnode)malloc(sizeof(Qnode));//申请一个节点的储存空间
        pNew->data = e;//将要入链队的数据给新建的还没有加入链队列的结点
        ////假如链队列尾指针的next指向的是x这个地址的话(Q->rear->next===x)
        pNew->next = Q->rear->next;//将X这个地址给新建节点的next
        Q->rear->next = pNew;//将新建结点给尾指针指向的节点的next
        Q->rear = pNew;//尾指针后移
        return 1;
    }
    /***************************************************/
    //出队
    int DeQueue(LinkQueue *Q)
    {
        pQnode p = Q->frond->next;//取第一个结点
        //对空
        if (Q->frond == Q->rear)//空链队
            return -1;
    
        int e = p->data;//获得数据
        Q->frond->next = p->next;//头指针的next指向第一个结点的next
        if (Q->rear == p)//链队列里面只有一个数据的时候
            Q->rear = Q->frond;
        free(p);//释放已出结点的内存空间
        return e;
    }
    /***************************************************/
    int main()
    {
        LinkQueue q;
        InitLinkQueue(&q);
        int n=5;//输入5个数据
        for(int i=0;i<n;i++)
        {
            int x;
            scanf("%d",&x);
            EnQueue(&q,x);
        }
         for(int i=0;i<n;i++)
        {
            int x=DeQueue(&q);
            printf("%d
    ",x);
        }
        return 0;
    }

    结果如下:

    代码分析:

    置空和进链队:

     

    出链队:

    有任何错误的地方欢迎拍砖指教哦!!!

  • 相关阅读:
    Asp.Net Mvc Filter
    使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
    RCTF2020 calc & EasyBlog & swoole
    GKCTF-EzWeb+redis未授权访问
    BJD3rd
    http走私
    网鼎杯2020青龙组 web writeup
    De1CTF 2020 部分web
    js相关trick总结
    xss常见编码解析
  • 原文地址:https://www.cnblogs.com/yinbiao/p/8706766.html
Copyright © 2020-2023  润新知