(持续更新中)数据结构(C++版)(第二版)各章重难点

第一章

重点
%%1.数据结构及相关概念
数据结构是指相互之间存在一定关系的数据元素的集合。
数据元素是数据的基本单位。构成数据元素的不可分割的最小单位称为数据项。
数据元素是讨论数据结构时涉及的最小数据单位。
按照视点的不同,数据结构分为逻辑结构和存储结构。
数据结构 反映了数据由哪些数据元素构成,以什么方式构成,以及数据元素之间呈现什么关系。
%%2.数据的逻辑结构和存储结构以及二者之间的关系
逻辑结构是指数据元素之间逻辑关系的整体。分为 集合 线性表(一对一) 树(一对多) 图(多对多)
存储结构又称物理结构,是数据及其逻辑结构在计算机中的表示 分为顺序存储结构和链接存储结构
顺序结构的基本思想是 用一组连续的存储单元依次存储数据元素,数据元素的逻辑关系由存储位置来表示
链接结构的基本思想是 有一组任意的存储单元存储数据元素,数据元素之间的逻辑关系由指针表示
关系:数据的逻辑结构是从具体问题抽象出来的数据模型,是面向问题的,反映了数据之间的关联方式或邻接关系。数据的存储结构是面向计算机的,其基本目标是将数据和其逻辑关系存储到计算机中。为了区别于数据的存储结构,常常将数据的逻辑结构成为数据结构。一种数据的逻辑结构可以用多种存储结构来存储,采用不同的存储结构,其数据处理的效率往往不同。
逻辑结构与数据元素本身的形式、内容无关。例如,多加一个数据项,逻辑关系仍然是呈线性的。
逻辑结构与数据元素的相应位置无关
逻辑结构与所含数据元素的个数无关。
逻辑结构与数据的存储无关
%%3.算法及其特性
算法是对特定问题求解步骤的一种描述,是指令的有限序列。
普通算法的特性
输入(零个或多个输入)输出(一个或多个输出)有穷性(有穷步骤,有穷时间)确定性(指令不存在二义性) 可行性
好的算法的特性
正确性 (对于任何合法的输入,算法都会有正确的结果)
鲁棒性 健壮性 对于错误的输出 算法不会瘫痪
简单性
抽象分级 算法中的每一个逻辑步骤可以是一条简单的指令,也可以是一个模块,通过模块调用完成相应功能。每个模块表示一种抽象,模块内部描述了怎样实现抽象,而模块的名称描述了模块的功能。就和类里面的功能函数是一样的。
高效性 较短的执行时间占用较少的辅助空间
算法设计的一般原则
1.理解问题,明确算法的入口和出口
2.预测所有可能的输入
3.抽象分级 模块化,也就是多些类
4.跟踪代码
%% 4.大O记号
时间复杂度
难点
%%1.抽象数据类型的理解和使用
数据类型是一组值的集合以及定义于这个这个值集上的一组操作的总称
抽象数据类型 abstract data type ADT 是一个数据结构以及定义在该结构上的一组操作的总称。
在设计ADT时,把ADT的定义和实现分开来。定义部分只包含数据的逻辑结构和所允许的操作集合。
一方面,ADT的使用者依据这些定义来使用ADT,即通过操作集合对ADT进行操作;另一方面,ADT的实现者依据这些定义来完成该ADT各种操作的具体实现。
//
ADT (抽象数据类型名)
Data
数据元素之间逻辑关系的定义
Operation
操作1
前置条件:执行该操作前数据所必需的状态
输入:执行此操作所需要的输入
功能:该操作将完成的功能
输出:执行该操作后产生的输出
后置条件:执行该操作后数据的状态
操作2

操作3

endADT

//
%%2.伪代码的理解和使用
%%3.算法的时间复杂度分析
撇开与计算机软硬件有关的因素,影响算法时间代价的最主要因素是问题规模。
问题规模是指输入量的多少
为了客观地反映一个算法的执行时间,可以用算法中基本语句的执行次数来度量算法的工作量
这种衡量效率的方法得出的不是时间量,而是一种增长趋势的度量。也就是,当规模充分大时,算法中基本语句的执行次数在渐近意义下的阶。
基本语句是指执行次数与整个算法的执行次数成正比的语句,是对算法运行时间贡献最大的。
定义:若存在两个正的常数 c和n0,对于任意 n>=n0,都有T(n)<=cf(n),则T(n) = O(f(n));
O记号用来表示增长率的上限。
在计算任何算法的时间复杂度时,可以忽略所有低次幂和高次幂的系数。
常见的时间复杂度
O(log2n)log2n) 如果算法中包含并列循环的时间复杂度,则将并列的时间复杂度相加

你可能感兴趣的:(数据结构)