STL之栈stack,队列queue以及优先队列
来源:互联网 发布:mac虚拟机和双系统 编辑:程序博客网 时间:2024/05/19 18:37
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
- STL之栈stack,队列queue以及优先队列
- STL 之 stack&queue&priority_queue 栈,队列与优先队列
- STL之stack,queue,优先队列
- STL之stack,queue,优先队列
- STL之queue队列 stack栈 priority_queue优先队列 deque双向队列
- Stack,Queue,PriorityQueue;栈,队列,优先队列
- STL之优先队列priority queue
- stack && queue && priority_queue 使用方法 (栈, 队列, 优先队列)
- STL-优先队列(priority queue)
- 【双端队列】【栈】【队列】STL之deque、stack、queue、容器适配器
- C++ STL入门教程(4)——stack(栈),queue(队列),priority_queue(优先队列)的使用(附完整程序代码)
- C++ STL之栈&队列&优先队列
- stack 栈 queue 队列
- STL之优先队列
- STL之优先队列
- STL之优先队列
- stl 之 优先队列
- STL之优先队列
- 携程容器云优化实践
- 区间之和
- 指针型函数与指向函数的指针
- 区块链资产投资指南及技巧
- 山鬼的数据结构坑(栈)
- STL之栈stack,队列queue以及优先队列
- 求1+3+5+......+101的和
- hdu-2844-Coins (多重背包+二进制优化)
- 向程序猿致敬
- 第十一周作业 1
- stm32——RTC实时时钟
- 汇编语言学习笔记(二)
- PAT
- VS2015-QT安装配置问题