• 队列的链式存储---链表实现(有头结点)


    /* 队列的链式存储 */
    /* with header */
    /* with no typedef */
    struct Node{
        ElementType Ele;
        struct Node *Next;
    };
    struct LinQ{
        struct Node *rear;
        struct Node *front;
    };
    struct LinQ *
    CreateQ( void )
    {
        struct LinQ *Ptr;
        struct Node *header;
        
        Ptr = malloc(sizeof(struct LinQ));
        if(Ptr == NULL )
            Error("out of space ");
            
        header = malloc( sizeof( struct Node ) );
        if(header == NULL )
            error("out of space ");
            
        header->Next = NULL;
        Ptr->front = Ptr->rear = header;
    }
    void
    AddQ( struct LinQ *PtrQ, ElementType X )
    {
        struct Node *Ptr;
        Ptr = malloc(sizeof(struct Node ));
        if(Ptr == NULL)
            Error("out of space ");
        Ptr->Ele = X;
        Ptr->Next = NULL;
        PtrQ->rear->Next = Ptr;
        PtrQ->rear = Ptr; 
    }
    int
    IsEmpty( struct LinQ * PtrQ )
    {
        return PtrQ->front->Next == NULL;
    }
    
    ElementType
    DeleteQ( struct LinQ * PtrQ )
    {
        struct Node * TmpCell;
        if( IsEmpty( PtrQ ) )
            Error("empty Queue");
        Tmpcell = PtrQ->front->Next;
        PtrQ->front->Next = TmpCell->Next;
        free( TmpCell );
    }
    View Code

    CreateQ旨在创造一个front和rear都指向头结点header的LinQ结构

    头结点处Next设为NULL,在判断是否空队时可用

    front一直指到头结点

    新增结点的Next一定改为NULL

    结论:可以用typedef的地方就用,可以用头结点的地方就用

  • 相关阅读:
    [CF997E] Good SubSegment
    CF916E
    BZOJ2006 超级钢琴
    BZOJ4571
    凸包总结
    树形DP入门
    bzoj4300 绝世好题(位运算+DP)
    bzoj4552 [Tjoi2016&Heoi2016]排序 (线段树+二分)
    SP1716 GSS3
    Noip2009 Hankson 的趣味题 (简单数学)
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4620571.html
Copyright © 2020-2023  润新知