队列:在数据结构中也成为操作受限的线性表,是一种只允许在表的一端插入,在另一端删除的线性表
特点:先进先出,像打饭《排在最前面的先买,后到的排在队尾,即删除在队头,插入在队尾》
队列的基本操作
QueueIn(Q,x);//入队
QueueOut(Q);//出队
push(x)//x入队,即将x插入到队尾
front(),back()//获得队首元素和队尾元素
pop()//令队首元素出队
empty()//检测队列queue是否为空,返回true为空,返回false为非空
size()//元素个数
注意:使用front()函数和back()函数前,必须用empty()判断队列是否为空,否则会因为队空而出现错误
以上都是队列最基本的知识,下面和我一起来做一下经典的题吧
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,n,k,t1,t2,i;
cin>>m>>n>>k;
queue<int >man;
for(i=1;i<=m;i++)
man.push(i);
queue<int >woman;
for(i=1;i<=n;i++)
woman.push(i);
for(i=1;i<=k;i++)
{
t1=man.front();
man.pop();
cout<<t1<<" ";
man.push(t1);
t2=woman.front();
woman.pop();
cout<<t2<<endl;
woman.push(t2);
}
return 0;
}
经典队列题,必会
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,i,k,num=0;
cin>>n>>m;
queue<int >q;
for(i=1;i<=n;i++)
q.push(i);
while(q.size()>1)
{
k=q.front();
num++;
if(num==m)
{
q.pop();
num=0;
}
else
{
q.pop();
q.push(k);
}
}
cout<<q.front()<<endl;
return 0;
}
map容器内元素的访问
1.下标访问
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<char,int>mp;
mp['c']=20;
mp['c']=30;
printf("%d\n",mp['c']);
return 0;
}
2.通过迭代器访问
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<char,int>mp;
map<char,int>::iterator it;
mp['d']=20;
mp['c']=30;
mp['a']=20;
for(it=mp.begin();it!=mp.end();it++)
printf("%c %d\n",it->first,it->second);
return 0;
}
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string ch,ans1,t;
int i,n,ans;
map<string,int>vis;
map<string,int>::iterator it;
while(cin>>n&&n!=0){
ans=-999;
vis.clear();
for(i=1;i<=n;i++)
{
ans=-9999;
cin>>ch;
vis[ch]++;
}
for(it=vis.begin();it!=vis.end();it++)
{
t=(*it).first;
if(ans<vis[t])
{
ans=vis[t];
ans1=t;
}
}
cout<<ans1<<endl;
}
return 0;
}
pair的用法,可以通过pair给map赋值
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
map<string,int>mp;
map<string,int>::iterator it;
pair<string,int>p;
string sa;
int x,i;
for(i=1;i<=5;i++)
{
cin>>sa;
cin>>x;
p=make_pair(sa,x);
mp.insert(p);
}
for(it=mp.begin();it!=mp.end();it++)
cout<<it->first<<" "<<it->second<<"\n";
return 0;
}