文章目录
- 队列
-
- [1 代码位置](#1 代码位置)
- [2 概念与结构](#2 概念与结构)
- [2 队列的实现](#2 队列的实现)
-
- [2.1 队列的初始化和销毁](#2.1 队列的初始化和销毁)
-
- [2.1.1 初始化](#2.1.1 初始化)
- [2.1.2 销毁](#2.1.2 销毁)
- [2.2 队列插入和删除数据](#2.2 队列插入和删除数据)
-
- [2.2.1 队尾插入数据(入队列)](#2.2.1 队尾插入数据(入队列))
- [2.2.2 队头删除数据(出队列)](#2.2.2 队头删除数据(出队列))
- [2.3 返回队头/队尾数据](#2.3 返回队头/队尾数据)
- [2.4 返回队列的有效数据个数](#2.4 返回队列的有效数据个数)
队列
1 代码位置
gitee\]([Queue/Queue · petrichor/2024-summer-c-language - 码云 - 开源中国 (gitee.com)](https://gitee.com/petrichor2024/2024-summer-c-language/tree/master/Queue/Queue))
### 2 概念与结构
#### 1.1概念
**只允许** 在⼀端进行插⼊数据操作,在另⼀端进行删除数据操作的特殊线性表,队列具有先进先出**FIFO(First In First Out)**
**⼊队列:进⾏插⼊操作的⼀端称为队尾**
**出队列:进⾏删除操作的⼀端称为队头**

#### 1.2结构
> 队列也可以数组和链表的结构实现,使⽤链表的结构实现更优⼀些,因为如果使⽤数组的结构,出队列在数组头上出数据,效率会⽐较低。
>
> \*\*数组头删时间复杂度:O(N) \*\* **数组尾插时间复杂度:O(1)**
>
> **单链表头删时间复杂度:O(1)** **单链表尾插时间复杂度:O(N)**
* 乍一看二者难分伯仲,但如果我们在单链表的结构里再定义一个指向尾结点的指针,那么单链表就可以实现O(1)的尾插时间复杂度,而数组没有什么特别好的办法实现这种转变。

*** ** * ** ***
### 2 队列的实现
**Queue.h**
```c
#pragma once
#include