常用的数据结构_几种常用数据结构的时间复杂度

前言

数据结构应该是和日常的业务代码密切不可分的, 每个人都应该接触过, 但是真正去了解或研究的人很少, 今天就给大家介绍和对比一下常用数据结构.

时间复杂度对比

Data Structure Add Find Delete GetByIndex
 Array (T[])

O(n)

O(n)

O(n)

O(1)

 Linked list (LinkedList)

O(1)

O(n)

O(n)

O(n)

 Resizable array list (List)

O(1)

O(n)

O(n)

O(1)

 Stack (Stack)

O(1)

-

O(1)

-

 Queue (Queue)

O(1)

-

O(1)

-

 Hash table (Dictionary)

O(1)

O(1)

O(1)

-

 Tree-based dictionary

 (SortedDictionary)

  O(log n)  

  O(log n)  

  O(log n)  

-

 Hash table based set

 (HashSet)

O(1)

O(1)

O(1)

-

 Tree based set

 (SortedSet)

O(log n)

O(log n)

O(log n)

-

如何选择数据结构

  • Array (T[]): 当元素的数量是固定的,并且需要使用下标时。

  • Linked list (LinkedList): 当元素需要能够在列表的两端添加时。否则使用 List。

  • Resizable array list (List): 当元素的数量不是固定的,并且需要使用下标时。

  • Stack (Stack): 当需要实现 LIFO(Last In First Out)时。

  • Queue (Queue): 当需要实现 FIFO(First In First Out)时。

  • Hash table (Dictionary): 当需要使用键值对(Key-Value)来快速添加和查找,并且元素没有特定的顺序时。

  • Tree-based dictionary (SortedDictionary)当需要使用价值对(Key-Value)来快速添加和查找,并且元素根据 Key 来排序时。

  • Hash table based set (HashSet)当需要保存一组唯一的值,并且元素没有特定顺序时。

  • Tree based set (SortedSet)当需要保存一组唯一的值,并且元素需要排序时。

Array

在计算机程序设计中,数组(Array)是最简单的而且应用最广泛的数据结构之一。在任何编程语言中,数组都有一些共性:

  • 数组中的内容是使用连续的内存(Contiguous Memory)来存储的。

  • 数组中的所有元素必须是相同的类型,或者类型的衍生类型。因此数组又被认为是同质数据结构(Homegeneous Data Structures)。

  • 数组的元素可以直接被访问。比如你需要访问数组的第 i 个元素,则可以直接使用 arrayName[i] 来访问。

对于数组的常规操作包括:

  • 分配空间(Allocation)

  • 数据访问(Accessing)

在 C# 中,可以通过如下的方式声明数组变量。

int allocationSize = 10;bool[] booleanArray = new bool[allocationSize];FileInfo[] fileInfoArray = new FileInfo[allocationSize];

上面的代码将在 CLR 托管堆中分配一块连续的内存空间,用以容纳数量为 allocationSize ,类型为 arrayType 的数组元素。如果 arrayType 为值类型,则将会有 allocationSize 个未封箱(unboxed)的 arrayType 值被创建。如果 arrayType 为引用类型,则将会有 allocationSize 个 arrayType 类型的引用被创建。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值