引言:作为一份复习笔记,自己讲给自己听,越是重要的东西越是认真。
我会分为七篇,为发下来的复习题库,因为没有解析,我打算自己写下来。先把自己讲懂了才能加教别人。
试卷:
第一章 绪论
一.判断题
- 数据元素是数据的最小单位。( )
- 数据元素是数据的基本单位。( )
- 数据项是数据的基本单位。( )
- 数据项是数据的最小单位。( )
- 算法和程序没有区别,所以在数据结构中两者是通用的。( )
- 数据的逻辑结构独立于计算机,物理结构依赖于计算机。( )
- 数据的逻辑结构与数据元素本身的内容和形式无关。( )
- 每种数据结构都应该具备三种基本运算:插入、删除和查找。( )
- 数据元素可以由类型互不相同的数据项构成。( )
- 数据结构的抽象操作的定义与具体实现有关。( )
- 数据结构是研究数据的逻辑结构和物理结构以及对它们所进行的运算。√
二.选择题
- 数据结构是研究数据的______以及对它们所进行的运算。
A.抽象结构和理想结构 B.理想结构和物理结构
C.逻辑结构和物理结构 D.抽象结构和物理结构 - 算法指的是______。
A.计算机程序 B.解决问题的计算方法
C.排序算法 D.解决问题的有限运算序列 - 算法的时间复杂度取决于______。
A.问题的规模 B.待处理数据的初态
C.A与B都对 D.算法的易读性 - 被计算机加工的数据元素不是孤立无关的,它们彼此之间一般存在着某种联系。通常将数据元素之间的这种联系称为______。
A. 规则 B. 集合 C. 结构 D. 运算 - 设n是描述问题规模的非负整数,下面程序段的时间复杂度是______。
x=2;
while(x<n/2) x=2*x;
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n2) - 设n是描述问题规模的非负整数,下面程序段的时间复杂度是______。
x=1;
while(x<=n) x=2*x;
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n2)
设n是描述问题规模的非负整数,下面程序段的时间复杂度是______。
x=1;
while(x<n) x=2*x;
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n2)
设n是描述问题规模的非负整数,下面程序段的时间复杂度是______。
x=1;
while(x<n/2) x=2*x;
A. O(log2n) B. O(n) C. O(nlog2n) D. O(n2)
- 下面程序段的时间复杂度是______。
for(i=0; i<m; i++)
for(j=0; j<n; j++)
a[i][j]=i*j;
A. O(n2) B. O(m*n) C. O(m2) D. O(m+n) - 某算法的时间复杂度为O(n2),表明该算法的______。
A. 问题规模是n2 B. 执行时间等于n2
C. 执行时间与n2成正比 D. 问题规模与n2成正比 - 在数据结构中,数据的最小单位是______。
A. 数据元素 B. 字节 C. 数据项 D. 结点 - 在数据结构中,数据的基本单位是______。
A. 数据项 B. 数据元素 C. 数据变量 D. 数据类型 - 在定义ADT时,除数据对象和数据关系外,还需说明______。
A. 数据元素 B. 算法 C. 数据项 D. 基本操作 - 可以用______定义一个完整的数据结构。
A. 数据元素 B. 数据对象 C. 数据关系 D. 抽象数据类型 - 从逻辑上可以把数据结构分为______。
A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构
C. 内部结构和外部结构 D. 线性结构和非线性结构 - 算法的计算量的大小称为计算的______。
A. 效率 B. 复杂性 C. 现实性 D. 难度 - 计算算法的时间复杂度是属于一种______。
A. 事前统计的方法 B. 事前分析估算的方法
C. 事后统计的方法 D. 事后分析估算的方法 - 当输入非法错误时,一个“好”的算法会进行适当处理,而不会产生难以理解的输出结果。这称为算法的______。
A. 可读性 B. 健壮性 C. 正确性 D. 有穷性 - 算法分析的目的是______。
A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系
C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 - 当n足够大时,下述渐进时间复杂度最小的是______
A. T(n)=nlog2n-1000log2n B. T(n)=nlog23-1000log2n
C. T(n)=n2-1000log2n D. T(n)=2nlog2n-1000log2n - 当n足够大时,下述渐进时间复杂度最小的是______。
A. T(n)=log2n+5000n B. T(n)= n2-8000n
C. T(n)=n3+5000n D. T(n)=2nlog2n-1000n - 在下列算法中,“x=x*2”的执行次数是______。
for(i=0; i<n; i++)
for(j=i; j<n; j++)
x=x*2;
A. n(n+1)/2 B. nlog2n C. n2 D. n(n-1)/2
在下面程序段中,循环体最内层语句的执行次数是______。
for(i=0; i<m; i++)
for(j=0; j<n; j++)
a[i][j]=i*j;
A. n2 B. m*n C. m2 D. m+n - 数据元素之间的关系在计算机中有两种不同的表示方法______。
A. 动态表示和静态表示 B. 线性结构和非线性结构
C. 内部结构和外部结构 D. 顺序存储和非顺序存储 - 顺序存储设计时,存储单元的地址______。
A. 一定连续 B. 一定不连续 C. 不一定连续 D. 部分连续、部分不连续 - 以下属于逻辑结构的是______。
A. 顺序表 B. 哈希表 C. 有序表 D. 单链表 - 与数据元素本身的形式、内容、相对位置、个数无关的是数据的______。
A.存储结构 B.存储实现
C.逻辑结构 D.运算实现 - 以下说法正确的是______。
A.数据元素是数据的最小单位
B.数据项是数据的基本单位
C.数据结构是带有结构的各数据项的集合
D.一些表面上很不相同的数据可以有相同的逻辑结构
三.填空题
- 评价算法的效率性能从利用计算机资源角度看主要从两个方面: ________和________ 进行分析。
- 计算机执行下面语句时,语句S的频度(执行次数)为________。
for(i=1;i<n-1;i++) for(j=n;j>=i;j--) S; - 有算法for(i=1;i<=n;i++) for(j=1;j<=n;j++) x=x+1;,其时间复杂度为________。
- 算法的主要特点是________。
- 下面程序段的时间复杂度__( )__。
i=1;
while(i<=n) i=i*3;
四.解答题
1比较以下时间复杂度的大小:O(n/2),O(n2),O(log2n),O(nlog2n),请按从小到大的顺序给出。
- 下列是用二元组表示的数据结构,画出它们分别对应的逻辑图形表示,并指出它们分别属于何种结构(( )表示两结点是双向的,< >表示两结点是单向的)。
(1)A=(K,R),其中:K={a,b,c,d,e,f,g,h},R={r},r={<a,b>,<b,c>,<c,d>,<d,e>,<e,f>,<f,g>,<g,h>}。
(2)B=(K,R),其中:K={a,b,c,d,e,f,g,h},R={r},r={<d,b>,<d,g>,<d,a>,<b,c>,<g,e>,<g,h>,<e,f>}。
(3) C=(K,R),其中:K={1,2,3,4,5,6},R={r},r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}。
- 有下列运行时间函数:(1)T1(n)=1000; (2)T2(n)=n2+1000n; (3)T3(n)=3n3+100n2+n+1;
分别写出相应的大O表示的运算时间。
答案:
参考答案:
- 判断题:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
× | √ | × | √ | × | √ | √ | × | √ | × |
- 选择题:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
C | D | C | C | A | A | B | C | C | B |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
D | D | D | B | B | B | C | B | A | A |
21 | 22 | 23 | 24 | 25 | |||||
D | A | C | C | D |
20.(解析):
- 填空题:
1.时间复杂度 空间复杂度
2.(n+3)(n-2)/2
3.O(n2)
4.确定性、有限性、可行性、零个或零个以上输入、一个或一个以上输出
5.O(log3n)
四.解答题:
1.从小到大的顺序:O(log2n),O(n/2),O(nlog2n),O(n2)
2.下列是用二元组表示的数据结构,画出它们分别对应的逻辑图形表示,并指出它们分别属于何种结构(( )表示两结点是双向的< >表示两结点是单向的)。
(1)A=(K,R),其中:K={a,b,c,d,e,f,g,h},R={r},
r={<a,b>,<b,c>,<c,d>,<d,e>,<e,f>,<f,g>,<g,h>}
(2)B=(K,R),其中:K={a,b,c,d,e,f,g,h},R={r},
r={<d,b>,<d,g>,<d,a>,<b,c>,<g,e>,<g,h>,<e,f>}
(3) C=(K,R),其中:K={1,2,3,4,5,6},R={r},
r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}
3. (1) O(1) (2) O(n2) (3) O(n3)
解析:
我会把错的都会解析出来,可能正确的题目对于我有所感触的也会说出来,有什么不同的意见,可以说。
判断:
1到4题和11题是讲的是数据,数据项,数据元素,数据项的概念。
-
数据(Data):数据是指描述客观事物的符号表示,是对客观事物的记录和表达。数据可以是数字、字符、图像、声音等形式。
-
数据项(Data Item):数据项是构成数据元素的最小单位,它表示数据元素中的一个属性或特征。数据项可以是一个单一的数据元素,也可以由多个数据元素组成。
-
数据元素(Data Element):数据元素是数据的基本单位,它是由一个或多个数据项构成的实体。数据元素可以是一个独立的个体,也可以由多个数据项组成。
-
数据结构(Data Structure):数据结构是指数据元素之间的关系和组织方式,它描述了数据元素之间的逻辑结构和物理存储结构。数据结构提供了一种组织和管理数据的方式,以便有效地操作和处理数据。
总结:
- 数据项是数据元素中的最小单位,表示一个属性或特征。
- 数据元素是由一个或多个数据项组成的实体,是数据的基本单位。
- 数据是描述客观事物的符号表示,可以包含一个或多个数据元素。
- 数据结构是描述数据元素之间关系和组织方式的方式,用于组织和管理数据。
第5题则是算法和程序的区别
算法是解决问题的一系列步骤和规则,它描述了问题的解决方法和操作过程,是一种抽象的概念。算法可以独立于具体的编程语言或计算机平台存在。
程序是算法的具体实现,是用特定编程语言编写的一段代码,用于在计算机上执行算法的操作。程序是算法在计算机中的具体体现。
在数据结构中,算法和程序是紧密相关的,但它们并不是通用的。数据结构关注的是如何组织和管理数据的方法,而算法则关注如何对这些数据进行操作和处理。在数据结构中,我们使用算法来实现对数据结构的插入、删除、查找等操作,而程序则是具体实现这些算法的代码。
因此他们是不同的概念。
第6和7题讲的是数据的逻辑结构我们可以分别举例子可以求证
- 第6题:数据的逻辑结构独立于计算机,物理结构依赖于计算机。( )
- 例如:一个链表的逻辑结构可以在不同的计算机上使用相同的方式表示和操作,而不受具体计算机的影响。物理结构是指数据在计算机内存或磁盘等物理介质上的存储方式,它依赖于计算机的存储架构和操作系统。
- 第7题:数据的逻辑结构与数据元素本身的内容和形式无关。( )
- 例如:在一个二叉树的逻辑结构中,我们只关注节点之间的父子关系,而不关注节点的具体值或数据类型。
第8题:错在“都”字上面
有特例:
- 队列(Queue)数据结构通常只支持在队尾插入元素和在队头删除元素的操作,而不涉及查找操作。
- 堆(Heap)数据结构,它主要用于实现优先级队列。堆支持插入和删除操作,但查找操作相对较少使用。
- 同时,还有图(Bit Array)和哈希表(Hash Table)等等。
第9题其实就是struct类型的结构体,不多赘述。
第10题首先要理解抽象操作是什么
抽象操作是指对数据结构进行操作的高层描述,它关注操作的功能、规则和语义,而不关注具体的实现细节。
具体实现是指将抽象操作转化为具体的代码实现。不同的编程语言和算法设计可以有不同的实现方式,但它们都应该遵循相同的抽象操作定义。具体实现可以根据具体的技术、平台和需求选择不同的算法和数据结构。
便可知晓。
选择:
第1题详情看判断第1题解析
第2题看判断第2题,但是有一点需要辨析一下
我认为算法是B.解决问题的计算方法 和 D.解决问题的有限运算序列 都是正确的
- B选项 "解决问题的计算方法" 是,并常见和广泛接受的表述。
- D选项 "解决问题的有限运算序列" 它相对更具体和狭窄。强调了算法的运算序列的有限性,即算法应当具有明确的开始和结束,并且包含一系列有限的计算步骤。
如果硬要说哪个对,其实是D更具体。但如果两个选项单拎出来都是对的。
第3题理清一下关系
- 时间复杂度: 时间复杂度是衡量算法在运行过程中所消耗的时间资源。它表示算法的执行时间随着问题规模的增长而增加的趋势
- 空间复杂度是衡量算法在运行过程中所消耗的空间资源。它表示算法所需的额外存储空间随着问题规模的增长而增加的趋势。
第4题 你可以想想这门课叫什么
第5题到第7题
如果再问你不是具体数量级时可以使用瞪眼法。
第五题 while(x<n/2) x=2*x; 中x每一轮循环是不是*2,以指数级别增加,知道n/2,那他的次数是不是(t代表次数)时间复杂度就是o(),其实每一轮*2他的最后时间复杂度就是o(),每一轮*3就是o().所以加瞪眼法(其实是高中配平方程式的叫法)。
因此都可以解出。
第8到第10题不赘述,有问题看判断相应的解析
11题和12题 抽象数据类型就是ADT,它的基本操作就是插入、删除、修改和查询等操作。
13题
- 动态结构和静态结构:这种分类主要关注数据结构的变化性质。
- 紧凑结构和非紧凑结构:这种分类主要关注数据结构的存储方式。
- 内部结构和外部结构:这种分类主要关注数据结构的存储位置。
- 线性结构和非线性结构:这种分类主要关注数据结构中数据元素之间的逻辑关系的两种基本分类
14略
15题
在设计和实现算法之前,可以通过分析算法的代码、循环结构、递归调用等,来推导算法的时间复杂度。通过对算法进行逐行分析和计算,可以估算出算法在不同规模输入下的时间消耗。
你可以想想写实现这段代码之前是不是计算时间复杂度,包括题目给你的。
16题
- A的"可读性"指的是算法代码的清晰易读程度。
- B的健壮性与输入非法错误处理相关。
- C的"正确性"指的是算法的结果与预期结果一致。
- D的"有穷性"指的是算法在有限的时间内终止。
17略
18题和19题
以18题为例。通过比较各项的主要项来确定增长最慢的时间复杂度。
- A. T(n) =,主要项是 。
- B. T(n) = ,主要项是 。
- C. T(n) = ,主要项是 。
- D. T(n) = ,主要项是 。
因此,选项 B 具有最小的渐进时间复杂度。
20,21略
22 反例 链式顺序存储
23 前面说了数据的逻辑结构独立于计算机,物理结构依赖于计算机 ,而独立于计算机与数据的存储无关
- 顺序表:必须是顺序存储;
- 哈希表:必须是散列存储;
- 单链表:必须是链式存储;
这道题没意思,考这么细 。
24略
25略
填空 :
只讲第二题。
我就不班门弄斧了,B站有个大佬做的视频很好,不会的看一看
数据结构——时间复杂度计算
解答:
1略
2 略
3 略