用代码写出链队列的基本操作
时间: 2024-05-15 22:14:36 浏览: 16
当然可以,链队列的基本操作有入队、出队、判断队列是否为空、清空队列等。下面是基本操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node { // 节点结构体
int data;
struct Node* next;
} Node, *QueuePtr;
typedef struct { // 队列结构体
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
int InitQueue(LinkQueue* Q) { // 初始化队列
Q->front = Q->rear = (QueuePtr)malloc(sizeof(Node)); // 创建头节点
if (!Q->front) return 0; // 分配空间失败
Q->front->next = NULL;
return 1;
}
int IsEmpty(LinkQueue Q) { // 判断队列是否为空
return Q.front == Q.rear;
}
int EnQueue(LinkQueue* Q, int x) { // 入队
QueuePtr p = (QueuePtr)malloc(sizeof(Node)); // 创建新节点
if (!p) return 0; // 分配空间失败
p->data = x;
p->next = NULL;
Q->rear->next = p; // 链接新节点
Q->rear = p; // 修改队尾指针
return 1;
}
int DeQueue(LinkQueue* Q, int* x) { // 出队
if (Q->front == Q->rear) return 0; // 队列为空
QueuePtr p = Q->front->next; // 获取队头节点
*x = p->data;
Q->front->next = p->next; // 修改队头指针
if (Q->rear == p) // 如果队列中只有一个节点
Q->rear = Q->front; // 修改队尾指针
free(p); // 释放节点空间
return 1;
}
void ClearQueue(LinkQueue* Q) { // 清空队列
while (Q->front != Q->rear) { // 不断出队
QueuePtr p = Q->front->next;
Q->front->next = p->next;
if (Q->rear == p)
Q->rear = Q->front;
free(p);
}
}
int main() {
LinkQueue Q;
if (InitQueue(&Q)) { // 初始化队列
printf("EnQueue 1\n");
EnQueue(&Q, 1);
printf("EnQueue 2\n");
EnQueue(&Q, 2);
printf("DeQueue\n");
int x;
DeQueue(&Q, &x);
printf("x = %d\n", x);
printf("EnQueue 3\n");
EnQueue(&Q, 3);
ClearQueue(&Q); // 清空队列
}
return 0;
}
```
以上代码是链队列的基本操作,其中包括初始化队列、判断队列是否为空、入队、出队、清空队列,可以根据需要进行使用和修改。