【ACM初步训练】【STL】栈+队列+优先队列

版权声明:转载请注明出处~~~ https://blog.csdn.net/lesileqin/article/details/88926411

(先进后出)

1)头文件

#include<stack>

2)定义方式

stack<数据类型> s;

数据类型可以是int、char、float、double、结构体等等。

3)常用基本操作

s.empty();        //栈是否为空
s.top();          //取出栈顶元素
s.push(X);        //压入新的元素
s.pop();          //删除栈顶元素
s.size();         //返回栈中元素数目

队列(先进先出)

1)头文件

#include<queue>

2)定义方式

queue<数据类型> q;

3)常用基本操作

q.back();         //返回最后一个元素
q.empty();        //判断队列是否为空
q.front();        //返回队头元素
q.pop();          //删除队头
q.push(X);        //新元素入队
q.size();         //返回队列元素个数

优先队列(priority_queue)

在优先队列中,数据元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。

1)头文件

#include<queue>

2)声明方式(掌握普通方法即可)

a.普通方法

priority_queue<int> q;        //按照元素从大到小出队
priority_queue<int,vector<int>,greater<int> > q;    //按照元素从小到大出队
                               //特别注意:☝ 这个位置要有一个空格

b.自定义优先级

struct cmp
{
    bool operator() (int x,int y)
    {
        return x>y;       //x小的优先级最高
    }
};

priority_queue<int,vector<int>,cmp> q;
//其中,第二个参数为容器类型。第三个为比较函数

c.结构体声明方式

struct node{
    int x,y;        //y为值,x为优先级
    friend bool operator < (node a,node b)
    {
        return a.x > b.x;    //x小的优先级高
    }
};
priority_queue<node> q;    

3)常用基本操作与queue一模一样


栈和队列的应用与详解请访问:

https://blog.csdn.net/lesileqin/article/details/85058354


练习题:(单击即可访问)

NYOJ 2 括号匹配问题

NYOJ 1140 鸡蛋栈

POJ 1363 Rails

POJ 2559 Largest Rectangle in a Histogram(选做

POJ 2259 Team Queue(选做)

NYOJ 1117 鸡蛋队列


猜你喜欢

转载自blog.csdn.net/lesileqin/article/details/88926411
今日推荐