链式队列入队操作代码解析及填空

本文将解析链式队列的入队操作,并提供填空练习,帮助读者理解链式队列的入队过程。

代码示例

Status EnQueue(LinkQueue &Q, QElemType e) {
    // 插入元素e为Q的新的队尾元素
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if (!p) exit(OVERFLOW);
    p->data = e;
    p->next = NULL;
    [1];  // 将新结点p插入到队尾

    [2];  // 若队列为空,修改队头指针指向新结点p

    return OK;
}

填空

  1. 将新结点p插入到队尾,即把新结点p连接到队列的最后一个结点之后,更新队尾指针为p。
if (Q.rear) {
    Q.rear->next = p;
    Q.rear = p;
} else {
    Q.front = Q.rear = p;
}
  1. 若队列为空,即队列的队头指针和队尾指针都为空,修改队头指针指向新结点p。
if (!Q.front) {
    Q.front = p;
}

完整代码

typedef struct QNode {
    QElemType data;
    struct QNode* next;
} QNode, * QueuePtr;

typedef struct {
    QueuePtr front;  // 队头指针
    QueuePtr rear;   // 队尾指针
} LinkQueue;

typedef int Status;
typedef int QElemType;

Status EnQueue(LinkQueue& Q, QElemType e) {
    QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
    if (!p) exit(OVERFLOW);
    p->data = e;
    p->next = NULL;
    
    if (Q.rear) {
        Q.rear->next = p;
        Q.rear = p;
    } else {
        Q.front = Q.rear = p;
    }

    return OK;
}

注意

以上代码只是对入队操作的填空,还需要根据实际情况完善其他相关代码,如结构体定义、初始化队列等。

相关链接

版权声明

本文内容仅供参考,如有错误或疏漏,欢迎指正。


原文地址: http://www.cveoy.top/t/topic/bx1a 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录