0

0

提取优先队列的最后一个元素而不进行遍历

WBOY

WBOY

发布时间:2023-09-10 17:25:02

|

1159人浏览过

|

来源于tutorialspoint

转载

提取优先队列的最后一个元素而不进行遍历

简介

C++中的优先队列与数据结构中的普通队列不同,它有一个区别:所有元素都有优先级。我们可以通过在队列中遍历来提取其元素。

但是,在本教程中,我们正在尝试一种无需遍历即可提取优先级队列最后一个元素的方法。让我们开始吧……

什么是优先队列?

在数据结构中,抽象数据类型是优先级队列。它是一个队列,其中所有元素都有一些关联的优先级。它的所有元素都根据其优先级被删除。优先级较高的数据首先被提取,优先级较低的数据被首先提取。队列数据/元素可以是整数或字符串,但不能为 NULL 值。

如果两个元素的优先级相同,则优先级队列将按照 FIFO(先进先出)原则进行提取。

有两种类型的优先队列可以提取其元素 -

  • 升序优先队列 − 在这种类型的优先队列中,元素按升序提取。优先级最低的元素将首先被移除。

  • 降序优先队列 − 在这种类型的优先队列中,元素按升序被提取。具有最大优先级的元素将首先被移除。

语法

 priority_queue queue_name

不遍历提取优先级队列的最后一个元素

在这里,我们提取优先级队列的最后一个元素,而不遍历整个队列。我们通过二叉树来实现优先级队列。在此过程中使用以下内置方法 -

  • size() - 它返回优先级队列的大小。

    语法 queue_name .size()

  • insert() - 将元素插入优先级队列。

    语法−queue_name.insert(data_type)

  • getMin() -它返回优先级队列的最小元素。

    语法−queue_name.getMin()

    Magic Eraser
    Magic Eraser

    AI移除图片中不想要的物体

    下载
  • getMax() −它返回优先队列中最大的元素。

    Syntax − queue_name.getMax()

  • 的中文翻译为:

    Syntax − queue_name.getMax()

  • isEmpty() −如果队列为空,则返回true。

  • deleteMin() −删除最小的队列元素。

    语法−queue_name.deleteMin()

  • deleteMax() - 删除最大的队列元素

    语法−queue_name.deleteMax()

算法

第 1 步 − 为队列操作创建一个结构类。

第 2 步 − 创建一个多重集以对元素进行自动排序。

第 3 步 − 将元素插入优先级队列。

第 4 步 − 通过使用 getMin() 和 getMax 等内置函数,无需遍历即可获取最小和最大元素()。

示例

从队列中提取最后一个元素的C++代码

#include 
using namespace std;
  
// declaring a struct class for the Priority Queue
struct PQ  {
   multiset s;
   
   //Getting the size of the Queue
   int size() { 
      return s.size(); 
   }
   
   //Checking Queue is empty or not
   bool isEmpty() { 
      return (s.size() == 0); 
   }
   
   void insert(int i) { 
      s.insert(i); 
   }
  
   //Method to get the smallest element of the Queue
   int getMin() { 
      return *(s.begin()); 
   }
   
   // Method to get the largest Queue element
   int getMax() { 
      return *(s.rbegin()); 
   }
   
   // Deleting Queue elements
   void deleteMin() {
      if (s.size() == 0)
         return;
      
      auto i = s.begin();
      s.erase(i);
   }
      
   // Method to delete the largest element
   void deleteMax() {
      if (s.size() == 0)
      return;
      
      auto i = s.end();
      i--;
      s.erase(i);
   }
};
  
//Main code
int main() {
   PQ p;   //initializing the Priority Queue
   
//inserting Queue elements
   p.insert(20);      
   p.insert(30);
   p.insert(50);
   p.insert(60);
   p.insert(90);
   
   cout << "Smallest Element is: " << p.getMin() << endl;
   cout << "Largest Element is: " << p.getMax() << endl;
   
   p.deleteMin();
   cout << "Smallest Element is: " << p.getMin() << endl;
   
   p.deleteMax();
   cout << "Largest Element is: " << p.getMax() << endl;
   
   cout << "Size of the Queue is: " << p.size() << endl;
   
   cout << "Queue is empty?: "
   << (p.isEmpty() ? "YES" : "NO") << endl;
   
   return 0;
}

输出

Smallest Element is: 20
Largest Element is: 90
Smallest Element is: 30
Largest Element is: 50
Queue is Empty?: NO

结论

优先队列可以通过数组、堆数据结构、链表和二叉树来实现。它有助于暴露隐藏的路径和各种算法。

本教程到此结束,希望您觉得它有意义。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

216

2025.10.31

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

229

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

433

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

205

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1435

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

609

2023.11.24

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
DOM探索之基础详解篇
DOM探索之基础详解篇

共20课时 | 3.4万人学习

Bootstrap常用样式组件与实战
Bootstrap常用样式组件与实战

共28课时 | 3.2万人学习

ThinkPHP开发大型商城项目实战视频
ThinkPHP开发大型商城项目实战视频

共54课时 | 21.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号