C#中的数据结构介绍

 更新时间:2022年03月22日 09:13:39   作者:.NET开发菜鸟  
这篇文章介绍了C#中的数据结构,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、数组(Array)

数组具有以下的特点:

  • 数组属于线性结构,在内存中是连续存放的。
  • 数组的元素类型必须相同。
  • 数组可以直接通过下标访问。
  • 数组的查找速度非常快,新增和删除速度慢。
  • 数组在初始化时要指定数组长度。

二、动态数组(ArrayList)

动态数组具有以下的特点:

  • ArrayList的底层其实就是一个数组。
  • ArrayList在声明时不必指定长度,会根据存储的数据动态的增加或减少长度。
  • ArrayList会把所有的元素都当做Object处理,因此可以存储不同数据类型的元素。
  • 插入和删除一个元素时,会移动它之后所有元素的位置,效率低,频繁进行插入或者删除元素推荐使用LinkedList。
  • ArrayList是非类型安全的,在插入和删除元素时会进行拆箱和装箱问题,影响性能,效率低。

三、泛型List

泛型List具有以下的特点:

  • List是ArrayList的泛型类。
  • 泛型List需要在声明时指定具体的类型。
  • 泛型List没有装箱和拆箱操作,因此List比ArrayList效率高而且类型安全。

四、双向链表(LinkedList)

双向链表具有如下特点:

  • 链表的节点在内存中的空间是不连续的,每块空间称作一个节点,每个节点都存有一个前驱和后置指针,分别指向前一个节点和后一个节点,因此向链表中添加和删除元素的效果高,只需要更改相应节点的指针指向即可。
  • 链表的查找效率低。查找元素时不能通过下标进行访问,只能从头开始通过地址按顺序查找。

五、堆栈(Stack)

堆栈具有如下特点:

  • 堆栈是先进后出的原则,最先插入的元素最后被访问,最后插入的元素最先被访问。
  • Push入栈,Pop出栈并返回栈顶元素,Peek只返回栈顶元素。

六、Queue(链表)

链表具有以下特点:

  • 链表是先进先出的原则,最先进入的元素最先被访问,最后进入的元素最后被访问。
  • Enqueue入队列,Dequeue出队列并返回列首元素,Peek只返回列首元素。 

七、字典(Dictionary)

字典具有以下特点:

  • 创建字典时需要指定key和value的数据类型。
  • 字典中的key值是唯一的,value的值可以不唯一。
  • 可以通过key快速查找对应的value,速度快,但是消耗内存。

几种常见数据结构的使用情景

Array需要处理的元素数量确定并且需要使用下标进行访问时可以考虑,不过建议使用List<T>。
ArrayList不推荐使用,建议使用泛型List<T>。
泛型List<T>需要处理的元素数量不确定时,通常建议使用。
LiskedList<T>链表适合元素数量不固定,而且需要经常增减节点的情况,链表增减元素效率高。
Queue<T>队列适合于先进先出的情况。
Stack<T>堆栈适合于先进后出的情况。
Dictionary<K,T>字典适合于需要键值对操作的情况。

到此这篇关于C#数据结构介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • WinForm窗体间传值的方法

    WinForm窗体间传值的方法

    这篇文章主要介绍了WinForm窗体间传值的方法,包括了静态变量、公共变量、共有属性等方式,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • C#中ValueTuple的原理详解

    C#中ValueTuple的原理详解

    C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple,下面这篇文章主要给大家介绍了关于C#中ValueTuple原理的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06
  • C# WebService发布以及IIS发布

    C# WebService发布以及IIS发布

    这篇文章主要介绍了C# WebService发布以及IIS发布的相关资料,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • C# websocket及时通信协议的实现方法示例

    C# websocket及时通信协议的实现方法示例

    说到websocket大家一定不会陌生,WebSocket是HTML5一种新的协议。下面这篇文章主要给大家介绍了关于C# websocket及时通信协议的实现方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11
  • c# EPPlus秘籍之Excel实现图表导出

    c# EPPlus秘籍之Excel实现图表导出

    这篇文章主要为大家介绍了c# EPPlus秘籍之Excel实现图表导出示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • winform 调用摄像头扫码识别二维码的实现步骤

    winform 调用摄像头扫码识别二维码的实现步骤

    这篇文章主要介绍了winform 调用摄像头扫码识别二维码的实现步骤,帮助大家更好的理解和学习使用winform,感兴趣的朋友可以了解下
    2021-02-02
  • C# 获取硬件参数的实现方法

    C# 获取硬件参数的实现方法

    这篇文章主要介绍了C# 获取硬件参数的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • DevExpress设置饼状图的Lable位置实例

    DevExpress设置饼状图的Lable位置实例

    这篇文章主要介绍了DevExpress设置饼状图的Lable位置的方法,以实例形式详细讲述了设置饼状图的Lable位置具体实现过程,需要的朋友可以参考下
    2014-10-10
  • 基于WPF实现绘制地铁路线图

    基于WPF实现绘制地铁路线图

    经常坐地铁,却不知道地铁多少条线路?哪个站下车?本文就来带大家利用WPF绘制深圳地铁路线图,从而带大家掌握WPF在图形绘制方面的一些知识,希望对大家有所帮助
    2023-06-06
  • C#串口通信程序实例详解

    C#串口通信程序实例详解

    在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
    2013-12-12

最新评论