算法 --- 队列

算法学习

栈、队列、链表

解密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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42678507/article/details/82859444