typedef struct QNode { QElemType data; struct QNode* next; }QNode, * QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;后怎么创建空队列
时间: 2024-01-14 07:08:15 浏览: 29
要创建一个空队列,可以先定义一个LinkQueue类型的变量queue,然后将其front和rear成员都指向空节点,示例代码如下:
```
LinkQueue queue;
queue.front = queue.rear = (QueuePtr)malloc(sizeof(QNode));
queue.front->next = NULL;
```
这里使用了动态内存分配函数malloc来为队头节点分配内存,然后将front和rear都指向这个节点。注意,由于队列为空,队头和队尾指针指向同一个空节点,这个空节点的next指针应该指向NULL。
相关问题
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;
}
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)