第一章:数据结构之绪论
1.1、介绍
早期计算机主要是用于进行数值计算,随着发展,计算机不仅仅数值计算,还可以用于非数值计算,例如:字符、表格、图像等。
数据结构就是研究如何组织、处理这些数据。
数据结构定义:数据结构是一门研究非数值计算程序设计中操作对象,以及这些操作对象之间的关系和操作的学科。
1.2、基础概念
(1)数据
什么是数据?对于计算机而言,任何能够输入计算机中,并且能够被计算机处理的符号,都称为数据,例如:数值,字符,图像,声音等等,都属于数据。
数据:所有能够输入计算机中并且被计算机所处理的符号总称。
(2)数据元素
什么是数据元素?
数据元素是数据的基本单位。
数据元素也可以称为数据记录。
例如:学生信息表表中,一个学生信息就是数据元素。类似一张数据表中的一条记录。
(3)数据项
数据项是组成数据元素的最小单位。
数据项是独立的,不可再分割的最小单位。
例如:一个学生信息中,包含:姓名,年龄,班级,这些都是不能再细分了的内容。数据项就类似于学生信息表中的一个字段。
(4)数据对象
数据对象,具有相同性质的数据元素的集合。
说白了,就是很多个相同性质的数据元素组成的。
例如:一个学生信息表,就可以看作是一个数据对象,表中每一条记录都是数据元素。
(5)数据结构
数据结构,相互之间存在一种或者多种特定关系的数据元素的集合。
简单理解:就是数据元素之间的关系,就称为结构。结构就是指关系。
1.2、数据结构
数据结构分为:逻辑结构、存储结构。
(1)逻辑结构
逻辑结构,指得是数据元素之间的关系。
数据元素之间通常有如下四种关系:
集合结构:属于同一个集合,具体没啥关系。
线性结构:存在一对一的关系。
树结构:存在一对多的关系。
图结构(网状结构):存在多对多的关系。
线性结构
线性结构
非线性结构
集合结构
树结构
图结构(网状结构)
线性结构常见的有如下:
线性表
栈和队列
串
数组
广义表
非线性结构常见的有如下:
树
二叉树
有向图
无向图
(2)存储结构
存储结构,也称为物理结构,它指得是数据元素在计算机内存中是如何存储的。
一般数据在计算机内存中,有如下两种方式存储:
顺序存储:分配一整块连续的内存空间,按照顺序将数据元素保存在计算机中。
链式存储:内存空间可以不连续,只要记录下一个节点的内存空间地址即可。
1.3、数据类型
数据类型(Data Type):是一个值的集合和定义在这个值集合上面的一组操作的总称。
数据类型是高级语言中的概念,目的是为了方便操作各种数据。
例如:C语言中的整型,浮点型,Java中的布尔型,等等。
1.4、抽象数据类型
抽象数据类型(Abstract Data Type,ADT),一般是用户自定义的数据类型。
可以理解为:高级语言中的类。
1.5、算法和算法分析
(1)算法
什么是算法?
算法就是为了解决某一类问题而组成的一个有限长的操作序列集合。
算法的五要素
有穷性:一个算法的执行步骤是有限的。
确定性:算法中每一个指令都是确定的,不存在二义性。
可行性:算法可以解决这个问题。
输入:0个或多个输入。
输出:1个或多个输出。(如果算法没有输出,那这个算法没有任何意义)
评价算法的四方面
正确性:能够得出正确的结果。
可读性:代码易于理解。
健壮性:出现错误率低。
高效性:执行效率高
(2)算法复杂度
一个算法的优劣,可以通过复杂度来判断。
算法的复杂度分为两类:
时间复杂度:执行多长时间。
空间复杂度:占用多少内存空间。
(2.1)时间复杂度
复杂度,就需要找出算法的问题规模和语句频度。
问题规模:需要执行多少次,一般可以通过是否有循环判断、递归、迭代等等。
语句频度:一个指令重复执行的次数。
复杂度采用大O表示法。(下面复杂度,从小到大排列)
常量复杂度:O(1)
对数复杂度:O(logn)
线性复杂度:O(n)
线性对数复杂度:O(nlogn)
平方复杂度:O(n^2)
立方复杂度:O(n^3)
指数复杂度:O(2^n)
(2.2)空间复杂度
和时间复杂度类似,都是采用大O表示法,程序中占用的内存空间大小和问题规模n的关系。
以上,就是数据结构相关的基础概念介绍。
这是我的第105篇文章,感谢您的阅读。