队列和优先队列

  队列是基本的数据结构之一,特点是”先进先出“。如排队,先进队列的先得到服务。

#include<queue>
using namespace std;

1.定义

queue<int>v;
queue<int>e(v);
queue<char>c;
······
priority_queue<int> q;

在这里插入图片描述

2.queue的相关操作

queue容器适配器支持的成员函数

成员函数功能
empty()如果 queue 中没有元素的话,返回 true。
size()返回 queue 中元素的个数。
front()返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义
back()返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。
push(const T& obj)在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。
emplace()在 queue 的尾部直接添加一个元素。
push(T&& obj)以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。
pop()删除 queue 中的第一个元素。
swap(queue &other_queue)将两个 queue 容器适配器中的元素进行互换,需要注意的是,进行互换的 2 个 queue 容器适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。
int x = 2;		//
queue<int>q;	//
q.push(x);		//将x插入队列q
q.front();		//返回队列的第一个元素
q.pop();		//删除队列的第一个元素
q.back();		//返回队列的最后一个元素
q.size();		//返回队列的元素的个数
q.empty();		//返回队列是否为空

3. 优先队列的排序

priority_queue <int,vector<int>,less<int> > p;		//从大到小
priority_queue <int,vector<int>,greater<int> > q;	//从小到大

struct node{
	int x,y;							//结构体内重载排序函数
	bool operator < (const node & a) const{return x<a.x;}
};
priority_queue <node> q;

4. queue的实例应用

hdu 1702 ACboy needs your help again!

Problem Description
ACboy was kidnapped!!
he miss his mother very much and is very scare now.You can’t image how dark the room he was put into is, so poor 😦.
As a smart ACMer, you want to get ACboy out of the monster’s labyrinth.But when you arrive at the gate of the maze, the monste say :" I have heard that you are very clever, but if can’t solve my problems, you will die with ACboy."
The problems of the monster is shown on the wall:
Each problem’s first line is a integer N(the number of commands), and a word “FIFO” or “FILO”.(you are very happy because you know “FIFO” stands for “First In First Out”, and “FILO” means “First In Last Out”).
and the following N lines, each line is “IN M” or “OUT”, (M represent a integer).
and the answer of a problem is a passowrd of a door, so if you want to rescue ACboy, answer the problem carefully!

Input
The input contains multiple test cases.
The first line has one integer,represent the number oftest cases.
And the input of each subproblem are described above.

Output
For each command “OUT”, you should output a integer depend on the word is “FIFO” or “FILO”, or a word “None” if you don’t have any integer.

Sample Input

4
4 FIFO
IN 1
IN 2
OUT
OUT
4 FILO
IN 1
IN 2
OUT
OUT
5 FIFO
IN 1
IN 2
OUT
OUT
OUT
5 FILO
IN 1
IN 2
OUT
IN 3
OUT

Sample Output

1
2
2
1
1
2
None
2
3

题意: 就是关于stack 和 queue的相关操作。

#include<bits/stdc++.h>
using namespace std;

int main(){
    int t, n, temp;
    cin >> t;
    while(t--){
        string str, str1;
        queue<int> Q;
        stack<int> S;
        cin >> n >> str;
        for (int i = 0; i < n; i++){
            if(str=="FIFO"){
                cin >> str1;
                if(str1 == "IN"){
                    cin >> temp;
                    Q.push(temp);
                }
                if(str1=="OUT"){
                    if(Q.empty())
                        cout << "None" << endl;
                    else{
                        printf("%d\n", Q.front());
                        Q.pop();
                    }
                }
            }
            else{
                cin >> str1;
                if(str1=="IN"){
                    cin >> temp;
                    S.push(temp);
                }
                if(str1=="OUT"){
                    if(S.empty())
                        cout << "None" << endl;
                    else{
                        printf("%d\n", S.top());
                        S.pop();
                    }
                }
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值