鏈隊:創建鏈式隊列/初始化、入隊、出隊、銷毀、取隊頭


創建鏈式隊列

//創建鏈式隊列
typedef struct QNode {
    int data;
    struct QNode *next;
}QNode, *QueuePtr;

//創建鏈式隊列的鏈接形式
typedef struct {
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;

初始化鏈式隊列

//鏈式隊列的初始化
bool InitLinkQueue(LinkQueue &Q)
{
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    if (!Q.front)
        return false;
    Q.front = Q.rear = NULL;
    return true;
}

鏈式隊列的銷毀

//鏈式隊列的銷毀
bool DestroyLinkQueue(LinkQueue &Q)
{
    QNode *p;
    //從頭結點開始依次向下循環,找尋是否還存在結點,存在就一個個銷毀
    while (Q.front)
    {
        p = Q.front->next;//下一個地址先存着
        free(Q.front);
        Q.front = p;
    }

    //或者直接不用P
    /*
    while(Q.front)
    {
        Q.rear = Q.front->next;
        free(Q.front)
        Q.front = Q.rear;
    }
    */
    return true;
}

鏈式隊列的入隊---只能從隊尾入隊哦!!!!

//鏈式隊列的入隊---只能從隊尾入隊哦!!!!
bool EnLinkQueue(LinkQueue &Q, int e)
{
    QNode *p;
    p = new QNode;
    if (!p)
        return false;
    //想象在最后一個結點是如何插入的,串起來指針
    p->data = e;
    Q.rear->next = p;
    Q.rear = p;
}

鏈式隊列出隊---只能在隊頭出隊

//鏈式隊列出隊---只能在隊頭出隊
bool DeLinkQueue(LinkQueue &Q, int &e)
{
    //先判斷是否為隊空
    if (Q.rear == Q.front)
        return false;
    QNode *p;
    p = Q.front->next;
    e = p->data;
    Q.front->next = p->next;
    //如果p就是最后一個結點了,頭指針就是
    if (Q.rear == p)
    {
        Q.front = Q.rear;
    }
    delete p;
    return true;
}

取鏈式隊頭

//取鏈式隊頭
int GetLinkQueueHead(LinkQueue Q)
{
    return Q.front->next->data;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM