使用链表的优先级队列

优先级队列是一种特殊类型的队列,其中每个元素都是与优先级相关联,并根据其优先级提供服务。如果元素有相同的优先级,那么根据它们在队列中的排列顺序。

元素本身的值可以用于分配优先级。例如:最高值的元素被视为最高的优先级元素。但是,在其他情况下,我们可以假设最小值的元素作为最高优先级元素。在其他情况下,我们可以根据我们的需要确定优先级。

在队列中,根据先进先出规则,而在优先级队列中,则根据优先级删除这些值。

#include <stdio.h>
#include <stdlib.h>
#define NULL ((void *)0)struct node
{int data;struct node *next;
};struct node *front, *rear;/* 初始化队列*/
void createqueue() { front = rear = NULL; }int empty()
{if (front == NULL)return 1;elsereturn 0;
}void insert(int x)
{struct node *pnode;pnode = (struct node *)malloc(sizeof(struct node));if (pnode == NULL){printf("Memory overflow. Unable to insert.\n");exit(1);}pnode->data = x;pnode->next = NULL; /*新增节点总是最后一个节点*/if (empty())front = rear = pnode;else{rear->next = pnode;rear = pnode;}
}int removes()
{int min;struct node *follow, *follow1, *p, *p1;if (empty()){printf("\nQueue Underflow. Unable to remove.");exit(1);}/* 在优先级队列中找到最小值的节点*/p = p1 = front;follow = follow1 = NULL;min = front->data;while (p != NULL){if (p->data < min){min = p->data;follow1 = follow;p1 = p;}follow = p;p = p->next;}/* 根据最小值删除节点 */if (p1 == front) /* 删除第一个节点.*/{front = front->next;if (front == NULL) /* 删除唯一的一个节点 */rear = NULL;}else if (p1 == rear) /* 删除最后一个节点 */{rear = follow1;rear->next = NULL;}else /* 删除其它节点*/follow1->next = p1->next;free(p1);return min; 
}void show()
{struct node *p;if (empty())printf("Queue empty. No data to display \n");else{printf("Queue from front to rear is as shown: \n");p = front;while (p != NULL){printf("%d ", p->data);p = p->next;}printf("\n");}
}void destroyqueue() { front = rear = NULL; }int main()
{int x, ch;createqueue();do{printf("\n******Menu******\n");printf("1:Insert \n");printf("2:Remove \n");printf("3:exit \n");printf("Enter your choice: ");scanf("%d", &ch);switch (ch){case 1:printf("Enter element to be inserted: ");scanf("%d", &x);insert(x);show();break;case 2:x = removes();printf("Element removed is: %d\n", x);show();break;case 3:break;}} while (ch != 3);destroyqueue();return 0;
}

运行结果:

插入元素

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 12
Queue from front to rear is as shown: 
12 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 10
Queue from front to rear is as shown: 
12 10 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 3
Queue from front to rear is as shown: 
12 10 3 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 90
Queue from front to rear is as shown: 
12 10 3 90 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 66
Queue from front to rear is as shown: 
12 10 3 90 66 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 88
Queue from front to rear is as shown: 
12 10 3 90 66 88 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1 
Enter element to be inserted: 89
Queue from front to rear is as shown: 
12 10 3 90 66 88 89 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 1
Enter element to be inserted: 18
Queue from front to rear is as shown: 
12 10 3 90 66 88 89 18 
 

 根据优先级删除,最小值具有高优先级被删除。

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 3
Queue from front to rear is as shown: 
12 10 90 66 88 89 18 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 10
Queue from front to rear is as shown: 
12 90 66 88 89 18 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 12
Queue from front to rear is as shown: 
90 66 88 89 18 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 18
Queue from front to rear is as shown: 
90 66 88 89 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 66
Queue from front to rear is as shown: 
90 88 89 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 88
Queue from front to rear is as shown: 
90 89 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 89
Queue from front to rear is as shown: 
90 

 

******Menu******
1:Insert 
2:Remove 
3:exit 
Enter your choice: 2
Element removed is: 90
Queue empty. No data to display

大家好!我是编码小哥,欢迎关注,持续分享更多实用的编程经验和开发技巧,共同进步。

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

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

相关文章

多线程锁.

公平锁与非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁,这里类似排队买票,先来的人先买后来的人在队尾排着,这是公平的Lock lock new Reentrantlock(true);/true表示公平锁,先来先得非公平锁指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请…

类和对象 (中)

文章目录 类的六个默认成员函数构造函数析构函数特性使用 总结构造函数和析构函数拷贝构造函数特性拷贝构造总结 赋值运算符的重载运算符重载赋值运算符重载总结拷贝构造函数和赋值运算符重载 关于operator<<重载日期类实现const 修饰的成员函数取地址重载以及const取地址…

css实现高度是宽度一半的效果

1、方法一&#xff1a;使用变量:root、var()、clac()实现&#xff1a; 1.1 效果如下&#xff1a; 2.2 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title>&l…

伸手党必备之Python正则表达式常用函数

今天介绍一下Python中常用的正则表达式处理函数。Python的正则表达式主要有两种方法完成模式匹配&#xff1a;『搜索』和『匹配』 re.match re.match 尝试从字符串的开始全部或者部分匹配某个模式&#xff0c;如&#xff1a;下面的例子匹配第一个单词。 import re text &…

springboot269反欺诈平台的建设

反欺诈平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装反欺诈平台软件来发挥其高效地信息处…

Vue-Vben-Admin:中大型项目后台解决方案及如何实现页面反向传值

Vue-Vben-Admin&#xff1a;中大型项目后台解决方案及如何实现页面反向传值 摘要&#xff1a; Vue-Vben-Admin是一个基于Vue3.0、Vite、Ant-Design-Vue和TypeScript的开源项目&#xff0c;旨在为开发中大型项目提供一站式的解决方案。它涵盖了组件封装、实用工具、钩子函数、动…

学习c语言:单链表的应用

一、单链表经典算法 1.1 单链表相关经典算法OJ题1&#xff1a;移除链表元素 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.…

linux 新增用户 adduser

这里写自定义目录标题 linux 新增用户 Reference: https://dontla.blog.csdn.net/article/details/128723451

WPF监控平台(科技大屏)[一]

跟着B站的视频敲了一个略微复杂的WPF界面,链接如下.在这里我详细的写一份博客进行设计总结. 系统介绍和配置及主窗口设计_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Wy421Y7QD?p1&vd_source4796b18a2e4c1ec8a310391a5644b6da 成果展示 实现过程 总体来说,我的…

蓝桥杯---附近最小(典型的滑动窗口类型问题)

题目链接&#xff1a;附近最小 import java.util.ArrayDeque; import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {static int n;static int[] a;static int k;public static void main(String[] args) {Scanner scannernew Scanner(…

vue - - - - 数据刷新试图不刷新?是不外层有个table?

<table> // ...<customCell :_dataSourcedataSource/>// ... </table>dataSource 更新时&#xff0c;自定义组件对应的是图没有更新 解决办法&#xff1a; 给table加一个变化的key <table key"randomKey"> // ...<customCell :_dataSou…

OpenHarmony开源项目—工程管理

DevEco Studio的基本使用&#xff0c;请参考DevEco Studio使用指南。本章主要介绍如何使用DevEco Studio进行多设备应用开发。 说明&#xff1a; 本章的内容基于DevEco Studio 3.1.1 Release版本进行介绍&#xff0c;如您使用DevEco Studio其它版本&#xff0c;可能存在文档与产…

微信小程序(五十八)分步表单多页面传值

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.分步表单传值 2.伪数据生成 源码&#xff1a; app.json {"pages": ["pages/index/index","pages/building/building","pages/room/room","pages/logs/logs"],&qu…

【项目经验】Redis Sentinel从工程中下线并对业务迁移-进行中

一、背景&#xff1a; 某天&#xff0c;接到DBA通知&#xff0c;Redis sentinel 只支持到3.2.X(这个命题有问题&#xff0c;往下翻&#xff0c;见彩蛋)&#xff0c;为节省运维成本&#xff0c;提升运维效率&#xff0c;决定将工程中使用的Redis sentinel下线&#xff0c;都使用…

关于类和对象超级初级小白知识

下面的内容只是一小部分&#xff0c;在整个面向对象的知识中并不完整&#xff0c;用于记忆和梳理 目录 前言&#xff1a;类和对象是什么&#xff1f; 一、定义类 1.如何定义类 2.类的注意事项 二.类的实例化 1.创建对象的基础知识 2.如何创建对象 3.实例化举例 4.访问对象…

【Python】python实现决策树算法和贝叶斯算法(附源代码)

使用一种你熟悉的程序设计语言&#xff0c;实现&#xff08;1&#xff09;贝叶斯算法和&#xff08;2&#xff09;决策树算法 目录 1、贝叶斯算法2、决策树算法3、两种算法比较 1、贝叶斯算法 import pandas as pd import numpy as np from sklearn.model_selection import t…

蓝桥集训之有序分数

蓝桥集训之有序分数 核心思想&#xff1a;Stern-Brocot Tree 遍历一个区间内的所有最简分数 – – 区间两端分数 分子相加/分母相加 递归 #include<iostream>using namespace std;int n;void dfs(int a,int b,int c,int d) //ac分子 bd分母{if(bd>n) return;dfs(a…

算法-DFS/BFS-XMUOJ提瓦特细胞探秘

题目 思路 这道题目描述了一个矩阵中由数字1至9组成的细胞&#xff0c;这些细胞按照特定规则相互连接。具体规则是&#xff0c;只有当细胞上下左右紧邻的数字同样属于1至9时&#xff0c;它们才会被视为同一细胞的一部分。 解决这个问题的关键在于如何遍历整个矩阵&#xff0c…

蓝桥杯C++大学B组一个月冲刺记录2024/3/13

蓝桥杯C大学B组一个月冲刺记录2024/3/13 规则:每日三题 向日葵的花语是说不出的爱恋 不过今天有点水题了 1.有序分数 给定一个整数 N&#xff0c;请你求出所有分母小于或等于 N&#xff0c;大小在 [0,1] 范围内的最简分数&#xff0c;并按从小到大顺序依次输出。 这个题在被划…

灵雀云开源ALB ,为云原生 Kubernetes 网关领域再添新星

ALB (Another Load Balancer)是一款由灵雀云倾力打造的云原生 Kubernetes 网关&#xff0c;近日&#xff0c;正式宣布将其在Github上开源。ALB 的诞生&#xff0c;旨在满足日益增长的云原生应用需求&#xff0c;为开发者提供更为强大和灵活的网关解决方案。 ALB 支持在一个集群…