优先队列 用实验说明问题

优先队列详解

写了一堆代码

#include<cstdio>
#include<queue>
#include<vector>
#include<cstdlib>
#include<algorithm>
using namespace std;
//定义结构,使用运算符重载,自定义优先级1
struct cmp1{
    bool operator ()(int &a,int &b){
        return a>b;//最小值优先
    }
};
struct cmp2{
    bool operator ()(int &a,int &b){
        return a<b;//最大值优先
    }
};
//定义结构,使用运算符重载,自定义优先级2
struct number1{
    int x;
    bool operator < (const number1 &a) const {
        return x>a.x;//最小值优先
    }
};
struct number2{
    int x;
    bool operator < (const number2 &a) const {
        return x<a.x;//最大值优先
    }
};
int a[]={13,9,55,8,80,25,39,98,5,49,78,0};
number1 num1[]={13,9,55,8,80,25,39,98,5,49,78,0};
number2 num2[]={13,9,55,8,80,25,39,98,5,49,78,0};

int main()
{   priority_queue<int>que;//采用默认优先级构造队列  

    priority_queue<int,vector<int>,cmp1>que1;//最小值优先
    priority_queue<int,vector<int>,cmp2>que2;//最大值优先  

    priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
                                                      //这是右移运算符,所以这里用空格号隔开
    priority_queue<int,vector<int>,less<int> >que4;////最大值优先  

    priority_queue<number1>que5;
    priority_queue<number2>que6;  

    int i;
    for(i=0;a[i];i++){
        que.push(a[i]);
        que1.push(a[i]);
        que2.push(a[i]);
        que3.push(a[i]);
        que4.push(a[i]);
    }
    for(i=0;num1[i].x;i++)
        que5.push(num1[i]);
    for(i=0;num2[i].x;i++)
        que6.push(num2[i]); 

    printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("采用默认优先关系:\npriority_queue<int>que\n==》:\n");
    printf("Queue 0:\n");
    while(!que.empty()){
        printf("%3d",que.top());
        que.pop();
    }
    puts("");
    puts("");  

    printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("采用结构体自定义优先级方式一:\npriority_queue<int,vector<int>,cmp>que\n==》:\n");
    printf("Queue 1:\n");
    while(!que1.empty()){
        printf("%3d",que1.top());
        que1.pop();
    }
    puts(""); 

    printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("Queue 2:\n");
    while(!que2.empty()){
        printf("%3d",que2.top());
        que2.pop();
    }
    puts("");
    puts("");  

    printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("内定义优先级:\npriority_queue<int,vector<int>,greater<int>/less<int> >que\n==》:\n");
	printf("Queue 3:\n");
    while(!que3.empty()){
        printf("%3d",que3.top());
        que3.pop();
    }
    puts(""); 

	printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n"); 

    printf("Queue 4:\n");
    while(!que4.empty()){
        printf("%3d",que4.top());
        que4.pop();
    }
    puts("");
    puts(""); 

	printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("采用结构体自定义优先级方式二:\npriority_queue<number>que\n==》:\n");
    printf("Queue 5:\n");
    while(!que5.empty()){
        printf("%3d",que5.top());
        que5.pop();
    }
    puts("");  

    printf("原来的序列:\n");
    for(i=0;a[i];i++)
    printf("%d ",a[i]);
    printf("\n");

    printf("Queue 6:\n");
    while(!que6.empty()){
        printf("%3d",que6.top());
        que6.pop();
    }
    puts("");
    return 0;
}  

结果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-21 07:34:53

优先队列 用实验说明问题的相关文章

操作系统ucore lab6实验报告

操作系统lab6实验报告 实验五完成了用户进程的管理,可在用户态运行多个进程.可是目前的进程调度策略是FIFO策略,而本实验则会实现Stride Scheduling调度算法. 练习0:填写已有实验 同样使用一款名为meld的软件进行对比即可,大致截图如下: 现在将需要修改的文件罗列如下: proc.c default_pmm.c pmm.c swap_fifo.c vmm.c trap.c 然后是一些需要简单修改的部分,根据注释的提示,主要是一下两个函数需要额外加以修改. alloc_proc

SDUT 3345 数据结构实验之二叉树六:哈夫曼编码

数据结构实验之二叉树六:哈夫曼编码 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码.该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码.哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%-90%之间.你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼

优先队列式分支限界法-最小重量机器设计问题

问题描述: 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得.设是从供应商j处购得的部件i的重量,是相应的价格.试设计一个优先队列式分支限界法,给出总价格不超过d的最小重量机器设计. [之所以想记录这个问题,是因为我觉得自己"用各个部件的最小重量作为未来最理想重量"的这个设计还挺特别.其他都是实验报告中的内容] 算法描述: 算法实现: #include<stdio.h> #include<stdlib.h> struct NodeType {

算法分析与设计——分治法实验报告

   算法导论  课程设计 成 绩 题    目:  算法导论课程设计实验报告 学院班级:        1613013         学    号:      16130130216       姓    名:        库 妍           主讲教师:        张立勇          日    期:       2019.6.3         录 分治法 一.Implement exercise 2.3-7................................

如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇

前面介绍了GNS3的概念,安装,配置和使用,本篇将介绍怎么利用GNS3配置IOU从而实现使用GNS3和Cisco IOU搭建路由交换实验. 由于本篇篇幅较长,所以先过一下大纲: 1. IOU模拟环境介绍 2. IOU软件环境的准备 3. VMware虚拟机的安装.导入和配置 4. IOU镜像的上传 5. GNS3的配置 6. IOU模拟环境的实现 IOU模拟环境介绍 IOU即IOS running in Unix,最初是由思科内部人员开发来测试IOS的平台,后来流传到互联网经网友改进有了后来的W

广外第二周的实验报告来这里分享一下

虽然有很多还不知道怎么改,可能也有很多测试不到的地方,但是通过这个星期我好歹了解了好多东西啊 实验报告 通过本次学习,能了解到VC6.0.是用于将已生成的C++语言源程序代码转换为计算机能读懂的目标代码,计算机用的均是二进制代码.编辑完成后它首先生成扩展名为obj的文件(程序编译后的二进制文件),若想进行之后的链接.运行过程,必须不断修改源程序文件至完全正确. 在文件→新建→源代码这里可以新建源代码:新建→打开项目或文件中可以打开以前写过的源代码或者程序:运行→编译中即把所打源文件转换为二进制代

webservice实验一

实验目的:安装jdk1.6_21以后的版本,利用JAX-WS API自己发布webservice并调用,以及用wsimport生成webservice客户端代码调用一个免费的web服务(如webxml.com.cn上的获取手机归属地的服务). 一.webservice原理了解 webservice是一种通用的跨语言跨平台的数据交互方式,之所以能够做到这一点,是因为它的底层实现机制是依赖于HTTP协议以及XML格式这些开发的标准.webservice使用SOAP(simple object acc

Cisco ISE + Windows Server 2008 实验

实验说明:此实验参考生产环境中某部分环境搭建而成,此环境Windows Server 2008用于登录用户.MAC等账号的认证,Cisco ISE用于认证授权等,无线部分利用VMWLC + Cisco 1702AP测试测试.因为为实验环境,整体网络架构所有节点为单点:Cisco ISE部分功能没有应用上,如测试PC端的补丁.防毒补丁.设备认证等(此部分在生产环境上实施),下图为此实验的网络架构图. Windows AD:  172.16.1.199 Cisco VMISE: 172.16.1.1

CentOS系统启动及内核大破坏模拟实验

讲过了centos的启动流程,此时是不是想来点破坏呢?那就尽情的玩耍吧,记得在实验之前拍个快照,万一哪个环节错误恢复不回来了呢,毕竟数据无价,话不多说,开始. 一.删除伪系统根.(ramdisk文件) (1)模拟误操作删除ramdisk文件. ①模拟误删除initramfs-3.10.0-514.el7.x86_64.img文件. ②为当前正在使用的内核重新制作ramdisk文件 格式为:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) (