void InitQueue(LinkQueue &Q) { Q.rear = (QueuePtr)malloc(sizeof(QNode)); Q.rear->next = Q.rear;}
时间: 2023-05-31 07:02:57 浏览: 157
(LinkQueue &Q)
{
Q.front = Q.rear = new QNode; // 创建头结点
Q.front->next = nullptr; // 头结点的next指针设为空
}
相关问题
解释这段代码void EnQueue(LinkQueue &Q,QElemType e) //进队列操作 { QueuePtr p; if(!(p=(QueuePtr)malloc(sizeof(QNode)))) exit(0); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return; } int DeQueue(LinkQueue &Q,QElemType &e) //出队列操作 { QueuePtr p; if (Q.front==Q.rear) return 0; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; free(p); return 1; } void InitQueue(LinkQueue &Q) //构造一个空队列 { if (!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)))) exit(0); //申请空间失败 Q.front->next=NULL; return; } int QueueEmpty(LinkQueue Q) //判断链式队列是否为空 { return (Q.front->next==NULL); }
这段代码是一个链式队列的基本操作实现,包括进队列操作、出队列操作、构造空队列和判断队列是否为空。
- EnQueue函数实现了进队列操作,将元素e加入到队列Q的队尾。首先使用malloc函数申请一个新的结点p,将元素e赋值给p的data域,并将p的next指向NULL。然后将p添加到队列Q的队尾,并更新Q的rear指针指向p。
- DeQueue函数实现了出队列操作,将队列Q的队头元素出队,并将其存储到e中。首先判断队列是否为空,若为空则返回0。然后将队头结点p指向Q的front的下一个结点,将p的data域存储到e中,将Q的front指针指向p的下一个结点,如果p是队列Q的最后一个结点,则将Q的rear指向Q的front。最后释放p的空间,并返回1表示成功出队列。
- InitQueue函数用于构造一个空队列,首先使用malloc函数申请一个结点p作为队列的头结点,然后将Q的front和rear指针都指向p,并将p的next指向NULL。
- QueueEmpty函数用于判断链式队列是否为空,若队列的front的next指针为NULL,则队列为空,返回1,否则返回0。
使用c语言构建一个带头节点的空队。部分代码为int InitQueue(LinkQueue &Q){=new QNode;return OK}
以下是构建带头节点的空队的完整代码:
```
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int QElemType;
// 队列结点结构体
typedef struct QNode
{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
// 队列结构体
typedef struct
{
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
}LinkQueue;
// 构造一个带头结点的空队列Q
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); // 构造一个空队列,队头队尾都指向头结点
if (!Q.front) // 存储分配失败
{
exit(ERROR);
}
Q.front->next = NULL; // 头结点的指针域置空
return OK;
}
int main()
{
LinkQueue Q;
if (InitQueue(Q))
{
printf("带头节点的空队列构建成功!\n");
}
else
{
printf("带头节点的空队列构建失败!\n");
}
return 0;
}
```
注意:在这个代码中,使用了引用类型LinkQueue &Q来传递队列的地址,以便在函数InitQueue中修改队列的内容。
阅读全文