typedef struct QNode { QElemType data; struct QNode* next; }QNode, * QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;后空队列创建函数
时间: 2024-01-14 12:08:15 浏览: 43
可以定义一个函数来创建空队列,函数返回一个LinkQueue类型的空队列。示例代码如下:
```
LinkQueue InitQueue() {
LinkQueue queue;
queue.front = queue.rear = (QueuePtr)malloc(sizeof(QNode));
queue.front->next = NULL;
return queue;
}
```
这个函数使用了和上面相同的方法来创建空队列,并将其作为返回值返回。调用这个函数即可创建一个空队列,示例代码如下:
```
LinkQueue queue = InitQueue();
```
这里将函数返回的空队列赋值给了一个LinkQueue类型的变量queue。
相关问题
typedef struct QNode { QElemType data; struct QNode* next; }QNode, * QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;后插入元素函数
可以定义一个函数来向队列中插入元素,函数接受一个LinkQueue类型的队列和要插入的元素值作为参数,示例代码如下:
```
Status EnQueue(LinkQueue* queue, QElemType elem) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p) return ERROR; // 分配内存失败
p->data = elem;
p->next = NULL;
queue->rear->next = p;
queue->rear = p;
return OK;
}
```
这个函数先使用动态内存分配函数malloc来为新元素节点分配内存,如果分配失败则返回ERROR。然后将新节点的数据值设置为要插入的元素值,将其next指针设置为NULL。接着将新节点插入队列尾部,即将rear指针指向新节点,并将上一个队尾节点的next指针指向新节点。最后返回插入操作的执行结果,如果成功则返回OK。调用这个函数可以向队列中插入一个元素,示例代码如下:
```
LinkQueue queue = InitQueue();
EnQueue(&queue, 1);
```
这里先创建了一个空队列,然后向队列中插入了一个值为1的元素。
下面程序为队列的基本操作,请将程序代码补充完整。 typedef struct Qnode { QElemType data; struct Qnode *next; }Qnode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; Status InsertElem(LinkQueue &Q,LQElem e) { Qnode *p; p=(Qnode *)malloc(sizeof(Qnode)); p->next=(1) ; p->data=(2) ; (3) =p; (4) =p; } Status DeleteElem(LinkQueue &Q,LQElem &e) { Qnode *r; r=(5) ; e=r->data; Q.front->next=(6) ; free((7) ); }
*Q, QElemType e)
{
QueuePtr p = (QueuePtr)malloc(sizeof(Qnode)); // 创建一个新节点
if (!p) // 内存分配失败
return ERROR;
p->data = e; // 将数据存入新节点
p->next = NULL; // 新节点的下一个节点指针为空
Q->rear->next = p; // 将新节点插入队尾
Q->rear = p; // 队尾指针指向新节点
return OK;
}
Status DeleteElem(LinkQueue *Q, QElemType *e)
{
if (Q->front == Q->rear) // 队列为空
return ERROR;
QueuePtr p = Q->front->next; // 指向队头节点
*e = p->data; // 将队头节点的数据存入e中
Q->front->next = p->next; // 将队头节点的下一个节点作为新的队头节点
if (Q->rear == p) // 如果队头节点是队尾节点
Q->rear = Q->front; // 将队尾指针指向头节点
free(p); // 释放被删除的节点
return OK;
}