1.什么是数据结构
一般来说,用计算机解决一个具体问题时候,首先要具体问题抽象出一个适当的数学模型,然后设计算法,编程序,进行调试,直到得到最终的答案。现在高级编程语言会将一些底层需要的数据结构进行封装,比如java的hashmap,以前的1.7版本,采用了数组和链表的组合方式,为了更加的追求效率,采用了红黑树的方式,这里面也是数据结构的运用,导致了效率的增强。再比如redis里面的常见的几种数据类型,底层实现还是通过数据结构的完成,所以了解数据结构是非常重要的一环。
2.专业术语:
数据:数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被计算机程序处理的符号的集合。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:有独立含义的数据最小单位,也称域。
数据类型:是一个值的集合和定义在此集合上一组操作的总称。
抽象数据类型:ADT,指一个数学模型以及定义在该模型上的一组操作。通常用数据对象、数据关系、基本操作集这样的三元组来表示。有数据抽象和数据封装两个重要特性。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。包括(逻辑结构、存储结构和数据的运算)。
数据的逻辑结构:指数据元素之间的逻辑关系。包括集合、线性结构、树形结构、图状结构或网状结构。
数据的存储结构:指数据结构在计算机中的表示,也成物理结构。主要有顺序存储、连接存储、索引存储、散列存储。
算法:对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。有5个重要特性(有穷性、确定性、可行性、输入、输出)
算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求。
时间复杂度:一般情况下,算法中基本操作的重复次数是问题规模n的某个函数f(n),算法的时间度量记作T(n)=O(f(n)),表示随着问题规模n的增大,算法执行时间增长率和f(n)的增长率相同,称为时间复杂度。
空间复杂度:S(n)定义为该算法所耗费的存储空间,是问题规模n的函数。
数据结构的两个层次
逻辑结构:
数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。
存储结构(物理结构):
数据元素及其关系在计算机存储器中的存储方式。
3.逻辑结构
逻辑结构
集合——数据元素间除“同属于一个集合”外,无其它关系
线性结构——一个对一个,如线性表、栈、队列
树形结构——一个对多个,如树
图形结构——多个对多个,如图
4.存储结构
顺序存储结构——借助元素在存储器中的相对位置来表示
数据元素间的逻辑关系
链式存储结构——借助指示元素存储地址的指针表示数据
元素间的逻辑关系
数据类型
定义:在一种程序设计语言中,变量所具有的数据种类
C语言:
基本数据类型: char int float double void
抽象数据类型
更高层次的数据抽象
由用户定义,用以表示应用问题的数据模型
由基本的数据类型组成, 并包括一组相关的操作
抽象数据类型
抽象数据类型可以用以下的三元组来表示:
ADT = (D,S,P)
数据对象 D上的关系集 D上的操作集
ADT抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作 :<基本操作的定义>
} ADT抽象数据类型名
算法:
算法的特性:
输入:有0个或多个输入
输出:有一个或多个输出(处理结果)
确定性:每步定义都是确切、无歧义的
有穷性:算法应在执行有穷步后结束
可行性:算法中的所有操作都可以通过已经实现的基本操作运算执行
算法分析:时间复杂度
算法中基本语句重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:
T(n)=O(f(n))
表示随着n的增大,算法执行的时间的增长率和f(n)的增长率相同,称渐近时间复杂度。
分析算法时间复杂度的基本方法:
找出语句频度最大的那条语句作为基本语句
计算基本语句的频度得到问题规模n的某个函数f(n)
取其数量级用符号“O”表示
时间复杂度是由嵌套最深层语句的频度决定的
5.总结
好多概念还是需要自己看书理解,书面语抽象,虽然我大二学的数据结构,我还是觉得严蔚敏的数据结构对入门数据结构不够友好,不过有好多优秀的博客可以参考。