首页 > 其他 > 详细

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

时间:2020-10-25 23:26:13      阅读:66      评论:0      收藏:0      [点我收藏+]

创建链式队列

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

技术分享图片

 

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

原文:https://www.cnblogs.com/imxiaodi/p/13875905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!