c语言编程链队列基本操作完整代码
时间: 2023-09-19 14:05:06 浏览: 105
链队列是一种基于链表实现的队列,其特点是插入和删除的时间复杂度为O(1),且不会出现队满的情况。以下是C语言链队列的基本操作完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == NULL;
}
// 入队操作
void enQueue(Queue *q, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (isQueueEmpty(q)) {
q->front = q->rear = newNode;
} else {
q->rear->next = newNode;
q->rear = newNode;
}
}
// 出队操作
int deQueue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return -1;
} else {
int data = q->front->data;
Node *temp = q->front;
q->front = q->front->next;
free(temp);
if (q->front == NULL) {
q->rear = NULL;
}
return data;
}
}
// 打印队列中的元素
void printQueue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
} else {
printf("Queue elements: ");
Node *temp = q->front;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
}
int main() {
Queue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
enQueue(&q, 4);
enQueue(&q, 5);
printQueue(&q);
deQueue(&q);
deQueue(&q);
printQueue(&q);
return 0;
}
```
以上代码中,我们定义了一个链表节点Node和一个队列Queue。其中,Node包含了一个整型数据data和一个指向下一个节点的指针next;Queue包含了队列的头部指针front和尾部指针rear。在初始化队列时,我们将头部和尾部指针都指向NULL;在入队操作时,我们新建一个节点,并将其加入到队列的尾部;在出队操作时,我们将头部节点出队,并将头部指针指向下一个节点。最后,我们可以通过printQueue函数打印队列中的元素。
阅读全文