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#数据结构介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#数据结构之堆栈(Stack)实例详解

    本文实例讲述了C#数据结构之堆栈(Stack).分享给大家供大家参考,具体如下: 堆栈(Stack)最明显的特征就是"先进后出",本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点. 相对前面学习过的顺序表.链表不同的地方在于:Stack把所有操作限制在"只能在线性结构的某一端"进行,而不能在中间插入或删除元素.下面是示意图: 从示意图中可以看出,堆栈有二种实现方式:基于数组的顺序堆栈实现.类似链表的链式堆栈实现 先抽

  • C#常用数据结构和算法总结

    1.数据 数据(Data)是外部世界信息的载体, 是能够被计算机识别,加工,存储的.在现实生活中也就是我们的产品原材料. 计算机中的数据包括数值数据,图片,影音资料等. 2. 数据元素和数据项 数据元素(Data Element)是数据的基本单位,在计算机处理的过程中通常是作为一个整体来作为处理的. 数据项(Data Item):一个数据元素通常由一个或多个数据项组成. 比如数据库表:(Student),它有Id,Name,Sex,Age,Address等字段,而这张表又有多行数据.我们通常将这

  • 使用C#实现数据结构堆的代码

    一. 堆的介绍: 堆是用来排序的,通常是一个可以被看做一棵树的数组对象.堆满足已下特性: 1. 堆中某个节点的值总是不大于或不小于其父节点的值 任意节点的值小于(或大于)它的所有后裔,所以最小元(或最大元)在堆的根节点上(堆序性).堆有大根堆和小根堆,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆. 2. 堆总是一棵完全二叉树 除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入. 堆示意图: 将堆元素从上往下从左到右放进数组对象中,子父节点索引满足关系: p

  • C#数据结构之队列(Quene)实例详解

    本文实例讲述了C#数据结构之队列(Quene).分享给大家供大家参考,具体如下: 队列(Quene)的特征就是"先进先出",队列把所有操作限制在"只能在线性结构的两端"进行,更具体一点:添加元素必须在线性表尾部进行,而删除元素只能在线性表头部进行. 先抽象接口IQuene<T> namespace 栈与队列 { public interface IQuene<T> { /// <summary> /// 取得队列实际元素的个数 /

  • C#数据结构之循环链表的实例代码

    复制代码 代码如下: public class Node    {        public object Element;        public Node Link; public Node()        {            Element = null;            Link = null;        } public Node(object theElement)        {            Element = theElement;      

  • C#数据结构之双向链表(DbLinkList)实例详解

    本文实例讲述了C#数据结构之双向链表(DbLinkList).分享给大家供大家参考,具体如下: 这是继上一篇<C#数据结构之单链表(LinkList)实例详解>的继续,对于双向链接,节点上除了Next属性外,还要有Prev属性用来指向前一个节点,DbNode定义如下: namespace 线性表 { public class DbNode<T> { private T data; private DbNode<T> prev; private DbNode<T&g

  • C#数据结构之顺序表(SeqList)实例详解

    本文实例讲述了C#数据结构之顺序表(SeqList)实现方法.分享给大家供大家参考,具体如下: 线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqLi

  • C#数据结构之单链表(LinkList)实例详解

    本文实例讲述了C#数据结构之单链表(LinkList)实现方法.分享给大家供大家参考,具体如下: 这里我们来看下"单链表(LinkList)".在上一篇<C#数据结构之顺序表(SeqList)实例详解>的最后,我们指出了:顺序表要求开辟一组连续的内存空间,而且插入/删除元素时,为了保证元素的顺序性,必须对后面的元素进行移动.如果你的应用中需要频繁对元素进行插入/删除,那么开销会很大. 而链表结构正好相反,先来看下结构: 每个元素至少具有二个属性:data和next.data

  • C#中的数据结构介绍

    一.数组(Array) 数组具有以下的特点: 数组属于线性结构,在内存中是连续存放的. 数组的元素类型必须相同. 数组可以直接通过下标访问. 数组的查找速度非常快,新增和删除速度慢. 数组在初始化时要指定数组长度. 二.动态数组(ArrayList) 动态数组具有以下的特点: ArrayList的底层其实就是一个数组. ArrayList在声明时不必指定长度,会根据存储的数据动态的增加或减少长度. ArrayList会把所有的元素都当做Object处理,因此可以存储不同数据类型的元素. 插入和删

  • python中常用的数据结构介绍

    栈 # 使用List作为栈 stack = [3, 4, 5] # 入栈 stack.append(6) # 出栈 val = stack.pop() # 栈定元素 val = stack[-1] 队列 队列是FIFO, 但是List对于First Out效率不够高.通常用双端队列Deque来实现队列 Deque的特点是,两端添加和删除都是O(1)的时间复杂度 from collections import deque queue = deque(["Eric", "John

  • python中的数据结构比较

    列表:list=[val1,val2] 1.列表中的每一个元素都是可变的,有序的,可以被查看索引的. 可变意味着可以对每个元素进行增删改查的操作,列表中的元素可以是Python中的任何对象 (1)创建列表的方法: 一.是用方括号[]直接赋值,赋一组以逗号隔开的值: newlist=[1,2,3] print(newlist) #[1, 2, 3] print(type(newlist)) #查看类型为:<class 'list'> 二.是调用list函数进行定义. tup=('q','w','

  • Python numpy中的ndarray介绍

    目录 1. 什么是 ndarray? ndarray 概念 ndarray 内部关系 2. ndarray 内存结构 ndarray 内存结构 3. ndarray vs list ndarray 特点 list 特点 在上一期python numpy 模块中对概述介绍了numpy 模块安装.使用方法.特点等入门知识. numpy 模块是一个开源的第三方Python库,常用于科学和工程领域,是科学Python和PyData 生态系统的核心. numpy 模块易学易用的特点,基本上覆盖了初学者到先

  • C语言从猜数字游戏中理解数据结构

    目录 1 猜数字游戏-问题描述 2 问题分析 3 问题解决 3.1 猜一次 3.2 直到猜到为止 3.3 限定猜10次 3.4 处理特殊情况 3.5 猜下一个数 1 猜数字游戏-问题描述 这个游戏一点都不陌生,猜价格是一度很火的综艺节目.很多老师也用这个案例作为课堂案例.在这里,我想把重点放到“思维层面上”,即:为什么要这样写代码,就实现了猜数字游戏的功能. 我们先来说真人版的猜数字游戏: A:心里默默出一个数字(约定一个范围,假设[1-100]之间),开始猜把 B猜:50 A: 大了 B猜:2

  • Python Pandas 中的数据结构详解

    目录 1.Series 1.1通过列表创建Series 1.2通过字典创建Series 2.DataFrame 3.索引对象 4.查看DataFrame的常用属性 前言: Pandas有三种数据结构:Series.DataFrame和Panel.Series类似于数组:DataFrame类似于表格:Panel可视为Excel的多表单Sheet 1.Series Series是一种一维数组对象,包含一个值序列,并且包含数据标签,称为索引(index),通过索引来访问数组中的数据. 1.1通过列表创

  • 详解如何在Go语言中循环数据结构

    目录 如何在Go中循环字符串 如何在Go中循环map结构 如何在Go中循环Struct 数组是存储类似类型数据的强大数据结构.您可以通过索引识别和访问其中的元素. 在Golang中,您可以通过在0初始化变量i并增加变量直到它达到数组的长度,使用for循环循环数组. 它们的语法如下所示: for i := 0; i < len(arr); i++ { // perform an operation } 例如,让我们循环一个整数数组: package main import ( "fmt&qu

  • golang中set数据结构的使用示例

    目录 借助map实现 算法应用 借助map实现 golang中没有set数据结构,一般是通过map实现,因为map的key值是不能重复的 示例 type empty struct { } // golang中的set数据类型 func MakeGolangSet(){     // 首先,空结构体内存消耗为0,其它数据结构如布尔值等均存在内存消耗     var e empty     fmt.Printf("empty struct memory is %v\n", unsafe.S

  • 老生常谈PHP中的数据结构:DS扩展

    PHP7以上才能安装和使用该数据结构扩展,安装比较简单: 1. 运行命令 pecl install ds 2. 在php.ini中添加 extension=ds.so 3. 重启PHP或重载配置 Collection Interface:包含本库中所有数据结构通用功能的基本interface. It guarantees that all structures are traversable, countable, and can be converted to json using json_

  • 浅谈Java中常用数据结构的实现类 Collection和Map

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类. Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个C

随机推荐