1.逻辑结构和物理结构的定义
首先数据结构分为两个层次:逻辑结构 和 物理结构(存储方式) 。
- 逻辑结构是用来描述数据元素之间的逻辑关系,是一个抽象概念,与数据的实际存储无关,独立于计算机存在。
- 物理结构是数据元素及其相互之间的关系在计算机存储器中的存储方式,简而言之物理结构就是实际的物理存储方式。
- 总结:逻辑结构是数据结构的抽象,物理结构是数据结构的实现,两者综合起来才建立了数据元素完整的结构关系,
只有逻辑结构,数据无法实际存储;只有物理结构,数据不知道该用哪种合适的方式存储。
逻辑结构就好比是理论思想,物理结构就好比是对理论思想的具体实践,只有理论思想没有具体实践,思想永远只是空中楼阁没有实际的意义。
而没有理论思想的指导,只知道埋头傻干,就好比是无头苍蝇乱撞。因此面对一个需求,首先要先分析他的逻辑结构,然后依据逻辑结构找到适合实现该逻辑结构(理论思想)的物理存储方式。
2.逻辑结构和物理结构的种类
明确了逻辑结构和物理结构的定义,再来讲讲逻辑结构和物理结构的种类。
其中逻辑结构有两种划分方式:
按照第一种划分方式(划分依据是数据元素之间是否是一对一的关系),逻辑结构可以划分为两种:线性结构和非线性结构。
- 线性结构:有且仅有一个开始节点和一个终端节点,并且除了头尾,每个数据元素都有一个直接前驱和直接后继,是1对1的关系。
常见的线性结构有:线性表、栈、队列、串,注意:这四种都是逻辑结构,且各有特点,队列是队列,线性表是线性表,栈是栈,他们是平级的概念,你不能说队列和栈是线性表!!!!! 另外数组是物理结构中顺序存储结构的实现,跟上面这4个逻辑结构不是一码事。- 非线性结构:一个节点可能有多个直接前驱和后继,比如:树、图, 注意:树、图也是逻辑结构!!!
第二种其实就是在第一种分类的基础上进一步细分,在此不做详细描述
物理结构分为四种:
- 顺序存储结构
- 链式存储结构
- 索引存储结构
- 散列存储结构
在此只讲一下容易产生歧义的第一种
顺序存储结构:用一组连续的存储单元依次存储数据元素,C语言中用数组实现顺序存储结构,
超级注意!!顺序存储结构不等于线性表,因为线性表是逻辑结构,而顺序存储结构是物理结构,二者根本不在一个层次,因此不能放在一起比较。
而且顺序存储结构不仅能实现线性表、队列、栈(线性结构),还能实现树和图(非线性结构),即数组能实现的逻辑结构不止一种,线性和非线性的逻辑结构都可以通过数组实现!!
顺序表是比较特殊的一种,它即描述了逻辑结构也描述了存储结构,用数组实现线性表就是顺序表。
线性表,顺序表,和链表之间的区别和联系
- 线性表:逻辑结构, 就是对外暴露数据之间的关系,不关心底层如何实现,数据结构的逻辑结构大分类就是线性结构和非线性结构而顺序表、链表都是一种线性表。
- 顺序表、链表:物理结构,他是实现一个结构实际物理地址上的结构。比如顺序表就是用数组实现。而链表用指针完成主要工作。不同的结构在不同的场景有不同的区别。