数据结构是一门研究非数值计算程序设计中操作对象,以及这些对象之间的关系和操作的学科。
基本概念和术语:
- 数据:描述客观事物属性的数、字符以及能输入到计算机且能被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原材料。
- 数据元素:数据的基本单位,通常作为一个整体进行考虑和处理,用于完整的描述一个对象。如:一条学生记录。
- 数据项:组成数据元素的不可分割的最小单位。如:学生记录中的姓名、学号、性别等。
- 数据对象:性质相同的数据元素的集合,数据的一个子集。
- 数据结构:相互之间存在着一种或多种特定关系的数据元素的集合,包括逻辑结构、存储结构、数据的运算。结构就是指数据元 素之间的关系。
- 数据类型:一个值和定义在此集合上的一组操作的总称。原子类型(其值不可再分)、结构类型(其值可以再分为若干分量)、抽象数据类型。
- 抽象数据类型:由用户定义、表示应用问题的数学模型,以及定义在模型上的一组基本操作的总称。数据对象、其关系的集合、其基本操作的集合。
- 多型数据类型:多型就是数据元素的类型不确定。如一个栈,可以是char,也可以int做数据类型;而字符串,就只能是char。
- 存储密度:数据本身占用的存储空间/结点结构占用的存储空间。顺序表存储密度为1,链表存储密度小于1。
逻辑结构和存储结构:
- 逻辑结构:指数据元素之间的逻辑关系,与数据的存储无关,是独立于计算机的。分为线性结构(线性表)和非线性结构(集合、树形结构、图状结构)。
- 存储结构:又称物理结构,指数据结构在计算机中的存储表示(映像),包括数据元素的表示和关系的表示,它依赖于计算机语言。存储结构主要有:顺序存储、链式存储、散列存储(Hash存储)、索引存储。
- 数据的运算:包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的基本操作步骤。
算法:
- 定义:是对特定问题求解步骤的描述,是指令的有限序列,每条指令表示一个或多个操作步骤。
五大特性:
- 有穷性:算法的步骤有穷,每一步的执行时间有穷。
- 确定性:算法中每一条指令必须有确定的含义,不会产生二义性,对于相同的输入只能有相同的输出。
- 可行性:算法中的操作都可以通过已经实现的基本运算执行有限次来实现。
- 输入:一个算法有零个或多个输入。
- 输出:一个算法有一个或多个输出。必须有输出。
四大标准:
- 正确性:能正确的解决问题。
- 可读性:首先是便于人们理解和相互交流,其次是机器的可执行性。难懂的算法易于隐藏错误,难于调试和修改。
- 健壮性:输入非法数据时,算法能适当地做出正确反应或进行相应处理,不会产生一些莫名其妙的输出结果。
- 高效性:时间高效(算法设计合理,执行效率高,用时间复杂度来度量)和空间高效(占用存储容量合理,用空间复杂度来度量)。
渐进时间复杂度:T(n) = O(f(n))
- 采用事前分析估算法,不是事后统计法。
- 语句频度T(n)是指该语句在算法中被重复执行的次数。问题规模n是指算法求解问题输入量的多少。
- 时间复杂度取决于:问题规模和待输入数据的性质。
- 基本语句:重复执行次数和算法的执行时间成正比的语句,一般是最深层循环内的语句。
- 一般考虑最坏时间复杂度,运行时间不会比它更长,所以是上界。
- 平均时间复杂度:指输入实例以等概率出现的情况,算法计算量的加权平均值。
- O(f(n))+O(g(n))= O(max(f,g));O(f(n)) · O(g(n))= O(f · g)。
- O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
- 常量阶:算法的执行时间是一个与问题规模n无关的常数,即使常数再大,算法的时间复杂度都是O(1)。线性阶、平方阶、立方阶、对数阶。
渐进空间复杂度:S(n) = O(f(n))
- 一个程序在执行时,除了需要存储空间来存放本身所用的指令、常数、变量和输入数据之外,还需要一些对数据进行操作的辅助存储空间。
- 算法原地工作是指算法所需要的辅助空间为常量,即O(1)。
- 同一个算法,实现语言的级别越高,执行效率越低。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。