链队:创建链式队列/初始化、入队、出队、销毁、取队头


创建链式队列

//创建链式队列
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