队列的链表实现(C语言)

队列


为了阅读方便和保持内容的完整性,这部分使用了队列的数组实现(C语言)中的内容

队列是一种允许在一端(队尾,rear)进行插入操作,另一端(队头,front)进行删除操作的数据结构。

  1. 插入:在队尾进行,也称为入队
  2. 删除:在队头进行,也称为出队

队列的示意图如下:
在这里插入图片描述

队列只能在一端进行插入,另一端进行删除,从示意图可以看出,队列里的元素是按照入队的顺序出队的(因此队列经常被用在排队等候类的应用中)。

根据队列的特征,队列也被称为先进先出(First In First OutFIFO)列表。

队列的操作

我们使用单链表实现对堆栈的操作,对单链表不熟悉的小伙伴可以先移步单链表及C语言实现,然后再来学习本节

单链表是单向的,队列其实也是单向的(只能在队头出,队尾入),因此,我们可以将单链表的头结点作为队列的队头,将单链表的尾结点作为队列的队尾

入队

在队尾中添加新结点,示意图如下:
在这里插入图片描述
操作如下:

rear->next=ptr;
ptr->next=NULL;
rear=ptr;

出队

将队头即头结点移出,示意图如下:
在这里插入图片描述

操作如下:

ptr=front;
front=front->next;
free(ptr);

遍历

只要结点的next不为NULL就继续遍历

查找

遍历的过程中与给定数据进行比对以查找

队列的C语言链表实现

文中提到的关于堆栈的所有操作都使用了C语言的链表进行了实现,具体代码见Github

代码的运行效果如下:
在这里插入图片描述

才疏学浅,难免有错误和不当之处,欢迎交流批评指正!
同时有问题的话欢迎留言或邮箱联系(ljt_IT@163.com)。

创作不易,觉得写得不错就微信扫码奖励一下吧!

Reward

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单链队列实现可以使用C语言中的链表实现,具体实现如下: ``` #include <stdio.h> #include <stdlib.h> // 定义队列结构体 typedef struct QueueNode { int data; struct QueueNode* next; } QueueNode; // 定义队列 typedef struct { QueueNode* front; // 队头指针 QueueNode* rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue* queue) { queue->front = NULL; queue->rear = NULL; } // 判断队列是否为空 int isQueueEmpty(Queue* queue) { return queue->front == NULL; } // 入队 void enqueue(Queue* queue, int data) { QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode)); node->data = data; node->next = NULL; if (queue->rear == NULL) { queue->front = node; queue->rear = node; } else { queue->rear->next = node; queue->rear = node; } } // 出队 int dequeue(Queue* queue) { if (isQueueEmpty(queue)) { printf("Error: Queue is empty.\n"); exit(1); } int data = queue->front->data; QueueNode* temp = queue->front; queue->front = queue->front->next; if (queue->front == NULL) { queue->rear = NULL; } free(temp); return data; } // 打印队列 void printQueue(Queue* queue) { printf("Queue: "); QueueNode* node = queue->front; while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } // 测试队列 int main() { Queue queue; initQueue(&queue); enqueue(&queue, 1); enqueue(&queue, 2); enqueue(&queue, 3); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); // Error: Queue is empty. return 0; } ``` 上述代码实现了单链队列的基本操作,包括初始化队列、判断队列是否为空、入队、出队、打印队列等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值