栈,队列与优先队列

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

1.栈:符合“后进后出”,有push和pop两种操作

其中push把元素压入栈顶,而pop从栈顶把元素“弹出”。头文件<stack>

声明栈:stack<int>s;

2.优先队列:是一种抽象数据类型,行为有些像队列,但先进队列的元素不是先进队列的元素,而是队列中优先级最高的元素,这样就可以允许类似于“急诊病人插队”这样的事件发生。

头文件:#include<queue>

声明优先队列:priority_queue<int>pq;

出队列的方式:由于出队元素并不是最先进队的元素,出队的方法由queue的front()变成了top().

在一些特殊情况下,需要使用自定义方式定义比较优先级。

只要元素定义了“小于”运算符,就可以使用优先队列。

对于一些常见的优先队列,STL提供了

例如:要实现一个“个位数大的整数优先级反而小”的优先队列。

可以定义一个结构体cmp,重载“()”运算符,使其“看上去”想一个函数(在c++中,重载了“()”运算符的类或结构体叫做仿函数),然后用“priority_queue<int,vector<int>,cmp> pq”的方式定义

struct cmp{

bool operator() (const int a,const int b) const{

return a%10>b%10;

}

};

原文地址:https://www.cnblogs.com/Aiahtwo/p/10358104.html

时间: 2024-10-18 19:23:58

栈,队列与优先队列的相关文章

【C/C++学院】0802-链式栈/链表队列以及优先队列/封装链表库

链式栈 // stacklinknode.h #define datatype int struct stacknode { int num;//编号 datatype data;//数据 struct stacknode *pNext;//指针域 }; typedef struct stacknode StackNode;//简化 StackNode * init(StackNode * phead);//初始化 StackNode * push(StackNode * phead, int

STL栈、队列、优先队列—————基础知识

0基本特点:后进先出(LIFO) 注意: 不一定最先进栈的最后出栈,只要保证是栈顶元素出栈就行! 当栈中存在一个元素时,top=0,因此通常把空栈的判定条件定为top= - 1: STL 中栈的使用方法: 头文件:#include <stack> 基本操作: push(x) 将x加入栈中,即入栈操作 pop() 出栈操作(删除栈顶),只是出栈,没有返回值 top() 返回第一个元素(栈顶元素) size() 返回栈中的元素个数 empty() 当栈为空时,返回 true STL 中队列的使用(

STL 队列 、优先队列、栈 小结

学长说现在基本上可以开始学习STL中一些标准模板了,今天先总结一下 队列.栈.优先队列 1.队列(queue) 先进先出原则,头文件#include <queue>,定义结构queue<类型>名称;queue<int>q.queue<node>q等: 如: struct node { int x; }f; queue<node>q;//结构体类型队列 q.push(f) //将f压入队列的尾部 node t = q.pop()// 弹出队列的第一

STL队列、优先队列、栈

STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素个数 top() 返回优先队列对顶元素 在默认的优先队列中,优先级高的先出队.在默认的int型中先出队的为较大的数. 使用方法: 头文件: #include <queue> 声明方式: 1.普通方法: priority_queue<int>q;//通过操作,按照元素从大到小的顺序出队

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

ZOJ 2724 Windows 消息队列 (优先队列)

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2724 Message queue is the basic fundamental of windows system. For each process, the system maintains a message queue. If something happens to this process, such as mouse click, text cha

&lt;数据结构与算法分析 C++描述&gt; 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入

栈&队列的简单实现

栈的定义---Stack 栈只允许在栈的末端进行插入和删除的线性表.栈具有先进后出的特性. 栈可用顺序表实现也可用链表实现. 但: 由于栈只能在末端进行操作,应使用顺序表实现. 用顺序表实现,有如下优点: (1)方便管理 (2)效率高 (3)cpu高速缓冲存取利用率高 实现如下: 测试如下: 队列的定义---Queue 队列只允许在队尾插入,队头删除.具有先进先出的特性. 队列的实现可用顺序表也可用链表. 若采用顺序表,删除时需要移动元素.为了操作方便,采取链表实现. 实现如下: 测试如下: 栈

C语言栈队列实现二-十/二-八进制转换

C语言栈队列实现二-十/二-八进制转换 2015-04-05 Lover雪儿 1 //利用栈来求取二进制数的十进制与八进制的结果 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 20 //初始栈大小 7 #define STACK_INCREMENT 10 //扩充栈时每次增加的内存 8 9 typedef char ElemType;