首页 > 编程语言 >C# PriorityQueue优先队列

C# PriorityQueue优先队列

时间:2025-01-20 11:45:09浏览次数:1  
标签:优先级 Enqueue C# PriorityQueue 队列 WriteLine new var Console

namespace PriorityQueueDemo
{
    public class Task
    {
        public string Name { get; set; } 
    }

    public class TaskPriorityComparer : IComparer<(int, int)>
    {
        public int Compare((int, int) x, (int, int) y)
        {
            // 首先比较紧急程度,然后比较重要性
            int compareUrgency = x.Item1.CompareTo(y.Item1);
            if (compareUrgency != 0) return compareUrgency;
            return x.Item2.CompareTo(y.Item2);
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // 优先队列是一种特殊的队列,其中每个元素都有一个优先级。元素按照优先级的顺序被移除,而不是它们被添加到队列中的顺序。这意味着高优先级的元素将会在低优先级的元素之前被处理
            // 值越小等级越高

            // 简单的优先队列
            var priorityQueue1 = new PriorityQueue<string, int>();

            // 向队列中添加元素和对应的优先级
            priorityQueue1.Enqueue("任务高", 1);
            priorityQueue1.Enqueue("任务低", 3);
            priorityQueue1.Enqueue("任务中", 2);

            // 按优先级顺序移除和返回元素
            while (priorityQueue1.TryDequeue(out var item, out var priority))
            {
                Console.WriteLine($"处理 {item} 优先级 {priority}");
            }

            // 自定义优先级规则
            var priorityQueue2 = new PriorityQueue<Task, (int, int)>(new TaskPriorityComparer());

            // 添加任务
            priorityQueue2.Enqueue(new Task { Name = "任务A" }, (1, 2));
            priorityQueue2.Enqueue(new Task { Name = "任务B" }, (1, 1));
            priorityQueue2.Enqueue(new Task { Name = "任务C" }, (2, 3));

            // 按优先级顺序处理任务
            while (priorityQueue2.TryDequeue(out var task, out var priority))
            {
                var note = $"执行任务 {task.Name} 紧急程度 {priority.Item1} 重要性 {priority.Item2}";

                Console.WriteLine(note);

                Console.WriteLine("是否输入新任务?(Y / N): ");
                var key = Console.ReadKey(); Console.WriteLine("");

                if (key.Key == ConsoleKey.Y)
                {
                    Console.WriteLine("请输入任务信息(任务X,1,1):");
                    var taskInfo = Console.ReadLine(); Console.WriteLine("");

                    if (!string.IsNullOrEmpty(taskInfo))
                    {
                        var infos = taskInfo.Split(',');
                        var taskName = infos[0];
                        var urgency = Convert.ToInt32(infos[1]);// 紧急程度
                        var importance = Convert.ToInt32(infos[2]);// 重要性
                        priorityQueue2.Enqueue(new Task { Name = taskName }, (urgency, importance));
                        Console.WriteLine($"插入任务 {taskName} 紧急程度 {urgency} 重要性 {importance}");
                    } 
                } 
            }
        }
    }
}

 

标签:优先级,Enqueue,C#,PriorityQueue,队列,WriteLine,new,var,Console
From: https://www.cnblogs.com/chen1880/p/18681043

相关文章

  • 织梦CMS首页URL优化:去掉index.html
    在使用织梦CMS搭建网站时,很多用户希望将首页URL从域名/index.html简化为域名,以提升网站的专业形象和用户体验。以下是实现这一目标的步骤:修改伪静态规则:登录织梦CMS后台,进入“系统”->“系统基本参数”->“核心设置”,找到“是否使用伪静态”,选择“是”。根据服务器类型(A......
  • 2025年全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
    目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15天)4.3......
  • 2025年全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
    目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15天)4.3......
  • 2025年全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
    目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15天)4.3、......
  • 【2025年】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
    ......
  • 【2025年】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
    ......
  • 如何使用PHP代码防护轻量级CC攻击?
    设置IP访问限制:定义每个IP地址在指定时间内的请求限制次数。定义时间限制(秒)。获取用户IP地址:使用$_SERVER['REMOTE_ADDR']获取用户的IP地址。存储访问记录:使用文件存储每个IP地址的访问时间和请求次数。文件路径和文件名使用IP地址的SHA1哈希值,确保唯一性。......
  • 如何修改织梦网站的图标(ICO)以提升品牌形象
    修改织梦网站的图标(ICO)是提升品牌形象和用户体验的重要步骤。以下是详细的指南,帮助您顺利完成这一任务:准备新的图标文件:确保新图标文件为.ico格式,尺寸通常为16x16像素或32x32像素。使用图形编辑工具如Photoshop、GIMP等创建或转换图标文件。备份现有文件:在进行任何更改......
  • 如何修改织梦(DedeCMS)网站地图生成模板以优化SEO
    修改织梦(DedeCMS)的网站地图生成模板是优化网站SEO的重要步骤。以下是详细的指南,帮助您顺利完成这一任务:备份现有模板:在进行任何更改之前,请确保对当前使用的网站地图模板进行完整备份。这可以防止意外错误导致网站地图无法正常生成。登录织梦后台管理系统:进入织梦网站的......
  • 【转】[JavaScript] 为什么需要 ===
    转自:kimi.ai在JavaScript中,===是严格等于运算符(StrictEqualityOperator),它与==(等于运算符)一起用于比较两个值是否相等。然而,===和==的行为和用途有所不同,这主要是由于JavaScript的类型系统和历史设计导致的。以下是一些关键原因,解释为什么JavaScript中需要===:1.......