采用链式存储实现队列的初始化,入队出队操作
时间: 2023-09-01 15:10:50 浏览: 199
链式存储的队列可以使用一个带有指针的结构体来实现,结构体中包含队列头指针和队列尾指针,同时每个节点也包含一个指向下一个节点的指针。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct queue {
Node *front; // 队头指针
Node *rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = queue->rear = NULL;
}
// 判断队列是否为空
int isEmpty(Queue *queue) {
return queue->front == NULL;
}
// 入队操作
void enQueue(Queue *queue, int data) {
// 创建新节点
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
// 如果队列为空,将新节点设为队列头和队列尾
if (isEmpty(queue)) {
queue->front = queue->rear = newNode;
}
// 否则将新节点插入到队列尾
else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队操作
int deQueue(Queue *queue) {
// 如果队列为空,返回-1
if (isEmpty(queue)) {
printf("Queue is empty.\n");
return -1;
}
// 取出队列头节点的值,并移除队列头节点
int data = queue->front->data;
Node *temp = queue->front;
queue->front = queue->front->next;
free(temp);
// 如果队列只有一个节点,出队后将队列尾指针置为NULL
if (queue->front == NULL) {
queue->rear = NULL;
}
return data;
}
int main() {
Queue queue;
initQueue(&queue);
enQueue(&queue, 1);
enQueue(&queue, 2);
enQueue(&queue, 3);
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
enQueue(&queue, 4);
enQueue(&queue, 5);
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
printf("%d\n", deQueue(&queue));
return 0;
}
```
输出结果为:
```
1
2
3
Queue is empty.
4
5
Queue is empty.
Queue is empty.
```
阅读全文