数据(data):在计算机中表示所有能输入计算机并被计算机程序处理的符号的总称。
数据元素(data element):是数据的基本单位,通常被计算机作为一个整体进行处理和考虑。
数据项(data item):数据项是数据的不可分割的最小单位。通常,一个数据元素由若干数据项组成。举例,若书的书目信息为一个数据元素,那么书目信息中的每一项(如书名,书的作者名等)都可作为一个数据项。
数据对象(data object):是相同性质数据元素的集合,是数据的一个子集。
所以在同一度量的情况下,上述概念有如下包含关系:数据项 < 数据元素 < 数据对象 < 数据。
结构(structure):数据元素互相之间的关系成为结构。通常有下列四种基本结构:
(1)集合 结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。
(2)线性结构 结构中的数据元素之间存在一对一的关系。线性表
(3)树形结构 结构中的数据元素之间存在一对多的关系。树
(4)图状结构/网状结构 结构中的数据元素之间存在多对多的关系。
数据结构(data structure,ds,之前非科班的我还没注意过大佬们说ds大题的时候,ds就是指数据结构):
互相之间存在一种或多种特定关系的数据元素的集合。数据结构是一个二元组(D,S),其中D是数据元素的有限集,S是D上关系的有限集。
逻辑结构:结构定义中的“关系”描述的数据元素之间的逻辑关系,因此又称为数据的逻辑结构。简单理解,上面定义的结构即为数据的逻辑结构。
物理结构/存储结构:数据结构在计算机中的表示(又称映象),称为数据的物理结构,或者称为存储结构。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映射和非顺序映射,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
数据类型(data type):一个值的集合和定义在这个值集上的一组操作的总称。
原子类型:原子类型的值是不可分解的,例如C语言中的基本类型(整型,实性等)
结构类型:结构类型的值是由若干成分按某种结构组成的,因此是可分解的,它的成分可以是非结构的,也可以是结构的。
抽象数据类型(Abstract Data Type):指一个数学模型以及定义在该模型上的一组操作。抽象数据类型可用以下三元组表示(D,S,P),其中D表示数据,S表示D上的关系集,P表示对D的基本操作。
算法(algorithm):是对特定问题求解步骤的一种描述,是指令的有限序列,其中,每一条指令表示一个或多个操作。
算法具有的五个重要特性:
(1)有穷性。有限步骤,有限时间内完成。
(2)确定性。对相同的输入只能得到相同的输出。
(3)可行性。能够通过已经实现的基本运算执行有限次来现实。
(4)输入。0个或多个
(5)输出。1个或多个
好的算法应该达到的目标:
(1)正确性(correctness)
(2)可读性(readability)
(3)健壮性(robustness)
(4)效率与低存储量的需求
算法效率的度量
频度(frequency count):语句的频度是指该语句重复执行的次数。
时间复杂度(渐进时间复杂度 / asymptotic time complexity):
算法中基本操作(固有数据类型的操作)重复执行的次数是问题规模n的某个函数f(n),
算法的时间度量(时间复杂度)记作T(n) = O(f(n))。即,存在某个实数C,使得有0<= T(n) <= Cf(n)。
空间复杂度(space complexity):
算法所需存储空间的度量。记为S(n)=O(f(n))。
线性结构:有唯一的“第一个”元素以及“最后一个”元素,且除第一个元素外,每个元素只有一个前驱,除最后一个元素外,每个元素只有一个后继。
线性表(linear_list)一个线性表是n个数据元素的有限序列。
栈(stack)限定仅在表尾进行插入或者删除操作(后进先出 / last in first out / LIFO)的线性表。表头-栈顶,表尾-栈底。
队列(queue)一种先进先出(first in first out,缩写为FIFO)的线性表。允许插入的一端叫做队尾(rear),允许删除的一端称为对头(front)。