队列 循环链表表示队列

题目:

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),请完成下列任务:

1: 队列初始化,成功返回真,否则返回假: bool init_queue(LinkQueue *LQ);

2: 入队列,成功返回真,否则返回假: bool enter_queue(LinkQueue *LQ, ElemType x);

3: 出队列,成功返回真,且*x为出队的值,否则返回假 bool leave_queue(LinkQueue *LQ, ElemType *x);

相关定义如下:

typedef struct _QueueNode {
    ElemType data;          // 数据域
    struct _QueueNode *next;      // 指针域
}LinkQueueNode, *LinkQueue;

代码:

#include "list.h" // 请不要删除,否则检查不通过
#include <stdio.h>
#include <stdlib.h>

bool init_queue(LinkQueue* LQ)
{

    (*LQ) = (LinkQueue*)malloc(sizeof(LinkQueue));
    (*LQ)->next = (*LQ);
    if (LQ != NULL) {
        return 1;
    } else {
        return 0;
    }
}
bool enter_queue(LinkQueue* LQ, ElemType x)
{
    LinkQueueNode* p; //尾指针//
    LinkQueueNode* q; //入队数据//
    q = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));
    p = (*LQ);
    if (q != NULL) {
        q->data = x;
        q->next = p->next;
        p->next = q;
        (*LQ) = q;
        return 1;

    } else {
        return 0;
    }
}

bool leave_queue(LinkQueue* LQ, ElemType* x)
{

    LinkQueueNode* p; //定义指针
    if ((*LQ)->next == (*LQ)) {
        return 0;
    }
    p = (*LQ);
    if (p->next->next == p) {
        *x = (*LQ)->data;
        p = p->next;
        p->next = p;
        free(*LQ);
        (*LQ) = p;

    } else {
        p = p->next->next;
        (*LQ)->next->next = p->next;
        *x = p->data;
        free(p);
    }
    return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值