用c语言实现链队列的初始化,入队,出队等操作
时间: 2023-10-09 11:17:37 浏览: 185
以下是用C语言实现链队列的初始化、入队、出队等操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node, *NodePtr;
typedef struct {
NodePtr front; // 队头
NodePtr rear; // 队尾
} LinkQueue;
// 初始化链队列
void initQueue(LinkQueue *q) {
q->front = q->rear = (NodePtr) malloc(sizeof(Node));
if (!q->front) {
exit(1); // 内存分配失败
}
q->front->next = NULL;
}
// 判断链队列是否为空
int isQueueEmpty(LinkQueue q) {
return q.front == q.rear;
}
// 入队
void enQueue(LinkQueue *q, int data) {
NodePtr newNode = (NodePtr) malloc(sizeof(Node));
if (!newNode) {
exit(1); // 内存分配失败
}
newNode->data = data;
newNode->next = NULL;
q->rear->next = newNode;
q->rear = newNode;
}
// 出队
int deQueue(LinkQueue *q) {
if (isQueueEmpty(*q)) {
printf("Queue is empty.\n");
exit(1); // 队列为空,终止程序
}
NodePtr frontNode = q->front;
int data = frontNode->next->data;
q->front = frontNode->next;
if (q->rear == frontNode) {
q->rear = q->front;
}
free(frontNode);
return data;
}
// 输出链队列中的元素
void printQueue(LinkQueue q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return;
}
NodePtr ptr = q.front->next;
while (ptr) {
printf("%d ", ptr->data);
ptr = ptr->next;
}
printf("\n");
}
int main() {
LinkQueue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
printf("队列中的元素为:");
printQueue(q);
printf("出队元素为:%d\n", deQueue(&q));
printf("出队元素为:%d\n", deQueue(&q));
printf("队列中的元素为:");
printQueue(q);
enQueue(&q, 4);
printf("队列中的元素为:");
printQueue(q);
return 0;
}
```
在上述代码中,`LinkQueue` 是链队列的结构体,其中包含队头 (`front`) 和队尾 (`rear`) 两个指针。`Node` 结构体表示链队列中的节点,包含数据 (`data`) 和指向下一个节点的指针 (`next`)。通过 `initQueue` 函数初始化链队列,通过 `enQueue` 函数实现入队操作,通过 `deQueue` 函数实现出队操作,通过 `printQueue` 函数输出链队列中的元素。在 `main` 函数中演示了链队列的使用。
阅读全文