今天,我想和大家谈一谈队列,首先,我们要了解什么是队列
1、队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点:
(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;
(2)在队尾添加元素,在队头删除元素。
2、队列的相关概念:
(1)队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头;
(2)入队:队列的插入操作;
(3)出队:队列的删除操作。
3、队列的操作:
(1)入队: 通常命名为push()
(2)出队: 通常命名为pop()
(3)求队列中元素个数
(4)判断队列是否为空
(5)获取队首元素
4、队列的分类:
(1)基于数组的循环队列(循环队列)
(2)基于链表的队列(链队列)
队列,在我们的生活中无处不在,食堂打饭的队列,买票的队列…
好了,谈完了队列的定义,我们就来看看如何使用吧
1.队列基本模型
const int maxn=100;
int a[maxn];//定义一个数组来模拟队列
front=1;//头指针指向队头元素
rear=maxn+1;//尾指针指向队尾后面一个元素
2.队列的运用 取牌游戏
取牌游戏
题目描述
Bessie正在使用一堆共K张(N≤K≤100,000; K是N的倍数)纸牌与N-1个(2≤N≤100)朋友玩取牌游戏。纸牌中共包含M = K / N张“good”牌和K - M张“bad” 牌。 Bessie负责发牌,她当然想独占所有“good”牌,因为她喜欢赢。 她的朋友怀疑她会耍诈,所以他们给出如下一些限制: 游戏开始时,将最上面的牌发给Bessie右手边的人; 每发完一张牌,她必须将接下来的P 张牌(1 ≤ P ≤ 10) 一张一张地依次移到最后放在牌堆的底部。 以逆时针方式持续给每位玩家发牌 Bessie迫切想赢,请你帮助她算出所有“good”牌放置的位置,以便Bessie得到所有“good”牌。牌从上到下依次按1,2,3,……编号。
输入格式
第一行,三个用空格间隔的整数:N, K ,P
输出格式
M行 从顶部按升序依次输出“good”牌的位置
输入输出样例
样例1
输入样例
3 9 2
输出样例
3
7
8
实现源码:
#include <bits/stdc++.h>