您的位置:首页 > 理论基础 > 数据结构算法

数据结构之线性表

2011-08-22 22:34 183 查看
在数据结构中共有四种结构类型:

集合:集合中的所有对象之间均没有内存的联系性,他们只是散列的排在一起,隶属于同一个集合
线性表:线性表表示了对象之间的一对一关系;
树: 树结构表示了对象之间的一对多关系;
图:图结构表示了对象之间的多对多关系;

本篇文章主要说明对线性表的逻辑操作和物理存储结构:

线性表中的对象除了头结点和尾结点,都只有一个前驱和后继,其中头结头没有前驱,尾结点没有后继.

线性表的物理存储结构有:顺序存储和链式存储结构;其中顺序存储在内存中的分配必须是连续的,而链式存储在内存中的分配可以不是连续的,由上一个结点存储下一个结点的物理地址.

其中顺序存储结构由于在物理地址的存储是连续的,因此知道第一个结点的地址后,其它结点的地址即可通过计算得出,因此获取时的时间复杂度是O(1),但由于删除和插入时,要保持连续性,因此需要在删除时将后继所有结点往前移 ,插入后,将所有后继结点往后移,因此删除和插入时,时间复杂度为O(n).

而链式存储中由于物理地址上不是连续的,因此每个结点需要存储下一个结点的物理地址信息,如果我们要进行查找时,需要从头结点,得到下一个结点的物理地址,然后再继续往下找,直到找到我们需要的第n个结点;因此查找的时间复杂度为O(n);

但删除和插入时,只需要将当前结点的下一个结点,并从其中得到下下个结点的地址,然后将当前结点的下一个结点地址更新为下下个结点的址址即可;而插入时,只需要将当前结点中的存储的下一个结点地址更新为新插入结点地址,新插入的结点的下一个结点地址更新为,当前结点的原来的下一个结点的地址即可,因此删除和插入的时间复杂度为O(1);

在java 语言中LIst和Set接口中的对象均是线性表,其中只有arrayList属于顺序存储结构,其它如linkedlist和treeSet,hashSet均是链式存储结构.以及对应的hashMap也使用链式存储结构!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: