【连载】常用数据结构及复杂度(一)

【连载】常用数据结构及复杂度(一)

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

如何选择数据结构

Array(T[])

当元素的数量是固定的,并且需要使用下标时。

Linkedlist(LinkedListT)

当元素需要能够在列表的两端添加时。否则使用ListT。

Resizablearraylist(ListT)

当元素的数量不是固定的,并且需要使用下标时。

Stack(StackT)

当需要实现LIFO(LastInFirstOut)时。

Queue(QueueT)

当需要实现FIFO(FirstInFirstOut)时。

Hashtable(DictionaryK,T)

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

Tree-baseddictionary(SortedDictionaryK,T)

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

Hashtablebasedset(HashSetT)

当需要保存一组唯一的值,并且元素没有特定顺序时。

Treebasedset(SortedSetT)

当需要保存一组唯一的值,并且元素需要排序时。

Array

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

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

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

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

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

分配空间(Allocation)

数据访问(Accessing)

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

intallocationSize=10;

bool[]booleanArray=newbool[allocationSize];

FileInfo[]fileInfoArray=newFileInfo[allocationSize];

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

如果我们为FileInfo[]数组中的一些位置赋上值,则引用关系为下图所示。

.NET中的数组都支持对元素的直接读写操作。语法如下:

//读数组元素

boolb=booleanArray[7];

//写数组元素

booleanArray[0]=false;

访问一个数组元素的时间复杂度为O(1),因此对数组的访问时间是恒定的。也就是说,与数组中包含的元素数量没有直接关系,访问一个元素的时间是相同的。

未完待续。。。

即刻起







































北京儿童医院看白癜风
白癜风资讯网



转载请注明:http://www.92nongye.com/ksfc/204612347.html