算法学习
栈、队列、链表
解密QQ号 -- 队列
先对队列来一个定义:队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列的尾部(tail)进行插入操作,这称为“入队”。当队列中没有元素时(即 head == tail),这称为空队列。
队列遵守“先进先出”原则!
举个例子!
当你问一个女生要QQ号的时候,那个女生并不想直接给你,她想考验你一下,她先给你一串数字 9 6 4 1 2 3 6 8 4,然后说这串数字满足一个规则,先从第一个数字开始,第一个数字删除,下一个数字放到队尾,然后下一个数字继续删除,循环往复,直到剩最后一个数字删除后,删除数字的顺序就是她的QQ号。
1. 我们先将队列的三个元素( data head tail)放到结构体中,然后循环输入女生所给的数字
2. 用 for 循环 先输出 data[head] 之后 head++ 这样可以实现删除操作。
3. 将 data[tail] = data[head] 之后 head++ 这样可以实现将下一个数字放到队尾的操作。
4. 最后 head++ 将队首出队
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
/*
* 本程序是将“简单的队列程序”进行的一个优化,将队列的三个元素放在一个结构体中
* 郭文峰
* 2018/9/26
*/
struct queue
{
int data[100];
int head;
int tail;
};
int main(void)
{
int i = 0;
struct queue q;
q.head = 0;
q.tail = 0;
//依次向队列插入9个数
for (i = 0; i < 9; i++)
{
scanf("%d", &q.data[q.tail]);
q.tail++;
}
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++;//再将队首出队
}
printf("\n");
system("pause");
return 0;
}