1.59k likes | 1.72k Views
二级公共基础知识. 第一章 数据结构基础. 内容提要. 算法 : 算法的基本概念、算法复杂度 数据结构的基本概念:什么是数据结构、 数据结构的图形表示、 线性结构与非线性结构 线性表及其顺序存储结构:线性表的基本概念、 顺序存储结构、插入运算、删除运算 栈和队列:栈及其基本运算、队列及其基本运算 线性链表:基本概念、基本运算、循环链表及其基本运算 树与二叉树:树的基本概念、二叉树及其基本性质、 二叉树的存储结构、二叉树的遍历 查找技术: 顺序查找、二分法查找 排序技术:交换类排序法、 插入类排序法、选择类排序法. 1.1 算法. 1.1.1 算法的基本概念.
E N D
二级公共基础知识 第一章 数据结构基础
内容提要 • 算法:算法的基本概念、算法复杂度 • 数据结构的基本概念:什么是数据结构、 数据结构的图形表示、 线性结构与非线性结构 • 线性表及其顺序存储结构:线性表的基本概念、 顺序存储结构、插入运算、删除运算 • 栈和队列:栈及其基本运算、队列及其基本运算 • 线性链表:基本概念、基本运算、循环链表及其基本运算 • 树与二叉树:树的基本概念、二叉树及其基本性质、 二叉树的存储结构、二叉树的遍历 • 查找技术: 顺序查找、二分法查找 • 排序技术:交换类排序法、 插入类排序法、选择类排序法
1.1.1 算法的基本概念 • 算法是解题方案的准确而完整的描述,它不等于程序,也不等计算方法。 • 1.算法的基本特征 • 可行性(effectiveness) • 确定性(definiteness) • 有穷性(finiteness) • 拥有足够的情报 • 2.算法的基本要素 • 算法中对数据的运算和操作 • 算术运算:包括加、减、乘、除等) • 逻辑运算:包括“与”、“或”、“非”等运算) • 关系运算:包括“大于”、“小于”、“等于”、“不等于”等) • 数据传输:包括赋值、输入、输出等操作 • 算法的控制结构(描述算法的工具传统流程图、)
算法的控制结构 描述算法的工具: 传统流程图、N-S结构化流程图、算法描述语言 算法一般可以用顺序、选择和循环三种控制结构组合而成。
1.1.1 算法的基本概念 • 3.算法设计的基本方法 • 列举法 • 归纳法 • 递推 • 递归 • 减半递推技术 • 回溯法
1.1.2 算法复杂度 • 算法复杂度:时间复杂度、空间复杂度 • 1.算法的时间复杂度 • 执行算法所需要的计算工作量 • 与下列因素无关: • 书写算法的程序设计语言 • 编译产生的机器语言,代码质量 • 机器执行指令的速度 • 问题的规模
1.1.2 算法复杂度 • 问题的规模函数 算法的工作量=f(n) • 算法中基本操作重复执行的频率T(n),是问题规模n的某个函数f(n),记作: T(n)=O(f(n)) • 记号“O”读作“大O”。表示随问题规模n的增加,算法执行时间的增长率和f(n)相应增加。 • 常见算法复杂度: • O(1):常数阶 O(n):作线性阶 O(n2):平方阶 • O(n3):立方阶 O(logn):对数阶 O(2n):指数阶
1.1.2 算法复杂度 • n×n矩阵相乘算法: • 时间复杂度为O(n3)。
1.1.2 算法复杂度 • 分析算法的工作量两种方法: • 平均性态 A(n)=∑p(x)t(x)x∈Dn • 最坏情况复杂性 所谓最坏情况分析,是指在规模为n时,算法所执行的基本运算的最大次数。它定义为W(n)=max{t(x)}x∈Dn
例1.2 采用顺序搜索法,在长度为n的一维数组中查找值为x的元素。 • 例1.2 采用顺序搜索法,在长度为n的一维数组中查找值为x的元素。即从数组的第一个元素开始,逐个与被查值x进行比较。基本运算为x与数组元素的比较。 首先考虑平均性态分析。 设被查项x在数组中出现的概率为q。当需要查找的x为数组中第i个元素时,则在查找过程中需要做i次比较,当需要查找的x不在数组中时(即数组中没有x这个元素),则需要与数组中所有的元素进行比较。即 i ,1≤i≤nti= n,i=n+1 其中i=n+1表示x不在数组中的情况。 • 其中i=n+1表示x不在数组中的情况。 如果假设需要查找的x出现在数组中每个位置上的可能性是一样的,则x出现在数组中每一个位置上的概率为q/n(因为前面已经假设x在数 组中的概率为q),而x不在数组中的概率为1-q。即q/n,1≤i≤npi= 1-q,i=i+1 其中i=n+1表示x不在数组中的情况
例1.2 采用顺序搜索法,在长度为n的一维数组中查找值为x的元素。 • 因此,用顺序搜索法在长度为n的一维数组中查找值为x的元素,在平均情况下需要做的比较次数为n+1 nA(n)=∑piti=∑(q/n)i+(1-q)n=(n+1)q/2+(1-q)ni=1 i=1 如果已知需要查找的x一定在数组中,此时q=1,则A(n)=(n+1)/2。这就是说,在这种情况下,用顺序搜索法在长度为n的一维数组中查找值为x的元素,在平均情况下需要检查数组中一半的元素。 如果已知需要查找的x有一半的机会在数组中,此时q=1/2,则A(n)=[(n+1)/4]+n/2≈3n/4 这就是说,在这种情况下,用顺序搜索法在长度为n的一维数组中查找值为x的元素,在平均情况下需要检查数组中3/4的元素。
例1.2 采用顺序搜索法,在长度为n的一维数组中查找值为x的元素。 • 再考虑最坏情况分析。 在这个例子中,最坏情况发生在需要查找的x是数组中的最后一个元素或x不在数组中的时候,此时显然有W(n)=max{ti|1≤i≤n+1}=n 在上述例子中,算法执行的工作量是与具体的输入有关的,A(n)只是它的加权平均值,而实际上对于某个特定的输入,其计算工作量未必是A(n),且A(n)也不一定等于W(n)。但在另外一些情况下,算法的计算工作量与输入无关,即当规模为n时,在所有可能的输入下,算法所执行的基本运算次数是一定的,此时有A(n)=W(n)。例如,两个n阶的矩阵相乘,都需要做n3次实数乘法,而与输入矩阵的具体元素无关。
1.1.2 算法复杂度 • 2.算法的空间复杂度 • 算法执行过程中所需的最大存储空间 • 存储量包括以下三部分 • 算法程序所占的空间 • 输入的初始数据所占的存储空间 • 算法执行过程中所要的额外空间 • 算法空间复杂度可定义为: S(n)=O(f(n)) • 原地工作(in place)的算法:记作O(1) • 压缩存储技术
习题 • (1)算法的空间复杂度是指 • A)算法程序的长度 B)算法程序中的指令条数 • C)算法程序所占的存储空间 D)执行过程中所需要的存储空间 • 解析: 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。
习题 • 算法的时间复杂度是指 • A)执行算法程序所需要的时间 • B)算法程序的长度 • C)算法执行过程中所需要的基本运算次数 • D)算法程序中的指令条数 • 解析: 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。
习题 • 算法的基本特征是可行性、确定性、和拥有足够的情报。 • 解析: 算法是指解题方案的准确而完整的描述。它有4个基本特征,分别是可行性、确定性、有穷性和拥有足够的情报
习题 • 在计算机中,算法是指 A)加工方法 B)解题方案的准确而完整的描述 C)排序方法 D)查询方法 • 解析: 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性和拥有足够的情报。
习题 • 算法分析的目的是 A)找出数据结构的合理性 B)找出算法中输入和输出之间的关系 C)分析算法的易懂性和可靠性 D)分析算法的效率以求改进 • 解析: 算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。
习题 算法的工作量大小和实现算法所需的存储单元多少分别称为算法的 【1】 。 【命题目的】本题考查了考生对算法的理解程度。 【解题要点】算法的复杂性是指对一个在有限步骤内终止算法和所需存储空间大小的估计。算法的计算量是算法的时间复杂性,算法所需存储空间大小是算法的空间复杂性。
1.2.1 什么是数据结构 • 1.数据结构研究的主要内容 • 数据的逻辑结构 • 数据的存储结构 • 对各种数据结构进行的运算 • 2.研究数据结构目的 • 提高数据处理的速度 • 尽量节省在数据处理过程中所占用的计算机存储空间
1.2.1 什么是数据结构 • 1.数据结构研究的主要内容 • 数据的逻辑结构 • 数据的存储结构 • 对各种数据结构进行的运算 • 2.研究数据结构目的 • 提高数据处理的速度 • 尽量节省在数据处理过程中所占用的计算机存储空间
线性表 A.线性结构 栈 队 1.数据的逻辑结构 数据结构的三个方面 树形结构 B.非线性结构 图形结构 A 顺序存储 2、数据的存储结构 B 链式存储 3、数据的运算:检索、排序、插入、删除、修改等。 1.2.1 什么是数据结构
1.2.1 什么是数据结构 • 3.数据结构的定义 • 相互有关联的数据元素的集合 • 数据元素之间的关系可以用前后件关系来描述 • 一个数据结构应包含以下两方面信息: • 表示数据元素的信息 • 表示各数据元素之间的前后件关系
1.2.1 什么是数据结构 • 4.数据的逻辑结构 • 对数据元素之间的逻辑关系的描述 • 只抽象地反映数据元素之间的逻辑关系,与计算机中的存储无关 • 两个要素: • 数据元素的集合,通常记为D; • 前后件关系,通常记为R • 一个数据结构B可以表示为(P12) B=(D,R)
1.2.1 什么是数据结构 • 5.数据的存储结构 • 数据的逻辑结构在计算机存储空间中的存放形式 • 常用的存储结构: • 顺序 • 链式 • 索引 • 一种数据结构可根据需要采用不同的存储结构。采用不同的存储结构,其数据处理的效率是不同
例如,如果把一年四季看作一个数据结构,则可表示成例如,如果把一年四季看作一个数据结构,则可表示成 • B =(D,R) • D ={春季,夏季,秋季,冬季} • R ={(春季,夏季),(夏季,秋季),(秋季,冬季)}
1.2.2 数据结构的图形表示 • 数据结点:用方框表示 • 根结点、终端结点 • 前后件关系:用有向线段表示 • 基本运算: • 插入运算 • 删除运算 • 查找、分类、合并、分解、复制、修改、……
1.2.3 线性结构与非线性结构 • 空的数据结构:一个数据元素都没有 • 线性结构 • 如果一个非空数据结构满足下列两个条件: • 有且只有一个根结点; • 每一个结点最多有一个前件,也最多有一个后件。 • 常见的线性结构有:线性表、栈与队列、线性链表 • 非线性结构 • 如果一个数据结构不是线性结构 • 常见的非线性结构有:树、二叉树、图
习题 • 下列叙述中,错误的是 A)数据的存储结构与数据处理的效率密切相关 B)数据的存储结构与数据处理的效率无关 C)数据的存储结构在计算机中所占的空间不一定是连续的 D)一种数据的逻辑结构可以有多种存储结构 • 解析: 一般来说,一种数据结构根据需要可以表示成多种存储结构。常用的存储结构有顺序、链接、索引等,而采用不同的存储结构,其数据处理的效率是不同的;一个数据结构中的各数据元素在计算机存储空间中的位置关系与逻辑关系是有可能不同的。
习题 • 线性表若采用链式存储结构时,要求内存中可用存储单元的地址 A)必须是连续的 B)部分地址必须是连续的 C)一定是不连续的 D)连续不连续都可以 • 解析: 在链式存储结构中,存储数据结构的存储空间可以是连续的,也可以是不连续的,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。
习题 • 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分成 A)动态结构和静态结构 B)紧凑结构和非紧凑结构 C)线性结构和非线性结构 D)内部结构和外部结构 【命题目的】考查考生对数据结构分类的理解。 【解题要点】根据数据结构中各数据元素之间前后件关系的复杂程序,一般将数据结构分为两大类:线性结构和非线性结构。线性结构是指满足以下两个条件的非空的数据结构:一是有且只有一个根结点,二是每一个结点最多有一个前件,也最多有一个后件。如是一个数据结构不是线性结构,则称为非线性结构。
习题 数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及 A)数据的存储结构 B)计算方法 C)数据映象 D)逻辑存储 解析: 数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
习题 数据结构中,与所使用的计算机无关的是数据的 A)存储结构 B)物理结构 C)逻辑结构 D)物理和存储结构 解析: 数据结构概念一般包括3个方面的内容,数据的逻辑结构、存储结构及数据上的运算集合。数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。
习题 数据的逻辑结构有线性结构和 【1】 两大类。 解析: 数据的逻辑结构有线性结构和非线性结构两大类
1.3.1 线性表的基本概念 • 线性表:由n(n≥0)个相同类型数据元素构成的有限序列: • n定义为线性表的表长;n=0 时的线性表被称为空表。称i为在线性表中的位序。 • 例如: • 英文大写字母表 (A,B,C,D,E,F,…X,Y,Z) • 同一花色的13张扑克牌 • (2,3,4,5,6,7,8,9,10,J,Q,K,A)
1.3.1 线性表的基本概念 • 线性表的结构特征 • 数据元素在表中的位置由序号决定,数据元素之间的相对位置是线性的; • 对于一个非空线性表,有且只有一个根结点a1,它无前件,有且只有一个终端结点an,它无后件,除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。 • 线性表的存储结构 • 顺序存储 • 链式存储
1.3.2 线性表的顺序存储结构 • 两个基本特点: • 线性表中所有元素所占的存储空间是连续的。 • 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。 • 存储示意图
顺序表的插入和删除分析 • 插入算法的分析 • 假设线性表中含有n个数据元素,在进行插入操作时,若假定在n+1个位置上插入元素的可能性均等,则平均移动元素的个数为: • 删除算法的分析 • 在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素的个数为: • 分析结论 • 顺序存储结构表示的线性表,在做插入或删除操作时,平均需要移动大约一半的数据元素。当线性表的数据元素量较大,并且经常要对其做插入或删除操作时,这一点需要值得考虑
习题 线性表的顺序存储结构和线性表的链式存储结构分别是 A)顺序存取的存储结构、顺序存取的存储结构 B)随机存取的存储结构、顺序存取的存储结构 C)随机存取的存储结构、随机存取的存储结构 D)任意存取的存储结构、任意存取的存储结构 【命题目的】考查有关线性表存储结构的基本知识。 【解题要点】顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
习题 下列叙述中正确的是 A)线性表是线性结构 B)栈与队列是非线性结构 C)线性链表是非线性结构 D)二叉树是线性结构 解析: 线性表是一种线性结构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的;栈、队列、线性链表实际上也是线性表,故也是线性结构;树是一种简单的非线性结构。
习题 度为n的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 【1】 。 解析: 在线性表的任何位置插入一个元素的概率相等,即概率为p=1/(n+1),则插入一个元素时所需移动元素的平均次数为E=1/(n+1)n+1 n=1(n-i+1)=n/2。
习题 线性表L=(a1,a2,a3,…ai,…an),下列说法正确的是 A)每个元素都有一个直接前件和直接后件 B)线性表中至少要有一个元素 C)表中诸元素的排列顺序必须是由小到大或由大到小 D)除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 解析: 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。
习题 线性表若采用链式存储结构时,要求内存中可用存储单元的地址 A)必须是连续的 B)部分地址必须是连续的 C)一定是不连续的 D)连续不连续都可以 解析: 在链式存储结构中,存储数据结构的存储空间可以是连续的,也可以是不连续的,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。
1.4.1 栈及其基本运算 • 1.栈的定义 • 栈(stack):一种只允许在表的一端进行插入或删除操作的特殊的线性表 • 栈顶(top) :允许进行插入与删除操作的一端 • 栈底(bottom):不允许插入与删除操作的另一端 • 先进后出(FILO)或后进先出(LIFO)的线性表