数据结构与算法基础知识总结
1算法
算法:是指解题方案的准确而完整的描述。
算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。特征包括: (1)可行性;
(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;
(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义; (4)拥有足够的情报。
算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。
基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。
算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。 算法复杂度:算法时间复杂度和算法空间复杂度。 算法时间复杂度是指执行算法所需要的计算工作量。 算法空间复杂度是指执行这个算法所需要的内存空间。
2数据结构的基本基本概念
数据结构研究的三个方面:
(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;
(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构; (3)对各种数据结构进行的运算。
数据结构是指相互有关联的数据元素的集合。 数据的逻辑结构包含: (1)表示数据元素的信息;
(2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件,也最多有一个后件。 非线性结构:不满足线性结构条件的数据结构。
3线性表及其顺序存储结构
线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
非空线性表的结构特征:
(1)且只有一个根结点a1,它无前件; (2)有且只有一个终端结点an,它无后件;
(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。 线性表的顺序存储结构具有以下两个基本特点: (1)线性表中所有元素的所占的存储空间是连续的;
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
ai的存储地址为:adr(ai)=adr(a1)+(i-1)k,,adr(a1)为第一个元素的地址,k代表每个元素占的字节数。
顺序表的运算:插入、删除。 (详见14--16页)
4栈和队列
栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。
栈按照“先进后出”(filo)或“后进先出”(lifo)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。
栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。
队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。rear指针指向队尾,front指针指向队头。
队列是“先进行出”(fifo)或“后进后出”(lilo)的线性表。
队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。 循环队列:s=0表示队列空,s=1且front=rear表示队列满
5线性链表
数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。 结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 链式存储方式即可用于表示线性结构,也可用于表示非线性结构。
线性链表,head称为头指针,head=null(或0)称为空表,如果是两指针:左指针(llink)指向前件结点,右指针(rlink)指向后件结点。 线性链表的基本运算:查找、插入、删除。
6树与二叉树
树是一种简单的非线性结构,所有元素之间具有明显的层次特性。
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。树的最大层次称为树的深度。
二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。 二叉树的基本性质:
(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点; (2)深度为m的二叉树最多有2m-1个结点;
(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;
(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分; (5)具有n个结点的完全二叉树的深度为[log2n]+1;
(6)设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:
①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为int(k/2); ②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);
③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。 满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。
点击文本外关闭弹框
数据结构与算法(一)
(总分:78.00,做题时间:90分钟)
一、{{B}}选择题{{/B}}(总题数:28,分数:56.00)
1.计算机算法指的是 ______,它必须具备输入、输出,可执行性、确定性和有穷性。(分数:2.00)A.计算方法B.排序方法C.解决问题的有限运算序列√D.调度方法解析:2.设计一个“判别在表达式中左、右括号是否配对出现”的算法,采用 ______ 数据结构最佳。(分数:2.00)A.线性表的顺序存储结构B.栈√C.队列D.线性表的链式存储结构解析:3.若对一棵二叉树进行中序遍历得到的结果是(B,D,A,G,H,E,C,F),进行后序遍历的结果是DBHGEFCA,那么这棵二叉树进行前序遍历得到的结果是 ______。(分数:2.00)A.(A, B, D, C, E, G, H,√B.(A, B, D, C, E, H, G,C.(D,B,A,C,E,G,H,D.无法确定解析:4.一个队列的入列序号是1,2,3,4,则队列的输出系列是 ______。(分数:2.00)A.4,3,2,1 B.1,2,3,4 √C.1,4,3,2 D.3,2,4,1 解析:5.对关键字序列(11,12,13,14,15)采用对半查找算法查找关键字11,则关键字之间比较次数为______。(分数:2.00)A.1 B.2 √C.3 D.4 解析:6.如果以链表为栈的存储结构,则出栈操作是 ______。(分数:2.00)A.必须判别栈是否为满B.必须判别栈是否为空√C.判别栈元素的类型D.对栈不作任何判别解析:7.在算法设计基本方法中, ______ 是从初始条件出发,逐次推出所需求的结果。
(分数:2.00) A.递推 √ B.递归 C.列举法 D.归纳法 解析:
8.分析算法的目的是 ______。
(分数:2.00)
A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 √ D.分析算法的易懂性和文档 解析:
9.若完全二叉树共有n个结点,且从根结点开始,按层序(每层从左到右)用正整数 0,1,2,…,n-1,从小到大对结点编号,则对于编号为k的结点,错误的是 ______。
(分数:2.00)
A.若k>0,则该结点的父结点编号为[k/2]([]表示取整) B.若2k>n-1,则编号为k的结点无右子树,但可能有左子树 √ C.若2k+1<=n-1,则编号为k的结点的右子结点编号为2k+1 D.若k=0,则该结点肯定没有父结点 解析:
10.用数组A[0…m-1]存放循环队列的元素值,若其头尾指针分别为front和rear,则循环队列中当前元素的个数为 ______。
(分数:2.00)
A.(rear-front+rmod m √ B.(rear-front+m+1)mod m C.(rear-front+m-1)mod m D.(rear-front-m-1)mod m 解析:
11.采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为 ______。
(分数:2.00) A.n B.n/2 C.(n+1)/2 √ D.(n-1)/2 解析:
12.设有1000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用 ______ 排序法。
(分数:2.00) A.希尔排序 B.冒泡排序 C.堆排序 √ D.快速排序 解析:
13.链栈与顺序栈相比,有一个比较明显的优点是 ______。
(分数:2.00) A.插入操作更加方便
B.通常不会出现栈满情况 √ C.不会出现栈空的情况
D.删除操作更加方便 解析:
14.对线性表进行二分法检索。其前提条件是 ______ 。
(分数:2.00)
A.线性表以顺序方式存储,并且按关键码值排好序 √ B.线性表以顺序方式存储,并且按关键码的检索频率排好序 C.线性表以链接方式存储,并且按关键码值排好序
D.线性表以链接方式存储,并且按关键码的检索频率排好序 解析:
15.下列关于数据结构的叙述中,正确的是 ______。
(分数:2.00)
A.实际应用中,队列的顺序存储结构一般采用循环队列的形式 √ B.递推算法结构程序一般比递归算法结构程序更精练 C.树是一种线性结构
D.用一维数组存储二叉树,总是以先序遍历的顺序存储各结点 解析:
16.完全二叉树中,若一个结点是叶结点,则它没有 ______。
(分数:2.00) A.左子结点 B.右子结点
C.左子结点和左子结点 √ D.左子结点、右子结点和兄弟结点 解析:
17.下面关于数据结构的叙述中,正确的是 ______。
(分数:2.00)
A.顺序存储方式的优点是存储密度大,且插入、删除运算效率高 B.链表中的每一个结点都包含恰好一个指针
C.包含n个结点的二叉排序树的最大检索长度为log2n D.将一棵树转换为二叉树后,根结点没有右子树 √ 解析:
18.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为 ______。
(分数:2.00)
A.79,46,56,38,40,84 B.84,79,56,38,40,46 √ C.84,79,56,46,40,38 D.84,56,79,40,46,38 解析:
19.下述几种排序方法中, ______ 是最简单的交换类排序方法。
(分数:2.00) A.冒泡排序 √ B.插入排序 C.快速排序 D.选择排序 解析:
20.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是 ______。
(分数:2.00) A.希尔排序 B.冒泡排序 C.插入排序
D.选择排序 √ 解析:
21.二分法查找 ______ 存储结构。
(分数:2.00) A.只适合于链式 B.只适合于顺序 √
C.既适合于顺序也适合于链式 D.既不适合于顺序也不适合于链式 解析:
22.对含有n个关键词的序列进行冒泡法排序,最少的比较次数是 ______ 。
(分数:2.00) A.n B.n-1 √ C.n/2 D.n-2 解析:
23.下面关于二叉树的叙述中正确的是 ______。
(分数:2.00)
A.度为2的树称为二叉树 B.二叉树的度肯定是2
C.二叉树中所有结点的度都是2
D.由3个结点可以构造出5种不同的二叉树 √ 解析:
24.对给定的整数序列(541,132,984,746,518,181,946,314,205,827)进行从小到大的排序时,采用快速排序(以中间元素518为基准)的第一趟扫描结果是 ______ 。
(分数:2.00)
A.(181,132,314,205,541,518,946,827,746,984) B.(541,132,827,746,518,181,946,314,205,984) C.(205,132,314,181,518,746,946,984,541,827) √ D.(541,132,984,746,827,181,946,314,205,518) 解析:
25.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入栈队列Q,若6个元素出队的顺序是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是 ______。
(分数:2.00) A.6 B.4 C.3 √ D.2 解析:
26.按照二叉树的定义,深度为5的二叉树至多有 ______ 个结点。
(分数:2.00) A.16 B.32 C.10 D.31 √ 解析:
27.采用二分查找方法查找长度为n的线性表时,每个元素的平均查找长度为 ______。
(分数:2.00) A.O(log2 √
B.O( C.O(nlog2 D.O(n2) 解析:
28.以下叙述正确的是 ______。
(分数:2.00)
A.线性表的线性存储结构优于链表存储结构 B.在树形结构中,树根结点没有前驱结点 √ C.栈的操作方式是先进先出 D.队列的操作方式是先进后出 解析:
二、{{B}}填空题{{/B}}(总题数:11,分数:22.00)
29.一个算法通常由对数据对象的运算和操作以及算法的{{U}} 【1】 {{/U}}两种基本要素组成。
(分数:2.00)
填空项1:__________________ (正确答案:控制结构) 解析:
30.算法复杂度包括时间复杂度和空间复杂度。对空间复杂度一般可以用平均态和最坏情况复杂性来衡量:而对于空间复杂度,一般指执行该算法所需要的{{U}} 【2】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:内存空间) 解析:
31.在数据结构的图形结构中,每个结点的前驱结点数和后续结点数可以{{U}} 【3】 {{/U}}个。
(分数:2.00)
填空项1:__________________ (正确答案:任意多) 解析:
32.在树中,一个结点的直接子结点的个数称为该结点的{{U}} 【4】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:一次数/度) 解析:
33.设只包含根结点的二叉树的高度为0,则高度为k的二叉树的最小结点数为{{U}} 【5】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:k+1) 解析:
34.已知一棵二叉树前序序列和中序序列分别为A,B,D,E,G,C,F,H和D,B, G,E,A,C,H,F,则该二叉树的后序序列为{{U}} 【6】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:D,G,E,B,H,P,C,A) 解析:
35.从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列正确位置上的方法,称为{{U}} 【7】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:希尔排序) 解析:
36.从未排序序列中挑选元素,将其依次放入已排序序列(初始时为空)的一端,这种排序方法称为{{U}} 【8】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:选择排序) 解析:
37.在表为n的顺序表中,实施顺序查找,在查找不成功时,与关键字比较的次数为{{U}} 【9】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:n+1) 解析:
38.在插入排序、希尔排序、选择排序、堆排序和快速排序中,平均比较次数最少的排序是{{U}} 【10】 {{/U}}。
(分数:2.00)
填空项1:__________________ (正确答案:快速排序) 解析:
39.在堆排序和快速排序中,若只从最坏情况下排序最快并且要节省内存考虑,则应选择{{U}} 【11】 {{/U}}方法。
(分数:2.00)
填空项1:__________________ (正确答案:堆排序) 解析: