
学习阶段:C 语言、数据结构与算法初学者
**引言:**刚征服了'后进先出'的栈,现在让我们迎接一个全新的挑战——队列。这个'先进先出'的数据结构将带你体验截然不同的设计思维。本文将手把手带你用链表实现一个队列,为后续学习树形结构打下坚实基础。
一、队列初探:核心概念与结构设计
1.1 深入理解'先进先出'(FIFO)
概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有**'先进先出'**的特点。
- 入队列:进行插入操作的一端称为队尾;
- 出队列:进行删除操作的一端称为队头;

1.1.1 关键抉择:链表 vs 数组
那么实现队列,底层结构选择数组实现还是链表实现呢?

二者都可以实现,此时二者的插入、删除算法操作总会有一个时间复杂度为 O(1)。但是链表有补救操作(尾插为 O(N))——>定义一个指针始终指向尾节点,这就不会导致还要进行循环遍历找到尾节点来插入。
1.2 搭建队列的'骨架'
结构因为底层实现是链表,就要将节点结构、队列结构一同定义。
typedef int QDataType; //链表节点结构
typedef struct QueueNode {
QDataType data;
struct QueueNode* next;
}QueueNode;
//队列结构
typedef struct {
QueueNode* phead;
QueueNode* ptail;
}Queue;









