文章目录
- 模拟队列
 - queue
 - 头文件
 - 定义
 - 基本操作
 
- 循环队列queue
 - 优先队列priority_queue
 - 银行大厅排队
 - 训练挑战
 
模拟队列
先进先出
 队列大概模样
 
 代码截屏:
 
queue
头文件
#include <queue>
 
定义
//队列 
  queue<int> q;
 
基本操作
  //向队尾插入一个元素
  q.push();
  
  //返回队头元素
  q.front();
  
  //返回队尾元素
  q.back();
  
  //弹出对头元素
  q.pop();
  
  //元素个数
  q.size();
  
  //清空队列
  q = queue<int>();
 
循环队列queue
	//push/pop
	//push入队尾,pop入队头 
	for(int i=0;i<10;i++) q.push(i);
	q.pop();
	
	//front/back
	int x=q.front();
	int y=q.back();
	cout<<"front= "<<x<<endl<<"back= "<<y<<endl;
 
优先队列priority_queue
用法详解点这里
- top 访问队头元素
 - empty 队列是否为空
 - size 返回队列内元素个数
 - push 插入元素到队尾 (并排序)
 - emplace原地构造一个元素并插入队列
 - pop 弹出队头元素
 - swap 交换内容
 
定义
//升序序列
	priority_queue<int,vector<int>,greater<int> > qg;
	//降序序列
	priority_queue<int,vector<int>,less<int> > ql;
	
 
银行大厅排队
描述:
在银行营业大厅共服务3种客户,类型为A\B\C,大厅分别设置了3个窗口分别服务三种客户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。每个窗口按照客户到来的顺序进行服务。
输入:
第一行输入先输入n表示客户数量
第二行输入每个客户的类型,数据之间用用空格隔开
第三行输入每个客户的办理时间,数据之间用用空格隔开
/示例/
 8
 A B C B C A A A
 10 20 30 40 50 60 70 80
 1
 2
 3
 4
 输出:
第一行输出A类客户的平均办理时间 :
第二行输出B类客户的平均办理时间 :20+40=60/2=30
第三行输出C类客户的平均办理时间
/示例/
 55
 30
 40
 解题思路:
为了算出各类客户的平均办理时间,首先要知道的是各类客户花费的总时间。
3种窗口服务三种客户,也就是算出每个窗口的时间。通过将每个窗口抽象成一个队列,将时间作为内容填入队列,即可算出总时间。
除了每个窗口的队列以外,我们还需要将输入的顺序进行存储,因此总共需要4条队列。
#include<iostream>
#include<queue>
using namespace std;
int main() {
	int t;  //次数
	int m;  //待输入的时间
	char ch;  //待输入的客户类型
	queue<int> myQe, myQa[3];  // Qe代表次序,Qa代表窗口
	cin >> t;
    
    // 输入部分
	while (t--) {
		cin >> ch;
		myQe.push(ch-65);  //注意此处push进去的是一个数字,为了查找方便,当ch=A时,把0给push进去,以此类推。A字符转化为数字为65
	}
    
    //输入部分
	while (!myQe.empty()) {
		cin >> m;
		int num = myQe.front();  //根据顺序获取窗口
		myQe.pop();
		myQa[num].push(m);
	}
    
    //输出部分
	for (int i = 0; i < 3; i++) {
		int n = myQa[i].size();  //计算平均数时需要的分母
		int sum = 0;
		while (!myQa[i].empty()) {
			sum += myQa[i].front();
			myQa[i].pop();
		}
		cout << sum / n << endl;
	}
}
 
训练挑战
#include<iostream>
#include<queue>
using namespace std;
int main() {
	int t;  //次数
	int m;  //待输入的时间
	char ch;  //待输入的客户类型
	queue<int> myQe, myQa[3];  // Qe代表次序,Qa代表窗口
	cin >> t;
    
    // 输入部分
	while (t--) {
		cin >> ch;
		; //注意此处push进去的是一个数字,为了查找方便,当ch=A时,把0给push进去,以此类推。A字符转化为数字为65
	}
    
    //输入部分
	while (!myQe.empty()) {
		cin >> m;
		int num = myQe.front();  //根据顺序获取窗口
		;//myQe弹出
		;//myQa[num]入队列m
	}
    
    //输出部分
	for (int i = 0; i < 3; i++) {
		int n = myQa[i].size();  //计算平均数时需要的分母
		;//定义num,并初始化
		while () {//判断myQa[i]是否为空
			;//sum加上当前myQa[i]的值
			;//myQa[i]弹出
		}
		;//输出 sum 除以 n 答案 
	}
}
                


















