下面描述线性表,树以及hash表的常见特性以及优缺点,知道这些还是很有用的
1、线性表
特点:
1.集合中必存在唯一的一个“第一元素”;
2.集合中必存在唯一的一个 “最后元素” ;
3.除最后一个元素之外,均有 唯一的后继(后件);
4.除第一个元素之外,均有 唯一的前驱(前件)。
由n(n≥0)个数据元素(结点)a1,a2,…,an组成的有限序列。数据元素的个数n定义为表的长度。当n=0时称为空表。常常将非空的线性表(n>0)记作:(a1,a2,…an)
数据元素ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。
结构特点
1.均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数据类型和长度。
2.有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素直接前驱和后面均只有一个数据元素(直接后继)。
在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。链式存储结构将在本网站线性链表中介绍,本章主要介绍用数组实现线性表数据元素的顺序存储及其应用。另外栈、队列和串也是线性表的特殊情况,又称为受限的线性结构。
优点:元素之间的位置关系是确定的,操作比较简单,容易实现,有两种存储形式:顺序存储和链式存储,顺序存储可以方便的进行随机存取,链式存储可以方便的进行插入和删除操作。
2、树
树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
- 每个结点有零个或多个子结点;
- 没有前驱的结点称为根结点;
- 每一个非根结点有且只有一个父结点;
- 除了根结点外,每个子结点可以分为m个不相交的子树;
支持多种动态集合操作:search, Minimum, Maxmum, Predecessor, Successor, Insert, Delete.根据树的不同,通常操作也不同。
既可以用来做字典,也可以用来作优先队列。
由于具体的树的种类繁多,这里抽象的说一下树的优缺点,元素之间的关系相对于线性表来说要更复杂,操作要更复杂。是对存储的灵活性和检索的灵活性的一种折中。
3、hash表
- 计算哈希函数所需时间
- 关键字的长度
- 哈希表的大小
- 关键字的分布情况
- 记录的查找频率
常见的hash函数有:直接寻址法,数字分析法,平方取中法,折叠法,随机数法,除留余数法
处理冲突的方法有:开放寻址法(open addressing),再散列法,链地址法(chaining),建立一个公共溢出区
hash表中元素之间的位置关系是随机的,没有任何规律可言,hash表的优点是将读取的效率做到极致。