优先队列的pop与push

前言

个人小记


一、代码

#include<stdio.h>
#include <stdlib.h>
#define MAX_LEN 10
#define father(n) ((n)/2)
#define left(n)   (2*(n))
#define right(n)  (2*(n)+1)
typedef struct Prequeue
{int * __data,*data;int size,count;
}Prequeue;Prequeue* init_PreQueue(int size)
{Prequeue* PQ=(Prequeue*)malloc(sizeof(Prequeue));PQ->size=size;PQ->count=0;PQ->__data=(int *)malloc(sizeof(int)*size);PQ->data=PQ->__data-1;return PQ;
}int isempty(Prequeue* PQ)
{return PQ->count==0;
}int isfull(Prequeue*PQ)
{return PQ->size==PQ->count;
}int search(Prequeue* PQ)
{return PQ->data[1];
}void swap(int *a,int *b)
{int t=*a;*a=*b;*b=t;return ;
}void up_update(Prequeue* PQ,int pos)
{while(pos>1&&PQ->data[pos]>PQ->data[father(pos)]){    swap(&(PQ->data[pos]),&PQ->data[father(pos)]);pos=father(pos);}return ;
}void push(Prequeue* PQ,int val)
{if(isfull(PQ)){printf("队列已满无法push\n");return ;}PQ->count+=1;PQ->data[PQ->count]=val;up_update(PQ,PQ->count);return ;
}void down_update(Prequeue* PQ,int pos,int n)
{while(left(pos)<=n){int max=pos;if(PQ->data[max]<PQ->data[left(pos)])max=left(pos);if(right(pos)<=n&&PQ->data[max]<PQ->data[right(pos)])max=right(pos);if(pos==max)return ;else{swap(&(PQ->data[max]),&(PQ->data[pos]));pos=max;}}return ;
}void pop(Prequeue* PQ)
{if(isempty(PQ)){printf("队列为空无法pop\n");return ;}PQ->data[1]=PQ->data[PQ->count];PQ->count-=1;down_update(PQ,1,PQ->count);return ;
}void clear(Prequeue* PQ)
{if(PQ==NULL)return ;free(PQ->data);free(PQ);return ;
}void output(Prequeue* PQ)
{printf("优先队列为:");for(int i=1;i<=PQ->count;i++){printf("%d ",PQ->data[i]);}printf("\n");return ;
}int main()
{Prequeue* PQ=init_PreQueue(MAX_LEN);int t,val;printf("请输入0(代表pop)或者1(代表push):");while(scanf("%d",&t)!=EOF){if(t==1){printf("请输入push的数值:");scanf("%d",&val);push(PQ,val);output(PQ);}if(t==0){printf("pop:%d\n",search(PQ));pop(PQ);output(PQ);} printf("请输入0(代表pop)或者1(代表push):");}clear(PQ);return 0;
}

二、测试结果

sjq@SEER:~/coding$ ./a.out 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:11
优先队列为:11 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:12
优先队列为:12 11 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:13
优先队列为:13 11 12 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:14
优先队列为:14 13 12 11 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:1
优先队列为:14 13 12 11 1 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:1
优先队列为:14 13 12 11 1 1 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:2
优先队列为:14 13 12 11 1 1 2 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:3
优先队列为:14 13 12 11 1 1 2 3 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:4
优先队列为:14 13 12 11 1 1 2 3 4 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:5
优先队列为:14 13 12 11 5 1 2 3 4 1 
请输入0(代表pop)或者1(代表push):1
请输入push的数值:6
队列已满无法push
优先队列为:14 13 12 11 5 1 2 3 4 1 
请输入0(代表pop)或者1(代表push):0
pop:14
优先队列为:13 11 12 4 5 1 2 3 1 
请输入0(代表pop)或者1(代表push):0
pop:13
优先队列为:12 11 2 4 5 1 1 3 
请输入0(代表pop)或者1(代表push):0
pop:12
优先队列为:11 5 2 4 3 1 1 
请输入0(代表pop)或者1(代表push):0
pop:11
优先队列为:5 4 2 1 3 1 
请输入0(代表pop)或者1(代表push):0
pop:5
优先队列为:4 3 2 1 1 
请输入0(代表pop)或者1(代表push):0
pop:4
优先队列为:3 1 2 1 
请输入0(代表pop)或者1(代表push):0
pop:3
优先队列为:2 1 1 
请输入0(代表pop)或者1(代表push):0
pop:2
优先队列为:1 1 
请输入0(代表pop)或者1(代表push):0
pop:1
优先队列为:1 
请输入0(代表pop)或者1(代表push):0
pop:1
优先队列为:
请输入0(代表pop)或者1(代表push):0
pop:1
队列为空无法pop
优先队列为:
请输入0(代表pop)或者1(代表push):^C
sjq@SEER:~/coding$ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jlink卡死 JFlash keil 盗版JLINK

现象&#xff1a;用Keil打开Jlink配置页&#xff0c;会卡死。 解决方法&#xff1a;用旧版本的Jlink软件&#xff0c;因为淘宝买的很多JLINK下载器是盗版的&#xff0c;不支持新版本的JLINK软件。到https://www.segger.com/downloads/jlink下载旧版本的软件。 如果必须要用新版…

SQLI-labs-第二十五关和第二十五a关

目录 第二十五关 1、判断注入点 2、判断数据库 3、判断表名 4、判断字段名 5、获取数据库的数据 第二十五a关 1、判断注入点 2、判断数据库 第二十五关 知识点&#xff1a;绕过and、or过滤 思路&#xff1a; 通过分析源码和页面&#xff0c;我们可以知道对and和or 进…

基于Kubeeasy安装Kubernetes-v1.22.1版本(安装报错已解决)

基础环境准备 将提供的安装包 chinaskills_cloud_paas_v2.0.2.iso 上传至 master 节点 /root 目录&#xff0c;并解压 到 /opt 目录&#xff1a; [rootlocalhost ~]# ll total 7446736 -rw-------. 1 root root 1579 Mar 7 22:46 anaconda-ks.cfg -rw-r--r--. 1 root …

链表经典题目—相交链表和链表倒数第k个节点

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

艾体宝干货 | 教程:使用ntopng和nProbe监控网络流量

本教程旨在分享如何通过 ntopng 和 nProbe 这两款工具&#xff0c;深入了解和掌握网络流量监控的艺术。我们将提供从基本概念到高级应用的全面指导&#xff0c;涵盖了在多种平台和设备上的部署和配置步骤。不论您是专业人员还是技术爱好者&#xff0c;跟随本教程&#xff0c;都…

11thingsboard物联网网关接入ThingsBoard物联网平台的操作说明

本文包含关于如何配置ThingsBoard 平台和连接钡铼技术R40设备的说明。ThingsBoard平台是一个用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准MQTT协议实现设备连接。ThingsBoard结合了可扩展性、容错性和性能&#xff0c;因此您永远不会丢失数据。 4G L…

【考研数学】线代除了「李永乐」,还能跟谁?

考研线代&#xff0c;除了利用了老师&#xff0c;我觉得还有一个宝藏老师的课程值得听&#xff01; 那就是喻老&#xff0c;这个是我在b站上面新发现的老师&#xff0c;听完他的课程发现真的喜欢 他不仅在B站上开设了课程&#xff0c;还编写了配套的线性代数辅导讲义&#xff…

Python图形界面(GUI)Tkinter笔记(十一):用【Entry()】实现单行文本输入(2)

Tkinter库中的单行文本输入框(Entry)与Pyhton中最常的get()方法有机结合在一起能实现各种各样的功能。get()不只是与Entry()方法配合使用,还可以与其它方法配合使用,例如还可以与前面的Button()方法使用等等。总之,不同的工具不同的组合产生的反应是充满各种梦幻与想象,妙趣…

NIO的ByteBuffer和Netty的ByteBuf的性能

在讨论Java NIO的ByteBuffer与Netty的ByteBuf的性能时&#xff0c;需要考虑几个主要的因素&#xff0c;因为性能表现并不是绝对的&#xff0c;而是依赖于具体的使用场景。Netty的ByteBuf设计更加现代&#xff0c;针对网络编程的需求进行了优化&#xff0c;包含了许多ByteBuffer…

网络安全面临的最大的威胁是什么

网络安全面临的威胁概述 网络安全威胁是指可能对网络系统造成损害、干扰或未经授权访问的各种风险和威胁。随着数字化进程的加快&#xff0c;网络安全问题愈发凸显&#xff0c;企业和个人都面临着来自多方面的威胁。这些威胁包括但不限于恶意软件、网络钓鱼、零日漏洞、拒绝服务…

Python中的SSH、SFTP和FTP操作详解

大家好&#xff0c;在网络编程中&#xff0c;安全地连接到远程服务器并执行操作是一项常见任务。Python 提供了多种库来实现这一目标&#xff0c;其中 Paramiko 是一个功能强大的工具&#xff0c;可以轻松地在 Python 中执行 SSH、SFTP 和 FTP 操作。本文将介绍如何使用 Parami…

企业选择定制化MES管理系统时需要考虑的核心功能

在当今制造业的数字化转型浪潮中&#xff0c;企业对于实现生产现场透明管理的需求愈发迫切。为了满足这一需求&#xff0c;MES管理系统成为了众多企业的首选解决方案。MES管理系统以其高度的灵活性和可定制性&#xff0c;能够根据不同行业的特性&#xff0c;为企业提供量身定制…

php质量工具系列之paslm

Psalm是一个静态分析工具&#xff0c;深入程序&#xff0c;尽可能多地找到与类型相关的bug 混合类型警告 Intelligent logic checks 属性初始化检查 Taint analysis Language Server Automatic fixes Automatic refactoring 安装 composer global require --dev vimeo/psalm …

看潮成长日程表用户手册(上)

看潮成长日程表用户手册&#xff08;上&#xff09; 一、特色功能1、以每周日程表为主要形式2、全时管控的时间管理3、持续的日程管理4、分期间时间表5、按日排程&#xff0c;按周输出6、夏季作息时间处理7、年度假日处理8、休息日处理9、弹性日程10、完成记录11、多种输出形式…

重构与优化-前言

关注公众号畅读:IT技术馆 Java代码重构是优化现有代码结构、提升代码可读性、可维护性和性能的过程,而不会改变其外在行为。这包括命名规范、消除重复代码、改进设计模式的使用、优化数据结构和算法等。下面是一些常见的Java代码重构技巧及示例: 1. 重命名(Rename) 目的…

光纤跳线组成结构划分你知道吗

按照组成结构划分 光纤跳线根据组成结构的不同可分为带状光纤跳线和束状光纤跳线。带状光纤跳线使用的是由光纤带组成的带状光缆&#xff0c;大多呈扁平形状&#xff0c;因具有较高的光纤密度&#xff0c;它可以容纳更多的纤芯&#xff0c;因此大大节省布线成本和空间&#xf…

猫咪掉毛严重怎么办?小米、希喂、霍尼韦尔宠物空气净化器测评

吸猫成瘾&#xff0c;养猫“致贫”&#xff1f;在当今社会&#xff0c;养猫已成为众多年轻人的一个追捧的事情。乖巧又可爱&#xff0c;下班回到家撸一把猫已经成为年轻人的日常。但是猫咪可爱也不影响它的各种养猫伴生的问题&#xff01;无论是漂浮的浮毛、飘散的皮屑还是偶发…

C++11 新特性

原文 https://www.cnblogs.com/linuxAndMcu/p/11600553.html 1. nullptr (1) 作用&#xff1a;nullptr 的类型为 nullptr_t&#xff0c;能够隐式地转换为任何指针的类型&#xff0c;能和他们进行相等或者不等的比较。 简单说&#xff0c;nullptr目的是为了区分 空指针NULL …

2024年上半年系统架构设计师真题-复原程度90%

前言 此次考试监考特别严格&#xff0c;草稿纸不允许带出考场&#xff0c;并且准考证上不允许任何写画&#xff0c;甚至连笔都允许带一支&#xff0c;所以下面的相关题目都是参考一些群友的提供&#xff0c;加上自己的记忆回顾&#xff0c;得到的结果。 其中综合知识部分的题…

1.int 与 Integer 的简单区别

蓝桥杯刷题从此开始&#xff1a; 第一题就是两个数的和&#xff0c;个人看来主要考察 int与integer 的区别&#xff1b; 这是我提交的答案&#xff0c;竟然会报错&#xff1a; import java.util.*; //输入A、B&#xff0c;输出AB。 class add {public static void main(String …