概论
1.数据结构在计算机软件和计算机应用中的作用
瑞士计算机科学家沃思提出:算法+数据结构=程序。算法是对数据运算的描述,而数据结构包括逻辑结构和存储结构。由此可见,程序设计的实质是针对实际问题选择一种好的数据结构和设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。
2.基本概念和常用术语
数据:描述客观事物的数、字符以及能输入计算机中并被计算机处理的符号的集合。(数据是信息的载体)
数据元素:数据的基本单位。一个数据元素可以由若干个数据项组成,数据项是具有独立含义的最小标识单位。数据对象是具有相同性质的数据元素的集合。
数据对象:具有相同性质的数据元素的集合,是数据的一个子集。
数据结构:数据元素之间的逻辑结构、存储结构及其数据的抽象运算,即按某种逻辑关系组织起来的一组数据,再按一定的存储表示方式把他们存储在计算机的存储器中,并在这些数据上定义一个运算的集合。
(数据结构指的是数据元素之间的相互关系,即数据的组织形式。结构中的数据元素称为结点。)
数据类型:是一个值的集合和定义在这个值集上的一组操作的总和。
3.数据结构包含的内容
数据结构一般包括以下三方面内容:数据的逻辑结构、数据的存储结构、数据的运算
数据的逻辑结构
描述:数据的逻辑结构是从逻辑关系上描述数据,与数据元素的存储结构无关,是独立于计算机的。
数据的逻辑结构分类: 线性结构和非线性结构。
线性结构的特征:数据元素(结点)之间存在着一对一的关系,且结构中仅有一个开始结点和一个终端结点,其余结点都是仅有一个直接前趋和一个直接后趋。
非线性结构的特征:数据元素之间存在着一对多或多对多的关系,即一个结点可能有多个直接前趋和多个直接后趋。树形结构、图形结构、网状结构
数据的存储结构(物理结构)
描述:数据元素及其关系在计算机内的存储方式;
数据的存储结构是数据在计算机中的存储表示(映像),亦称为数据的物理结构。它包括数据元素和关系的表示,是依赖计算机语言的。
数据的运算(对数据元素施加的操作)
描述:数据的运算是定义在数据的逻辑结构上的。
最常用的运算:检索、插入、删除、更新、排序
4.数据的四种基本存储方法
顺序存储、链接存储、索引存储、散列存储
(1)顺序存储:把逻辑上相邻的结点存储在物理位置上也相邻的连续存储单元里,通常借助程序设计语言的数组描述。主要应用于线性的数据结构。
(2)链接存储:用一组不一定连续的存储单元存储逻辑上相邻的元素,元素间的逻辑关系是由附加的指针域表示的。通常借助于程序语言的指针来描述。
(3)索引存储:在存储元素信息的同时,还建立附加的索引表,索引表由若干索引项组成。关键字是能唯一标识一个元素的一个或多个数据项的组合。
(4)散列存储:该方法的基本思想是:根据元素的关键字直接计算出该元素的存储地址。
5.算法必须满足5个准则
1) 输入,0个或多个数据作为输入
2) 输出,产生一个或多个输出
3) 有穷性,算法执行有限步后结束
4) 确定性,每一条指令的含义都必须明确,无二义性
5) 可行性,算法是可行的。即算法中描述的操作都可以通过有限次的基本运算来实现。
算法与程序的区别:程序必须依赖于计算机程序语言,而一个算法可用自然语言、计算机程序语言、数学语言或约定的符号语言来描述。目前常用的描述算法语言有两类:类Pascal和类C。
6.评价算法的优劣
算法的"正确性"是首先要考虑的。此外,主要考虑如下三点:
② 执行算法所耗费的时间,即时间复杂性;
② 执行算法所耗费的存储空间,主要是辅助空间,即空间复杂性;
③ 算法应易于理解、易于编程,易于调试等,即可读性和可操作性。 以上几点最主要的是时间复杂性,时间复杂度常用渐进时间复杂度表示。
算法求解问题的输入量称为问题的规模,用一个正整数n表示。
常见的时间复杂度按数量级递增排列依次为:常数阶0(1)、对数阶0(log2n)、线性阶0(n)、线性对数阶0(nlog2n)、 平方阶0(n2)立方阶0(n3)、…、k次方阶0(nk)、指数阶0(2n )和阶乘阶0(n!)。
一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数,它包括存储算法本身所占的存储空间、算法的输入输出数据所占的存储空间和算法在运行过程中临时占用的存储空间。