一个数据元素中包含多个数据项;
线性表是数据结构中最简单、最基本也是最常用的一种,它是线性结构的抽象,上文提到线性结构的特点是结构中的数据元素之间关系为一对一关系。也就是说数据元素是一个接一个的排序。
线性表定义:
线性表Linear List:由n(n>=0)个相同类型的数据元素构成的有限序列。记为L=(a1,a2,...,ai-1,ai,ai+1,...,an)。可使用下式表示:
L=(D,R)
其中,D是数据元素的有限集合,R是数据元素之间关系的有限集合。
线性表基本操作包括插入操作、删除操作、查找、清空等。
线性表的分类
按线性表的元素结构分,可将线性表分为:
1、顺序表:将线性表中的结点按逻辑顺序依次存放在一组地址的存储单元中;
2、链表
1)单向链表:链表的链接方向是单向,对链表的访问要通过顺序读取从头部开始;
2)双向链表:其每个数据结点中都有两个指针,分别指向直接后继和直接前驱。
3)循环链表:其最后一个结点指向头结点,形成一个环;从循环链表中的任何一个结点出发都能找到任何其他结点。
顺序表
顺序表(Sequence List)是在计算机内在中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。
单链表
单链表(Singly Linked List),也称单向链表,链表中的一种,其特点链接方向是意向的,对链表的访问要通过顺序读取。在顺序链表中元素之间紧密相连,为了表示两个数据元素逻辑上的相邻关系,除了存储数据元素本身的信息外,还要存储与其相邻的下一数据元素的存储地址信息,也就是指针信息,也叫引用域。数据元素信息和指针信息组成该数据元素的存储映像,这就是节点(Node)。
数据域也可使用data表示,指针域使用next表示。
这样线性表就通过每个结点的指针域形成了一根“链条”,也就是我们所说的“链表”。如果结点的引用域只存储该节点直接后继节点的指针域,则该链表称为单链表(Singly Linked List)。
C#数据结构与算法揭秘一:数据结构和算法简介
C#数据结构与算法揭秘二:顺序表
C#数据结构与算法揭秘三:链表
C#数据结构与算法揭秘四:双向链表和环形链表
C#数据结构与算法揭秘五:栈和队列
C#数据结构与算法揭秘六:串和数组
C#数据结构与算法揭秘七:树形结构和图状结构
C#数据结构与算法揭秘八:二叉树的存储结构、源代码实现、遍历方法
C#数据结构与算法揭秘九:哈夫曼树
C#数据结构与算法揭秘十:图的结构
C#数据结构与算法揭秘11:图的基本源代码
......
集合:
集合类时为保障数据的安全存储和访问设计的,常见的集合类如下:
ArrayList 使用大小可按需动态增加的数组实现System.Collections.Ilist 接口。
SortedList 表示键/值对的集合,这些键/值对按键排序并可按照键和索引访问。
Queue 表示对象的先进先出集合。
Stack 表示对象简单的后进先出集合。
HashTable 表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。
集合类实现的接口如下:
Icollection 定义所有非泛型集合的大小,枚举数和同步方法。
Icomparer 公开一种比较两个对象的方法。
IEnumerable 公开枚举数,该枚举数支持杂器在非泛型集合上进行简单迭代。
IList 表示可按照对象单独访问的非泛型集合。
IDictionary 表示键/值对的非通用集合。
IDictionaryEnumerator 枚举非泛型字典的元素。