C语言 队列(链式队列)(3)

return 0;
}
int IsemptyQueue(Queue p)
{
    if (p.front == p.rear)    /* 队首指针和队尾指针重合队列为空 */
    {
        return Empty;
    }
    else
    {
        return NoEmpty;
    }
}
Queue DeletNode (Queue p)
{
    Node *del;

if (IsemptyQueue(p) == Empty)        /* 判断队列是否为空*/
    {
        printf("队列为空,无法出队 ");
        return p;
    }
    else        /* 队列不为空 */
    {
        if (p.front->next == p.rear)    /* 如果出队的节点为最后一个节点 */
        {
            printf("出队节点的数据为%d----", p.rear->data);
            free(p.rear);    /* 释放最后一一个节点*/
            p.rear = p.front;        /* 队首指针和队尾指针都指向头节点 */
            p.front->next = NULL;
            p.length--;
        }
        else
        {
            del = p.front->next;
            printf("出队节点的数据为%d----", del->data);
            p.front->next = p.front->next->next; /* 使头节点的指针域指向出队节点的下一个节点 */
            free(del);        /* 释放出队的节点 */
            p.length--;
        }

return p;
    }
}
//函数功能:初始化队列(其实就是搞个头结点放在队列里面)
//单独弄个子函数来初始化队列是为了方便入队的时候判断队列是否为空
Queue init (Queue p)   
{                       
    p.front = p.rear = (Node *)malloc(sizeof(Node));
    if (p.front == NULL && p.rear == NULL)   
    {
        printf("initialization failed");
        exit(0);
    }
    p.front->next = NULL;

return p;
}
//函数功能:新建节点并添加到队列中,记录队列长度
Queue AppendNode (Queue p)
{
    int data;
    Node *q;

q = (Node *)malloc(sizeof(Node));
    if (q == NULL)    /* 判断分配内存是否失败 */
    {
        printf("No enough memory to allocate");
        exit(0);
    }
    p.rear->next = q;        /* 最后一个节点的指针指向新建节点*/
    p.rear = q;                /* 队尾指针指向新建节点*/

printf("Input node data\n");
    scanf("%d", &data);
    p.rear->data = data;
    p.rear->next = NULL;
    p.length++;
    return p;

}
//函数功能:按照先进先出原则对队列进行打印
void DisplyNode (Queue p)
{
    if (IsemptyQueue(p) == Empty)
    {
        printf("队列为空,无法打印\n");
    }
    else
    {
        p.front = p.front->next;
        printf("当前队列中的%d个节点[", p.length);
        while (p.front != NULL)
        {
            printf("%d->", p.front->data);
            p.front = p.front->next;
        }
        putchar(']');
        putchar('\n');
    }
}

程序试运行结果:

C语言 队列(链式队列)

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/36f114519ca0a6f04ec2db5c7e83eabd.html