STL之栈stack,队列queue以及优先队列

STL提供了3种特殊的数据结构:栈,队列与优先队列。

1.STL的栈

  • 所谓栈就是符合“后进先出”规则的数据结构,(就像把东西放在一个没有盖子的桶子里面,要想取出底面的元素,必须先将上面的东西取出来,才能操作)
  • STL中栈定义在头文件< stack>中
  • 栈的声明:stack< int >s
  • 栈的基本操作:push()和pop()实现元素的入栈和出栈操作,top()取栈顶元素(但不删除)

示例代码:

//实现功能:输入5个数存在栈中,并将其输出 
#include<iostream>
#include<stack>
using namespace std;
int main()
{
    int i,t;
    stack<int> s;
    for(i=0;i<5;i++)
    {
        cin>>t;
        s.push(t);
    }
    for(i=0;i<5;i++)
    {
        cout<<s.top()<<" ";
        s.pop();
    }   
    return 0;
} 

结果截图:
这里写图片描述

2.STL的队列

  • 队列是一种“先进先出”的数据结构。
  • 头文件:< queue>,声明:queue< int > s;
  • 基本操作:push()和pop()进行元素的入队和出队操作,front()取队首元素(但不删除)。

示例代码:

//实现功能:输入5个数存在队列中,并将其输出 
#include<iostream>
#include<queue>
using namespace std;
int main()
{
    int i,t;
    queue<int> s;
    for(i=0;i<5;i++)
    {
        cin>>t;
        s.push(t);
    }
    for(i=0;i<5;i++)
    {
        cout<<s.front()<<" ";
        s.pop();
    }   
    return 0;
} 

结果截图:
这里写图片描述

3.优先队列

  • 一种行为像队列的抽象数据类型
  • 遵循优先级优先原则,即:先出队列的是队列中优先级最高的元素 ,3对于自定义类型,也可以组成优先队列,但是必须为每一个元素自定义一个优先级,类似于sort。
  • 头文件:< queue >
  • 常见的2种声明:(1.)越小的整数优先级越低的优先队列:priority_queue< int> s;(2.)越小的数优先级越大的优先队列: priority_queue< int,vector< int>,greater< int> >,注意:最后2个“>”号不要写在一起,否则有的编译器会误以为是“>>”会出错。
  • 基本操作: push()和pop()进行元素的入队和出队,top()取队首元素但是不删除
  • q.empty() 如果队列为空,则返回true,否则返回false

示例代码:

//实现功能:输入5个数存在优先队列中,并将其输出 
#include<iostream>
#include<queue>
using namespace std;
int main()
{
    int i,t;
    priority_queue<int>s;
    for(i=0;i<5;i++)
    {
        cin>>t;
        s.push(t);
    }
    while(!s.empty())
    {
        cout<<s.top()<<" ";
        s.pop();
    }   
    return 0;
} 

结果截图:
这里写图片描述

优先队列与结构体的使用

在某一个结构体中,例如:

struct node
{
    int x,y;
}arr[5]; 

若是要按照x的值来排序,需要在结构体中重载运算符,可以在结构体中重载,也可以在结构体外重载。

结构体内部重载:

struct node
{
    int x,y;
    bool operator< (const node& t)const
    {
        return x>t.x;
        //使得优先队列中小值位于列首
    }
}arr[5]; 

结构体外重载:

bool operator<(const node& a,const node& b)
{
    return a.x>b.x;
}

完整代码:

//实现功能:结构体中优先队列,
#include<iostream>
#include<queue>
using namespace std;
struct node
{
    int x,y;
    bool operator< (const node& t)const
    {
        return x>t.x;
        //使得优先队列中小值位于列首
    }
}arr[5]; 
int main()
{
    int i,t;
    priority_queue<node> q;
    for(i=0;i<5;i++)
    {
        cin>>arr[i].x>>arr[i].y;
        q.push(arr[i]);
    }
    for(i=0;i<5;i++)
    {
        node temp=q.top();
        cout<<temp.x<<" "<<temp.y<<endl;
        q.pop();
    }   
    return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值