C# 队列 (Queue) 实现原理与用法详解

不晚
不晚
发布时间:2026-10-13 | 2人浏览过
原创

队列是一种遵循先进先出(FIFO)原则的线性数据结构,常用于模拟排队场景。本文将解析如何基于 C# 中的 List 派生类实现自定义队列,涵盖入队、出队操作及异常处理。

队列的数据结构与核心逻辑

队列可以被视为一种约束版的链表,其核心特征是“先进先出”(First In, First Out, FIFO)。在计算机科学中,队列广泛应用于任务调度、缓冲区管理等场景。与普通链表不同,队列严格限制了数据的插入位置(仅在末尾)和删除位置(仅在前端),从而保证了数据处理的有序性。

C# 自定义队列实现步骤

第1步:定义继承自 List 的队列类

目的:通过继承现有的 List 类,复用其内部节点管理功能,同时暴露符合队列语义的方法(如 Enqueue 和 Dequeue)。

入口:命名空间 LinkedListLibrary。

动作:创建类 QueueInheritance,在构造函数中初始化基类标识。实现两个关键方法:

  • Enqueue(object dataValue): 调用基类的 InsertAtBack 方法,将元素添加到链表尾部。
  • Dequeue(): 调用基类的 RemoveFromFront 方法,移除并返回链表头部的元素。
namespace LinkedListLibrary
{
    public class QueueInheritance : List
    {
        public QueueInheritance() : base("queue"){}
        //入队:到最后面
        public void Enqueue(object dataValue)
        {
            InsertAtBack(dataValue);
        }
        //出队:在最前面删除
        public object Dequeue()
        {
            return RemoveFromFront();
        }
    }
}

第2步:编写客户端调用程序

目的:演示队列的实际使用流程,包括多种数据类型入队、状态显示以及正常出队与空队列异常处理。

入口:控制台应用程序的 Main 方法。

动作:

  1. 实例化与数据准备:创建 QueueInheritance 对象,并准备布尔、字符、整数和字符串类型的测试数据。
  2. 执行入队:依次调用 Enqueue 将不同数据类型放入队列,每次操作后调用 Display() 观察当前队列状态。
  3. 执行出队循环:使用 while(true) 循环尝试从队列中提取元素。
  4. 异常处理:当队列变为空时,基类将抛出 EmptyListException。程序需捕获该异常并记录堆栈轨迹,防止应用崩溃。
        public static void Main(string[] args)
        {
            QueueInheritance queue = new QueueInheritance();
            bool aBoolean = true;
            char aChar = 'a';
            int anInt = 1;
            string aStr = "hello";
            queue.Enqueue(aBoolean);
            queue.Display();
            queue.Enqueue(aChar);
            queue.Display();
            queue.Enqueue(anInt);
            queue.Display();
            queue.Enqueue(aStr);
            queue.Display();
            object removedObject = null;
            try
            {
                while (true)
                {
                    removedObject = queue.Dequeue();
                    Console.WriteLine(removedObject + "出队列~~");
                    queue.Display();
                }
            }
            catch (EmptyListException emptyListException)
            {
                Console.Error.WriteLine(emptyListException.StackTrace);
            }
            Console.ReadKey();
        }

完成判断与排错指南

成功标志:控制台按预期顺序输出入队后的数据状态,并在出队结束后正确打印 EmptyListException 的堆栈信息,而非发生未处理异常崩溃。

常见陷阱:

  • 类型安全:上述实现使用 object 类型,虽然通用但会导致装箱/拆箱开销。在生产环境中,建议结合泛型 Queue<T> 使用以提高性能。
  • 空指针检查:在执行 Console.WriteLine(removedObject) 前,理想情况下应检查队列是否为空,尽管本示例利用异常机制控制流程,但在某些业务逻辑中,预检查可能更合适。

简要总结

本文通过自定义类的形式,直观展示了 C# 中队列“先进先出”的运作机制。掌握了这一基础实现逻辑,有助于深入理解 .NET 框架内置 Queue<T> 的行为模式。以上就是 C# 队列实现的详细内容,更多关于 C# 数据结构学习资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表