浅谈概念
我觉得数据结构是需要理论和实践相结合的,其实我很不愿意听到说理论没有用的话,我觉得知识是需要成体系的,你连一个面都没有,为什么就能成长的很厉害?当然纯理论肯定是不够的,所以其实还需要配合一定的实践操作,我觉得读书就是一个修养问题,下面就先简单的介绍下其基本的概念
数据结构其实是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合,数据其实不仅仅是包括整型、实型等数值类型,还包括字符及图像、视频等非数值类型
数据元素就是组成数据的、有一定意义的基本单位,比如说在人类这个群体当中,人就是数据元素,在禽类当中,牛、马、猪等动物就是禽类的数据元素
关于数据项的概念其实就是一个数据元素可以由若干个数据项组成,比如说人这样的数据元素,可以有眼、耳、鼻、嘴等数据项也可以有姓名、年龄、性别等数据项
数据项是数据不可分割的最小单位,但是数据元素才是数据结构当中建立数据模型的着眼点
数据对象:指的就是数据元素具有相同数量和类型的数据项的集合,是数据的子集
数据结构当中的结构的含义其实简单的理解就是关系的意思,比如分子结构说的其实就是组成分子的原子之间的排列方式,结构其实就是指各个组成部分相互搭配和排列的方式,在现实世界当中其实不同的数据元素之间不是独立的,而是存在特定的关系,我们将这些关系将它称之为结构
数据结构其实就是指的是相互之间存在一种或多种特定关系的数据元素的集合
数据、数据对象、数据元素、数据项的关系如下所示
根据视点的不同,可以把数据结构分为逻辑结构和物理结构,下面就简单的了解下
逻辑结构
逻辑结构是指数据对象当中数据元素之间的相互关系,比如说我人与人之间的关系是什么,需要进行逻辑表示,我们的言语说的你与别人之间的关系其实就是一种逻辑表示形式
逻辑结构通常可以分为下面四种
- 1、集合结构:集合结构当中的数据元素除了同属于一个集合外,它们之间没有其他的关系
2、线性结构:线性结构当中的数据元素之间是一对一的关系
3、树形结构:树形结构当中的数据元素之间可以存在一种一对多的层次的关系
4、图形结构其实就是为了表示数据元素是多对多的时候去设计的
逻辑结构其实是针对具体问题的,是为了去解决某个问题,在对问题理解的基础上,去选择一个合适的数据结构表示数据元素之间的逻辑关系,我觉得可以这么理解逻辑结构只是抽象出来的概念方便我们去解决问题的
物理结构
物理结构其实就是指数据的逻辑结构在计算机中的存储形式,也就是说物理结构我们是需要去实现出来的
物理结构可以分为顺序存储结构和链式存储结构
其中顺序存储结构就是把数据元素存放在地址连续的存储单元当中,其数据间的逻辑关系和物理关系是一致的
链式存储结构是吧数据元素存放在任意的存储单元里面,这组存储单元可以是连续的可以是不连续的,我们只需要去通过指针就可以去寻找它
总结一下:其实逻辑结构就是面向问题的,而物理结构是面向计算机的,其基本的目的就是将数据及其逻辑关系存储到计算机内存当中
在这里再补充下抽象数据类型,讲道理对于这个感觉自己的体会又深了一层,数据类型就是指一组性质相同的值的集合及定义在此集合上的一些操作的总称
数据类型是按照值的不同来进行划分的,在高级语言当中,每个常量、变量和表达式当中都有各自的取值范围,类型就用来说明变量或表达式的取值范围和所能进行的操作
对于抽象这个词的理解,我觉得有一段话写的很好就是抽象就是指抽取出事物具有的普遍性的本质,抽出问题的特征而忽略非本质的细节,是对具体事务的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必须的信息
对于抽象数据类型来讲,其实就是指一个数学模型及定义在该模型上的一组操作也就是比如说我们定义一个point的结构体,这个就是一个抽象数据类型,能够方便我们去解决点之间的换算,比如我们定义一个学生类,然后这个学生可以做各种操作,其实也是如此
其实抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后会去建立一个计算机能处理的数据模型,并且把每个功能模块的实现细节作为一个独立的单元就比如说类当中定义的每一个方法,然后把具体实现过程隐藏起来就是说我通过类创建的对象,在外界调用方法的时候其实可以直接进行调用而不用关注具体的细节,因为类当中已经定义好了