简单来说队列的特点:先进先出。
用一个比喻来说:新来的人总是站在队列的最后面,来得越早的人越靠前,也就越早的人越靠前,也就越早能买到票,就是先来的人先服务。
队列中我们通常会定义一个head(队首)和tail(队尾),便于操作。
现在我们写代码来实现队列的操作。(用结构体来实现)
下面先来一个简单的操作:对6,3,1,7,5,8,9,2,4进行解密操作:
规则:首先将第一个数删除,紧接着将第二个数放到末尾,再将第三个数删除并将第四个数这串数的末尾,再将第五个数删除…
代码:
#include <stdio.h>
int main()
{
int q[102] = { 0,6,3,1,7,5,8,9,2,4 }, head, tail;//初始化队列
head = 1;
tail=10; //队列中已经有9个元素了,tail指向队尾的最后一个位置
while (head < tail)
{
printf("%d,", q[head]);
head++;
q[tail] = q[head];
tail++;
head++;
}
return 0;
}
结果:
下面来实现队列的具体操作,可以将head,tail,data数据放在一个结构体里面:
#include <stdio.h>
struct queue
{
int data[100];//队列的主体,用来存储内容
int head;
int tail;
};
int main()
{
struct queue q;
int i,n;
q.head = 1;
q.tail = 1;
printf("请输入进入队列数据的个数:");
scanf("%d", &n);
printf("\n");
printf("请输入进队数据:");
for (i = 1; i <= n; i++)
{
scanf("%d", &q.data[q.tail]);
q.tail++;
}
printf("\n");
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++;
}
return 0;
}
结果: