一、队列的特点
①由数组存储的一种数据结构
②有两个标记,一个是标记头队列head,一个是标记尾队列的tail
二、队列的作用
可以处理一些先进来,但最后才出去的这类数据,比如说有一串数字,然后把第一个删去并输出此数字,第二个数字放在这一串地末尾,不断重复这个行为,直到数字全删完。像这种就是很典型的前面的数字比后面的数字要出去的晚的类型,所以用数组保存的队列形式存储很合适
三、队列的易错点
注意,引入的两个整型变量 head 和 tail。head 用来记录队列的队首(即第一位),tail 用来记录队列的队尾**(即最后一位)的下一个位置**。如果不是下一位,那么当队列中只剩下一个元素时,队首和队尾重合会带来一些麻烦。我们这里规定队首和队尾重合时,队列为空。
四、队列的实现步骤
1.先定义一个结构体
将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型,如下:
struct queue
{
int data[100];//队列的主体,用来存储内容
int head;//队首
int tail;//队尾
};
这个结构体有三个成员分别是:整型数组 data、整型 head 和整型 tail。这样我们就可以把这三个部分放在一起作为一个整体来对待。你可以这么理解:我们定义了一个新的数据类型,这个新类型非常强大,用这个新类型定义出的每一个变量可以同时存储一个整型数组和两个整数。
2.在主函数中,新建一个queue类型的变量,然后对其进行初始化
初始化方法就是对数组赋值,用一个for循环
struct queue q;
int i;
//初始化队列
q.head=1;
q.tail=1;
for(i=1;i<=9;i++)
{
//依次向队列插入9个数
scanf("%d",&q.data[q.tail]);
q.tail++;
}
注意!新建队列类型变量的时候,struct queue 需要整体使用,不能直接写 queue q
3.然后对队列进行操作
比如有一个操作如下
while(q.head<q.tail) //当队列不为空的时候执行循环
{
//打印队首并将队首出队
printf("%d ",q.data[q.head]);
q.head++;
//先将新队首的数添加到队尾
q.data[q.tail]=q.data[q.head];
q.tail++;
//再将队首出队
q.head++;
}
注意!!每次操作一次后,都要让head++,tail–