c#数据结构(2.1线性表, 顺序表,单链表,其它链表)

一,线性表

     线性表是最简单、最基本、最常用的数据结构。线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这种一对一的关系指的是数据元素之间的位置关系,即:(1)除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素;(2)除最后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。

1.1,线性表的定义

   线性表(List)是由 n(n≥0)个相同类型的数据元素构成的有限序列

   对于这个定义应该注意两个概念:一是“有限”,指的是线性表中的数据元素的个数是有限的,线性表中的每一个数据元素都有自己的位置(Position)。本书不讨论数据元素个数无限的线性表。二是“相同类型”,指的是线性表中的数据元素都属于同一种类型。虽然有的线性表具有不同类型的数据元素,但本书中所讨论的线性表中的数据元素都属于同一类型。

   线性表的形式化定义为:线性表(List)简记为 L,是一个二元组,L = (D, R)其中:D 是数据元素的有限集合。R 是数据元素之间关系的有限集合。

  例如,1 到 100 的偶数就是一个线性表: (2,4,6,…,100)表中数据元素的类型是自然数。某个办公室的职员姓名(假设每个职员的姓名都不一样)也可以用一个线性表来表示:(“zhangsan”,”lisi”,”wangwu”,”zhaoliu”,”sunqi”,”huangba”)表中数据元素的类型为字符串。                                  数据项            数据项

二,顺序表

2.1 顺序表的定义

     在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List),如图 2.1 所示。顺序表的特点是表中相邻的数据元素在内存中存储位置也相邻


    C#语言中的数组在内存中占用的存储空间就是一组连续的存储区域,因此,数组具有随机存取的特点。所以,数组天生具有表示顺序表的数据存储区域的特性。

三,单链表

      顺序表是用地址连续的存储单元顺序存储线性表中的各个数据元素,逻辑上相邻的数据元素在物理位置上也相邻。因此,在顺序表中 查找任何一个位置上的数据元素 非常方便,这是顺序存储的优点。但是,在对顺序表进行 插入和删除时,需要通过移动数据元素来实现, 影响了运行效率。本节介绍线性表的另外一种存储结构—— 链式存储(Linked Storage),这样的线性表叫 链表(Linked List)。链表不要求逻辑上相邻的数据元素在物理存储位置上也相邻,因此,在对链表进行插入和删除时不需要移动数据元素,但同时也 失去了顺序表可随机存储的优点

3.1单链表的定义

    链表是用一组任意的存储单元来存储线性表中的数据元素(这组存储单元可以是连续的,也可以是不连续的)。那么,怎么表示两个数据元素逻辑上的相邻关系呢?即如何表示数据元素之间的线性关系呢?为此,在存储数据元素时,除了存储数据元素本身的信息外,还要存储与它相邻的数据元素的存储地址信息。这两部分信息组成该数据元素的存储映像(Image),称为结点(Node)。把存储据元素本身信息的域叫结点的数据域(Data Domain),把存储与它相邻的数据元素的存储地址信息的域叫结点的引用域(Reference Domain)。因此,线性表通过每个结点的引用域形成了一根“链条”,这就是“链表”名称的由来。



四,其他链表

双向链表:

      如果希望找直接前驱结点和直接后继结点的时间复杂度都是 O(1),那么,需要在结点中设两个引用域,一个保存直接前驱结点的地址,叫 prev,一个直接后继结点的地址,叫 next,这样的链表就是双向链表(Doubly Linked List)。双向链表的结点结构示意图如图 2.15 所示。


循环链表:

    有些应用不需要链表中有明显的头尾结点。在这种情况下,可能需要方便地从最后一个结点访问到第一个结点。此时,最后一个结点的引用域不是空引用,而是保存的第一个结点的地址(如果该链表带结点,则保存的是头结点的地址),也就是头引用的值。带头结点的循环链表(Circular Linked List)如图 2.18 所示。


C#中的线性表IList

猜你喜欢

转载自blog.csdn.net/qq_40138785/article/details/81029091