链式队列入队操作代码解析及填空
链式队列入队操作代码解析及填空
本文将解析链式队列的入队操作,并提供填空练习,帮助读者理解链式队列的入队过程。
代码示例
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;
}
填空
- 将新结点p插入到队尾,即把新结点p连接到队列的最后一个结点之后,更新队尾指针为p。
if (Q.rear) {
Q.rear->next = p;
Q.rear = p;
} else {
Q.front = Q.rear = p;
}
- 若队列为空,即队列的队头指针和队尾指针都为空,修改队头指针指向新结点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 著作权归作者所有。请勿转载和采集!