欢迎转载和引用,若有问题请联系 Email : lihn1011@163.com QQ:2279557541
不知不觉,程序员这一行已经做了10年了,博客换了很多个程序写了无数多,眼看就已经到了而立之年,再次拿起了数据结构的书,打算静下心来再看一遍,为了加深印象,顺手写下些博客算是留念吧。另外该系列中参考了大量陈杰老师的《大话数据结构》中的内容,在此表示衷心的感谢。
话说,其实我真的不知道如何去定义什么是数据结构。
首先我先说下我的理解其实我理解的数据结构,就是将数据按照某种关系加以联系,让其能够高效率或者简单的实现某种操作。
然后在引用下百度知道对数据结构的描述
数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为: Data_Structure=(D,R) 其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。
那么数据和数据之间的联系究竟是什么呢?
数据和数据之间的联系,其实分为两种,一种是逻辑上的结构,一种是物理上的结构。
集合结构
指的是数据之间的联系除了属于同一个集合外,没有其他任何的联系,如图所示 图中可以看出来,各个元素之间除了都在大圆圈内,就没有别的任何联系了。
线性结构
真不知道该如何定义这个结构。。。先上图吧 看着这个图应该很简单,貌似就是一堆数据有序的进行排队的感觉,有第一个,也有最后一个。其实在我心里这个就是定义了,然后我再把《大话数据结构》中定义的原文发出来: “线性结构:线性结构中的数据元素之间是一对一的关系。”
树形结构之所以叫树形结构,就是因为这个图看起来就像一颗倒着的树。而属性及结构的特点通过图也可以看出来,其有根节点,就是最上面那个节点。而各个元素之间的关系,就像是树干与树干上的树枝的关系。是一种一对多的关系。
图形结构
图形关系就是一个更复杂的关系了,貌似各个数据元素之间都有可能是有联系的,是一种多对多的关系。
总结
简单的总结下各个逻辑结构的区别就是 集合 —–元素间无关系 线性结构—–元素间的关系为一对一的关系 树形结构—–元素间的关系为一对多的关系 图形结构—–元素间的关系为多对多的关系
物理结构有两种分类方式
第一种分类将物理结构分为(《大话数据结构》书中的分类方式) 1、顺序存储结构 2、链式存储结构第二种分类将物理结构分为 1、顺序存储结构 2、链式存储结构 3、索引存储结构 4、散列存储结构由于我认为其实索引存储结构和散列存储结构都属于特殊的链式存储结构,所以我这里采用第一种分类方式。 其中 顺序存储结构,其实就是说存储的数据在计算机内存中是连续且有顺序的排列的,这点涉及到一些内存管理的内容,如果你了解C/C++的话,应该对数据在内存结构中的排列方式会有比较深的理解。其他语言的话,只要简单理解下应该就没有问题了。 链式存储结构,就是说存储的数据在内存上不是连续的,每个数据通过一个“链”将各个数据联系起来,所谓的“链”在C/C++中比较常见的就是使用指针。
《大话数据结构》 陈杰
新闻热点
疑难解答