一:队列的概念 队列(queue)是一种特殊的线性表,只允许在表的头部(队首)进行删除操作,只允许在表 的尾部(队尾)进行插入操作,是一种操作受限制的线性表。 队列的数据元素又称为队列元素,在队列 中插入一个队列元素称为入队操作,从队列中删除一个队列元素称为出队操作。 因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删 除,故队列又称为先进先出(FIFO—first in first out)线性表。
二:STL中queue的使用 (常见用法)
#include // 引入头文件
queue q; // 新建队列q,队列中元素类型为int、double、char、string等
q.push(node); // 入队操作,结点node入队 例:q.push(5);
q.pop(); // 出队操作
q.size(); // 返回队列长度
q.front(); // 返回队首元素
q.back(); // 返回队尾元素
q.empty(); // 判断队列是否为空,空则返回true
三: 队列练习 (1) 基础练习 编写程序,使用STL中的queue库操作栈。 输入一个整数N ,表示有N个整数。 定义一个队列(queue),接下来输入N个整数,将其保存在 队列中。 要求:第一行输出队首元素(使用front()函数)第二行输出队尾元素(使用back()函数) 出队一次 第三行输出出队后的队首元素 第四行输出队列长度 第五行输出队列的所有队列元素
【输入】 6 6 4 7 9 2 1
【输出】 队首元素:6 队尾元素:1 队首元素:4 队列长度:5 4 7 9 2 1
(2) 鱼的记忆 有一条鱼开了一家理发店,为了提高服务质量,每来一名顾客,它都要询问记住顾客的喜好。但 是可惜脑力有限,它只能同时记住m个顾客的喜好,此时若再有新的顾客来的话,为了记住新来的顾 客,它将会忘掉最早被记住的顾客的信息。最近理发店装修停业,鱼成功忘掉了所有顾客的喜好,它想 要知道在之后的n个顾客中,询问的次数是多少? 第一行输入两个数n、m,分别表示顾客数和同时记忆数 第二行n个数,分别表示顾客的编号(1 - n) 输出一行一个数,表示询问次数
【输入1】 7 3 1 2 1 5 4 4 1
【输出2】 5
(3) 银行大厅排队 在银行营业大厅共服务3种客户,类型为A \ B \ C,大厅分别设置了3个窗口分别服务三种客 户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。 每个窗口按照客户到来的顺序进行服务。 【输入】 第一行输入先输入n表示客户数量 第二行输入每个客户的类型 第三行输入每个客户的办理时间,数据之间用用空格隔开 【输出】 第一行输出A类客户的平均办理时间 第二行输出B类客户的平均办理时间 第三行输出C类客户的平均办理时间
【输入1】 8 ABCBCAAA 10 20 30 40 50 60 70 80
【输出2】 55 30 40