C# 利用继承 List 实现堆栈原理与后进先出操作

陆遥
陆遥
发布时间:2026-10-15| 5人浏览过
原创

堆栈是一种遵循后进先出(LIFO)原则的数据结构,仅允许在栈顶进行数据的插入与移除。本文将通过 C# 代码实例,演示如何继承自 List 类来构建一个简单的堆栈结构,并详细解析其压栈、出栈操作的实现逻辑与实际运行效果。

堆栈的核心概念

在数据结构中,堆栈(Stack)可以被视为一种受约束的链表。其核心特性在于“后进先出”(Last In, First Out, LIFO),这意味着最后被添加到集合中的元素会被最先取出。

堆栈主要包含两个基础操作:

  • 压栈(Push):将新节点放置在栈顶位置。
  • 出栈(Pop):从栈顶移除并返回一个节点的数据项。

为了直观理解这一过程,我们可以通过 C# 编写一个派生于 List 的自定义类来模拟这一行为。

构建基于 List 继承的堆栈类

我们创建一个名为 StackInheritance 的类,使其继承自基础列表类型。通过封装 InsertAtFront 和 RemoveFromFront 这两个底层方法,我们可以轻易地实现栈顶操作。

namespace LinkedListLibrary
{
    public class StackInheritance : List
    {
        public StackInheritance() : base("stack"){}
        
        // 压栈:将数据插入到列表前端(即栈顶)
        public void Push(object dataValue)
        {
            InsertAtFront(dataValue);
        }
        
        // 出栈:从列表前端移除并返回数据(即弹出栈顶)
        public object Pop()
        {
            return RemoveFromFront();
        }
    }
}

在这个实现中,Push 方法调用了内部的 InsertAtFront,而 Pop 方法调用了 RemoveFromFront。这种设计确保了数据始终以 LIFO 的顺序进出。

代码测试与执行结果

下面通过客户端代码对 StackInheritance 进行测试。我们将依次压入布尔值、字符、整数和字符串,然后循环弹出所有元素以观察顺序。

public static void Main(string[] args)
{
    StackInheritance stack = new StackInheritance();
    bool aBoolean = true;
    char aChar = 'a';
    int anInt = 12;
    string aStr = "hello";

    // 执行压栈操作
    stack.Push(aBoolean);
    stack.Display();
    stack.Push(aChar);
    stack.Display();
    stack.Push(anInt);
    stack.Display();
    stack.Push(aStr);
    stack.Display();

    try
    {
        while (true)
        {
            object removedObject = stack.Pop();
            Console.WriteLine(removedObject + "被弹出~~");
            stack.Display();
        }
    }
    catch (EmptyListException emptyListException)
    {                
        Console.Error.WriteLine(emptyListException.StackTrace);
    }
    Console.ReadKey();
}

在上述代码中:
1. 依次向堆栈中压入 true, 'a', 12, "hello"。
2. 使用 while(true) 循环尝试不断弹出元素。
3. 当堆栈为空时,内部逻辑会抛出 EmptyListException 异常,从而中断循环并打印错误栈信息。

通过观察上述输出结果,可以清晰看到最后压入的 "hello" 首先被弹出,随后依次是 12、'a' 和 true,这完美印证了堆栈后进先出的数据特性。

总结

借助继承 List 的特性,我们可以快速原型化一个符合 LIFO 规则的堆栈。尽管在实际生产环境中通常直接使用 C# 内置的 System.Collections.Stack 或泛型 Stack<T>,但这种底层模拟对于理解链表与集合的关系至关重要。

以上就是C#集合本质之堆栈的用法详解的详细内容,更多关于C#堆栈进阶实践的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。