Q:什么是数据结构?
A:数据结构是研究非数值计算问题的程序设计问题中计算机操作对象以及操作对象之间的关系和操作的学科。
几个概念:
数据:泛指一切能输入到计算机中并被计算机识别和处理的符合的集合。
数据元素:数据的基本单位。
数据项:构成数据元素的不可分割的最小单位。
数据对象:具有相同性质的数据元素集合。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
tips:第一个数据结构指的是数据结构这门课程,这二个数据结构指的是数据元素之间的关系(线性、层次或者图等),有区别的。接下来的数据结构指的都是第二个意思。
数据结构:
定义:DataStructure = (D, S)
D是数据元素的有限集合,S是D上关系的有限集合。这个“关系”是指逻辑上的关系。
数据结构包含三部分:逻辑结构、存储结构和数据运算
逻辑结构
逻辑结构是数据元素之间的逻辑关系,比如:线性关系、树形、图和网络等等。数据的逻辑结构是独立于存储结构之外的
存储结构
数据结构在计算机中的表示就是存储结构,也叫映射、物理结构。就是如何在计算机中表示数据元素之间的关系。一般来说,数据元素的关系在计算机里面有两种不同的表示方法:顺序表示和非顺序表示;对应的存储结构称为顺序存储和链式存储。除此之外,计算机中还有索引存储和散列存储。
数据类型
数据类型
数据类型是一个值的集合和定义在这个值集合上的一组操作的总称。数据类型包含两方面:值和值的操作。
比如c语言里面,假如int为4个字节,那么定义一个int数据类型的变量的含义就是:这个变量的范围在0~65535之间,并且可以加减乘除操作。
数据类型按照“值”的不同可分为原子类型和结构类型,原子类型是“值”不可再分的,比如int、float等,结构类型的“值”可再分,比如c语言定义的struct。
抽象数据类型(ADT)
抽象数据类型和数据类型实质上是同一个概念,ADT定义的是一个数据模型以及定义在该模型上的一组操作。数据类型中的“值”,如int、float等也是一个数据模型。
ADT根据“值”的不同可分为两种类型:原子类型和结构类型。结构类型又可分为固定聚合类型和可变聚合类型。固定聚合类型和可变聚合类型的区别是:可变聚合类型的“值“成分的数目不确定。比如:一个有“5个整数的有序序列”就是一个固定聚合类型;一个“有序的整数序列”就是可变聚合类型,因为没有指明整数的数目。
多形数据类型
“值”的成分不确定但是操作相同的数据类型称为多行数据类型。
算法
算法即对特定问题求解步骤的一种描述。具有五大特性:有穷性、确定性、可行性、输入和输出。
设计一个算法满足四个特性:正确性、可读性、健壮性和效率与低存储量要求。效率与低存储量要求就是要求时空复杂度尽可能低。
度量一个算法的好坏通常有两种方法:事后统计法和事前分析估计法。
事后统计法就是让算法在计算机里面跑一下,记录使用的时间和存储空间。这种方式与跑算法的机器关系很大,因此不推荐。
事前分析估计法就是在算法没跑之前就可大致确定算法性能,能比较两个算法好坏。主要分析算法时间/空间复杂度。
时间/空间复杂度是指随着输入数目规模的增长,算法耗费的时间/额外使用的空间的增长趋势。实际上算法复杂度不仅依赖于问题的规模n,还依赖于输入数据的性质(比如排序算法初始时是否有序)。
Q:为什么时间复杂度可以用某一条或者某几条语句的频度来代替?
A:算法中所有语句的频度之和用T(n)表示,时间复杂度关注的是T(n)的数量级,算法的基本运算(最深层的那一条或者几条语句)的频度用f(n)表示,一般f(n)与T(n)同数量级。因此………………
常见的算法复杂度有:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)……
参考资料
严蔚敏《数据结构》
王道数据结构单科书