用c++写一个链队列的入队出队,初始化的代码并输出
时间: 2023-06-12 18:07:05 浏览: 95
以下是用 C 语言编写的链队列的入队、出队和初始化操作的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 链队列结点结构体
typedef struct QueueNode {
int data; // 数据域
struct QueueNode *next; // 指针域
} QueueNode;
// 链队列结构体
typedef struct {
QueueNode *front; // 队头指针
QueueNode *rear; // 队尾指针
} LinkQueue;
// 初始化链队列
void InitQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueueNode *)malloc(sizeof(QueueNode)); // 创建头结点
Q->front->next = NULL; // 头结点的指针域置为 NULL
}
// 入队
void EnQueue(LinkQueue *Q, int x) {
QueueNode *p = (QueueNode *)malloc(sizeof(QueueNode)); // 创建新结点
p->data = x; // 将新结点的数据域设置为 x
p->next = NULL; // 新结点的指针域置为 NULL
Q->rear->next = p; // 将新结点插入到队尾
Q->rear = p; // 修改队尾指针
}
// 出队
int DeQueue(LinkQueue *Q) {
if (Q->front == Q->rear) { // 队列为空,无法出队
printf("Queue is empty.\n");
return -1;
}
QueueNode *p = Q->front->next; // 指向队头结点
int x = p->data; // 获取队头结点的数据
Q->front->next = p->next; // 将队头结点从队列中删除
if (Q->rear == p) { // 如果队头结点是队尾结点
Q->rear = Q->front; // 修改队尾指针
}
free(p); // 释放队头结点的空间
return x;
}
// 测试链队列的入队、出队和初始化操作
int main() {
LinkQueue Q;
InitQueue(&Q); // 初始化链队列
printf("EnQueue 1, 2, 3.\n");
EnQueue(&Q, 1);
EnQueue(&Q, 2);
EnQueue(&Q, 3);
printf("DeQueue: %d, %d, %d.\n", DeQueue(&Q), DeQueue(&Q), DeQueue(&Q));
return 0;
}
```
运行结果为:
```
EnQueue 1, 2, 3.
DeQueue: 1, 2, 3.
```
阅读全文