简述数据的逻辑结构分类和各自的特点
数据的逻辑结构;线性结构、非线性结构;
线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继
非线性结构:一个结点元素可能对应多个直接前驱和多个直接后继。(树~,图/网~)
###集合、线性结构、树状结构、网状结构/图状结构;
1集合:集合中任何两个数据元素之间都没有逻辑关系,组织形式松散. (确定性,唯一性,无序性)
结构中的数据元素之间除了同属于一个集合外,没有其他的关系
2线性结构:线性结构中的 结点按逻辑关系依次排列形成一个“锁链”.
线性结构中的数据元素之间是一对一的关系
3树状结构:树形结构具有分支、层次特性,其形态有点象自然界中的树
树形结构中的数据元素之间是一对多的关系
4网状结构/图状结构:图状结构中的结点按逻辑关系互相缠绕,任何两个结点都可以邻接
结构中的元素之间是多对多的关系
简述数据的存储结构分类及特点
数据的存储结构:顺序结构、链式结构、索引结构、散列结构;
·顺序结构:
1是利用数据元素在存储器中的相对位置来表示数据元素之间的逻辑顺序(数据元素依次存放)
2顺序存储结构是把数据元素放在地址连续的存储单元中,程序设计中使用数组类型来实现。(逻辑相邻物理相邻)
优点:是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间(存储密度大)。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址
缺点:插表示关系能力弱;维护关系困难(逻辑关系发生变化,物理上难同步);入和删除操作需要移动元素,效率较低
·链式结构:数据元素的存储对应的是不连续的存储空间,每个存储节点对应一个需要存储的数据元素
每个结点是由数据域和指针域组成。 元素之间的逻辑关系通过存储节点之间的链接关系反映出来
1利用结点中指针来表示数据元素之间的关系。
2把数据元素存储在任意的存储单元里,这组存储单元可以是连续的,也可以是连续的,程序设计中使用指针类型来实现。(逻辑相邻物理不一定相邻)
特点:
1、比顺序存储结构的存储密度小 (每个节点都由数据域和指针域组成,所以相同空间内假设全存满的话顺序比链式存储更多)。
2、逻辑上相邻的节点物理上不必相邻。
3、插入、删除灵活 (不必移动节点,只要改变节点中的指针)。
4、查找结点时链式存储要比顺序存储慢。
·索引结构:
特点:存储空间是多段连续空间,在存储结点信息的同时,还建立附加的索引表,索引表由若干索引项组成。
优点:顺序和链式结合;数据检索速度快,保证数据的唯一性。
缺点:创建索引和维护索引需要时间,而且索引也会占用一定的物理空间;对数据增删查改的同时也要对索引进行维护。
·散列结构:
特点:又称散列存储,数据元素的存储位置和关键码(在数据结构中,指的是数据元素中能起标识作用的数据项)之间有着确定对应关系,其基本思想是由结点的关键码值决定结点的存储地址,除了用于查找外还可以用于存储,存储空间是连续空间。(有的HASH函数为取模函数)
优点:利用数据的某一特征访问和存储,访问速度快,在O(1)内遍历元素。
缺点:好的HASH很难;有时会产生冲突。