线性表,树,hash表的优缺点

来源:互联网 发布:手机淘宝怎么分期 编辑:程序博客网 时间:2024/05/21 13:55

下面描述线性表,树以及hash表的常见特性以及优缺点,知道这些还是很有用的

1、线性表

线性表是一种常用的数据结构。
在实际应用中,线性表都是以栈、队列、字符串等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。
线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。一般地,一个线性表可以表示成一个线性序列:k1,k2,…,kn,其中k1是开始结点,kn是终端结点。
是一个数据元素的有序(次序)集

特点

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)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  1. 每个结点有零个或多个子结点;
  2. 没有前驱的结点称为根结点;
  3. 每一个非根结点有且只有一个父结点;
  4. 除了根结点外,每个子结点可以分为m个不相交的子树;

支持多种动态集合操作:search, Minimum, Maxmum, Predecessor, Successor, Insert, Delete.根据树的不同,通常操作也不同。

既可以用来做字典,也可以用来作优先队列。

由于具体的树的种类繁多,这里抽象的说一下树的优缺点,元素之间的关系相对于线性表来说要更复杂,操作要更复杂。是对存储的灵活性和检索的灵活性的一种折中。

3、hash表

是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
hash表支持的操作只有三个:insert,search,delete
散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。实际工作中需视不同的情况采用不同的哈希函数,通常考虑的因素有:
  1. 计算哈希函数所需时间
  2. 关键字的长度
  3. 哈希表的大小
  4. 关键字的分布情况
  5. 记录的查找频率

常见的hash函数有:直接寻址法,数字分析法,平方取中法,折叠法,随机数法,除留余数法

处理冲突的方法有:开放寻址法(open addressing),再散列法,链地址法(chaining),建立一个公共溢出区

hash表中元素之间的位置关系是随机的,没有任何规律可言,hash表的优点是将读取的效率做到极致。