数据结构复习题——选择题

在数据结构中,从逻辑上可以把数据结构分成( )。

A.动态结构和静态结构

B.紧凑结构和非紧凑结构

C.线性结构和非线性结构

D.内部结构和外部结构


与数据元素本身的形式、内容、相对位置、个数无关的是数据的( )。

A.存储结构

B.存储实现

C.逻辑结构

D.运算实现


通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。

A.数据在同一范围内取值

B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致

C.每个数据元素都一样

D.数据元素所包含的数据项的个数要相等


以下说法正确的是( )。

A.数据元素是数据的最小单位

B.数据项是数据的基本单位

C.数据结构是带有结构的各数据项的集合

D.一些表面上很不相同的数据可以有相同的逻辑结构


下列哪个函数是O(N)的?

A.2NlogN

B.logN^2

C.N(logN)^2

D.N^2/2


算法的时间复杂度取决于( )。

A.问题的规模

B.待处理数据的初态

C.计算机的配置

D.A和B


下面代码段的时间复杂度是()。

s=0;

for ( i=0; i<n; i++ )

for( j=0; j<n; j++ )

s+=B[i][j];

sum=s;

A.O(1)

B.O(log2^n)

C.O(n)

D.O(n^2)


给定N×N×N的三维数组A,则在不改变数组的前提下,查找最小元素的时间复杂度是:

A.O(N^2)

B.O(NlogN)

C.O(N^2logN)

D.O(N^3)


下列代码

if ( A > B ) {

for ( i=0; i<N; i++ )

for ( j=N*N; j>i; j-- )

A += B;

}

else {

for ( i=0; i<N*2; i++ )

for ( j=N*2; j>i; j-- )

A += B;

}

的时间复杂度是:

A.O(N)

B.O(N^2)

C.O(N^3)

D.O(N^4)


以下数据结构中,( )是非线性数据结构。

A.树

B.字符串

C.队列

D.栈


数组A[1..5,1..6]每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为:

A.1120

B.1125

C.1140

D.1145


N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:

A.访问第i个结点(1≤iN)和求第i个结点的直接前驱(2≤iN

B.在第i个结点后插入一个新结点(1≤iN

C.删除第i个结点(1≤iN

D.将N个结点从小到大排序


以下关于顺序表的说法中,正确的是( )。

A.顺序表可以利用一维数组表示,因此顺序表与一维数组在结构上是一致的,它们可以通用

B.在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻

C.顺序表和一维数组一样,都可以按下标随机(或直接)访问,顺序表还可以从某一指定元素开始,向前或向后逐个元素顺序访问

D.在顺序表中每一表元素的数据类型还可以是顺序表


线性表若采用链式存储结构时,要求内存中可用存储单元的地址

A.必须是连续的

B.连续或不连续都可以

C.部分地址必须是连续的

D.一定是不连续的


线性表L在什么情况下适用于使用链式结构实现?

A.需不断对L进行删除插入

B.需经常修改L中的结点值

C.L中含有大量的结点

D.L中结点结构复杂


链表不具有的特点是:

A.插入、删除不需要移动元素

B.方便随机访问任一元素

C.不必事先估计存储空间

D.所需空间与线性长度成正比


适用于压缩存储稀疏矩阵的两种存储结构是:

A.三元组表和十字链表

B.三元组表和邻接矩阵

C.十字链表和二叉链表

D.邻接矩阵和十字链表


在具有N个结点的单链表中,实现下列哪个操作,其算法的时间复杂度是O(N)

A.在地址为p的结点之后插入一个结点

B.删除开始结点

C.遍历链表和求链表的第i个结点

D.删除地址为p的结点的后继结点


某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?

A.单链表

B.仅有尾指针的单循环链表

C.仅有头指针的单循环链表

D.双链表


若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间?

A.单链表

B.双链表

C.单循环链表

D.带头结点的双循环链表


将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?

A.单链表

B.单循环链表

C.带尾指针的单循环链表

D.带头结点的双循环链表


对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为

A.O(1)

B.O(N/2)

C.O(N)

D.O(N^2)


设h为不带头结点的单向链表。在h的头上插入一个新结点t的语句是:

A.h=t; t->next=h->next;

B.t->next=h->next; h=t;

C.h=t; t->next=h;

D.t->next=h; h=t;


在单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行

A.s->next=p; p->next=s;

B.s->next=p->next; p=s;

C.s->next=p->next; p->next=s;

D.p->next=s; s->next=p;


带头结点的单链表h为空的判定条件是:

A.h == NULL;

B.h->next == NULL;

C.h->next == h;

D.h != NULL;


已知表头元素为c的单链表在内存中的存储状态如下表所示:

现将f存放于1014H处,并插入到单链表中,若f在逻辑上位于a和e之间,则a、e、f的“链接地址”依次

是:

A.1010H, 1014H, 1004H

B.1010H, 1004H, 1014H

C.1014H, 1010H, 1004H

D.1014H, 1004H, 1010H

答案:D

解析:根据存储状态,单链表的结构如下图所示。其中“链接地址”是指结点next所指的内存地址。当结点f插入后,a指向f, f指向e, e指向b。显然a、e和f的“链接地址”分别是f、b和e的内存地址,即1014H、1004H和1010H。


树最适合于用来表示

A.有序数据元素

B.无序数据元素

C.元素之间无联系的数据

D.元素之间具有分支层次关系的数据


深度为6的二叉树最多有( )个结点。

A.64

B.63

C.32

D.31


若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )个。

A.9

B.11

C.15

D.不确定


一个具有1025个结点的二叉树的高h为( )个。

A.11

B.10

C.11至1025之间

D.10至1024之间


具有9个叶结点的二叉树中有____个度为2的结点。

A.8

B.9

C.10

D.11


度为3的树中第4层上至多有( )个结点。

A.12

B.81

C.27

D.8


在下列存储形式中,( )不是树的存储形式。

A.双亲表示法

B.孩子链表表示法

C.孩子兄弟表示法

D.顺序存储表示法


假设一棵二叉树的结点个数为50,则它的最小高度是( )。

A.4

B.5

C.6

D.7


以下说法错误的是 ( )

A.树形结构的特点是一个结点可以有多个直接前趋

B.线性结构中的一个结点至多只有一个直接后继

C.树形结构可以表达(组织)更复杂的数据

D.树(及一切树形结构)是一种"分支层次"结构

E.任何只含一个结点的集合是一棵树


由3 个结点可以构造出多少种不同的二叉树( )

A.2

B.3

C.4

D.5


中序遍历图示二叉树的结果为 :

A.A,B,C,D,H,E,I,F,G

B.A,B,D,H,I,E,C,F,G

C.H,D,I,B,E,A,F,C,G

D.H,I,D,B,E,F,G,A,C


已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( )。

A.acbed

B.decab

C.deabc

D.cedba


在二叉树的二叉链表结构中,指针p所指结点为叶子结点的条件是( )。

A.p=NULL

B.p->lchild==NULL && p->rchlid==NULL

C.p->lchild==NULL

D.p->rchlid==NULL


二叉树的先序序列和中序序列相同的条件是( )。

A.任何结点至多只有左子女的二叉树

B.任何结点至多只有右子女的二叉树

C.右子树为空

D.左子树为空


一棵二叉树中有7个度为2的结点和5个度为1的结点,其总共有( )个结点。

A.16

B.18

C.20

D.30


用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为( )

A.n-1

B.n

C.n+l

D.2n


如果二叉树的前序遍历结果是12345,后序遍历结果是32541,那么该二叉树的中序遍历结果是什么?

A.23145

B.23154

C.24135

D.无法确定


下面的函数PreOrderPrintLeaves(BinTree BT)按前序遍历的顺序打印出二叉树BT的所有叶子结点。则下列哪条表达式应被填在空中?

void PreOrderPrintLeaves( BinTree BT )

{ if (BT) {

if (___________________) printf(" %d", BT->Data);

PreOrderPrintLeaves(BT->Left );

PreOrderPrintLeaves(BT->Right );

}

}

A.BT->Data != 0

B.!BT->Right

C.!BT->Left

D.!(BT->Left || BT->Right)


完全二叉树的叶子结点数

一棵有 1001 个结点的完全二叉树,其叶子结点数为 ▁▁▁▁▁ 。

A.250

B.254

C.500

D.501


已知二叉树树形如下

,其后序遍历序列为e,a,c,b,d,g,f,在二叉树中与d同层次的结点是( )。

A.c

B.a

C.f

D.g


对二叉搜索树进行什么遍历可以得到从小到大的排序序列?

A.前序遍历

B.后序遍历

C.中序遍历

D.层次遍历


若二叉搜索树是有N个结点的完全二叉树,则不正确的说法是:

A.平均查找效率是O(logN)

B.最大值一定在最后一层

C.最小值一定在叶结点上

D.中位值结点在根结点或根的左子树上


若一棵二叉树的前序遍历序列是{ 4, 2, 1, 3, 6, 5,7 },中序遍历序列是{ 1, 2, 3, 4, 5, 6,7 },则下列哪句是错的?

A.这是一棵完全二叉树

B.所有的奇数都在叶子结点上

C.这是一棵二叉搜索树

D.2是5的父结点


将{ 6, 9, 12, 3, 4, 8}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:

A.4, 3, 6, 8, 12, 9

B.3, 4, 9, 8, 12, 6

C.3, 4, 6, 8, 12, 9

D.4, 3, 8, 12, 9, 6


将{ 32, 2, 15, 65,28, 10 }依次插入初始为空的二叉搜索树。则该树的前序遍历结果是:

A.2, 10, 15, 28, 32, 65

B.32, 2, 10, 15, 28, 65

C.10, 28, 15, 2, 65, 32

D.32, 2, 15, 10, 28, 65


将{ 32, 2, 15, 65,28, 10 }依次插入初始为空的二叉排序树,则该树的后序遍历结果是。

A.2, 10, 15, 28, 32, 65

B.32, 2, 10, 15, 28, 65

C.10, 28, 15, 2, 65, 32

D.32, 2, 15, 10, 28, 65


将{ 32, 2, 15, 65,28, 10 }依次插入初始为空的二叉排序树,则该树的前序遍历结果是。

A.2, 10, 15, 28, 32, 65

B.32, 2, 10, 15, 28, 65

C.10, 28, 15, 2, 65, 32

D.32, 2, 15, 10, 28, 65


已知由(60,30,56,78,12,45)序列构成的二叉排序树,其不成功查找的平均查找长度为( )。

A.21/7

B.28/7

C.15/6

D.21/6


已知一棵由1、2、3、4、5、6、7共7个结点组成的二叉搜索树(查找树),其结构如图所示,问:根结点是什么?

A.1

B.4

C.5

D.不能确定


堆的形状是一棵:

A.二叉搜索树

B.满二叉树

C.非二叉树

D.完全二叉树


创建一个初始堆,含有N个记录,其时间复杂度是:

A.O(logN)

B.O(N)

C.O(NlogN)

D.O(N^2)


哪种树,树中任何结点到根结点路径上的各结点值是有序的?

A.二叉搜索树

B.完全二叉树

C.堆

D.以上都不是


将6、4、3、5、8、9顺序插入初始为空的最大堆(大根堆)中,那么插入完成后堆顶的元素为:

A.3

B.5

C.6

D.9


下列的序列中,哪一组是堆?

A.37,99,45,33,66,10,22,13

B.99,45,66,13,37,10,22,33

C.99,66,45,33,37,10,22,13

D.99,66,22,33,37,13,45,10


将数字 {10, 12, 1, 14, 6,5, 8, 15, 3, 9, 7, 4, 11, 13, 2} 逐一插入一个初始为空的最小堆(小顶堆),得到的堆序列为:

A.1,3,2,12,6,4,8,15,14,9,7,5,11,13,10

B.1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

C.1,2,3,6,7,5,4,15,14,12,9,10,11,13,8

D.1,3,2,6,7,5,4,15,14,12,9,10,11,13,8


用线性时间复杂度的算法将给定序列{ 28, 12, 5, 8, 19,20, 15, 22 }调整为最大堆(大根堆),然后插入30。则结果序列为:

A.{ 5, 8, 28, 12, 19, 20, 15, 22, 30 }

B.{ 30, 28, 20, 22, 12, 5, 15, 8, 19 }

C.{ 30, 28, 22, 20, 19, 15, 12, 8, 5 }

D.{ 30, 28, 20, 22, 19, 5, 15, 8, 12 }


在下述结论中,正确的是:

① 只有2个结点的树的度为1;

② 二叉树的度为2;

③ 二叉树的左右子树可任意交换;

④ 在最大堆(大顶堆)中,从根到任意其它结点的路径上的键值一定是按非递增有序排列的。

A.①④

B.②④

C.①②③

D.②③④


将 { 10, 12, 1, 14,6, 5, 8, 15, 3, 9, 7 } 逐个按顺序插入到初始为空的最小堆中,然后连续执行两次删除最小元素操作(DeleteMin),再插入4,16,此后堆顶的元素是什么?

A.4

B.5

C.7

D.9


利用过滤法将关键字序列 { 37, 66, 48, 29,31, 75 } 建成的最大堆为 __

A.75, 66, 48, 37, 31, 29

B.75, 37, 66, 29, 31, 48

C.75, 66, 48, 29, 31, 37

D.75, 48, 66, 37, 29, 31


下列关于大根堆(至少含 2 个元素)的叙述中,正确的是:

  • (I). 可以将堆看成一棵完全二叉树

  • (II). 可以采用顺序存储方式保存堆

  • (III). 可以将堆看成一棵二叉排序树

  • (IV). 堆中的次大值一定在根的下一层

A.仅 I、II

B.仅 II、III

C.仅 I、II、IV

D.仅 I、III、IV


将关键字 6、9、1、5、8、4、7 依次插入到初始为空的大根堆 H 中,得到的 H 是:

A.9、8、7、6、5、4、1

B.9、8、7、5、6、1、4

C.9、8、7、5、6、4、1

D.9、6、7、5、8、4、1


设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:

A.40

B.36

C.25

D.12


设一段文本中包含4个对象{a,b,c,d},其出现次数相应为{4,2,5,1},则该段文本的哈夫曼编码比采用等长方式的编码节省了多少位数?

A.0

B.2

C.4

D.5


设哈夫曼树中有199个结点,则该哈夫曼树中有()个叶子结点。

A.99

B.100

C.101

D.102


已知权值集合为{5,7,2,3,6,1,4},计算带权路径长度WPL()。

A.73

B.74

C.75

D.76


以下对于堆和哈夫曼树的描述,错误的是:

A.堆一定是完全二叉树。

B.堆的任意非叶节点的左右子树(如果非空)互换,仍然是堆。

C.哈夫曼树的任意非叶节点的左右子(如果非空)树交换后仍是哈夫曼树。

D.对同一组权值{w1 ,w2 , …… , wn},可能存在不同构的两棵哈夫曼树。


由权值分别为8,4,6,5,7的叶子结点生成一棵哈夫曼树,它的带权路径长度为()。

A.30

B.60

C.69

D.90


下面几个符号串编码集合中,不是前缀编码的是( )。

A.{0,10,110,1111}

B.{11,10,001,101,0001}

C.{00,010,0110,1000}

D.{b,c,aa,ac,aba,abb,abc}


以下说法错误的是 ( )。

A.哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。

C.已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。

D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之后。


设有正文ADDBCBDCCBDCAD,字符集为A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。正确的哈夫曼树(要求左孩子权值小于等于右孩子)以及编码是( )。

A.

A:010 B:011 C:1 D:00

B.

A:011 B:111 C:01 D:0

C.

A:00 B:01 C:0 D:1

D.

A:00 B:01 C:10 D:11


若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是:

A.89

B.200

C.208

D.289


下列关于无向连通图特征的叙述中,正确的是:

  1. 所有顶点的度之和为偶数

  1. 边数大于顶点个数减1

  1. 至少有一个顶点的度为1

A.只有1

B.只有2

C.1和2

D.1和3


具有5个顶点的有向完全图有多少条弧?

A.10

B.16

C.20

D.25


对于一个具有N个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是:

A.N−1

B.N

C.(N−1)^2

D.N^2


给定有向图的邻接矩阵如下:

顶点2(编号从0开始)的出度和入度分别是:

A.3, 1

B.1, 3

C.0, 2

D.2, 0


设无向图为 G=(V,E),其中 V={v1,v2,v3,v4},E={(v1,v2),(v3,v4),(v4,v1),(v2,v3),(v1,v3)}。则每个顶点的度依次为:

A.2, 1, 1, 1

B.1, 1, 2, 1

C.3, 2, 3, 2

D.2, 3, 2, 3


对于给定的有向图如下,其邻接矩阵为:

A.

B.

C.

D.


对于给定的有向图如下,其逆邻接表为:

A.

B.

C.

D.


对于给定的有向图如下,其强连通分量为:

A.{1}, {2, 3, 4, 6}, {5}

B.{1}, {2, 3, 4}, {5, 6}

C.{1}, {2, 4, 6}, {3}, {5}

D.{1, 2, 3, 4, 5, 6}


给出如下图所示的具有 7 个结点的网 G,哪个选项对应其正确的邻接矩阵?

A.

B.

C.

D.


将一个 10×10 的对称矩阵 M 的上三角部分的元素 mi,j1≤ij≤10)按列优先存入C语言的一维数组 N 中,元素 m7,2N在中的下标是:

A.15

B.16

C.22

D.23


给定一有向图的邻接表如下。从顶点V1出发按深度优先搜索法进行遍历,则得到的一种顶点序列为:

A.V1,V5,V4,V7,V6,V2,V3

B.V1,V5,V4,V7,V6,V3,V2

C.V1,V2,V3,V4,V7,V6,V5

D.V1,V5,V6,V4,V7,V2,V3


如果从无向图的任一顶点出发进行一次深度优先遍历即可访问所有顶点,则该图一定是____。

A.完全图

B.连通图

C.有回路

D.一棵树


用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法。

A.栈

B.队列

C.树

D.图


给定无向带权图如下,以下哪个是从顶点 a 出发深度优先搜索遍历该图的顶点序列(多个顶点可以选择时按字母序)?

A.abecdfhg

B.abcdehgf

C.abcdefgh

D.abchgfde


给定一个图的邻接矩阵如下,则从V1出发的深度优先遍历序列(DFS,有多种选择时小标号优先)是:

A.V1, V2, V4, V3, V6, V8, V10, V9, V7, V5

B.V1, V2, V3, V4, V5, V6, V7, V9, V8, V10

C.V1, V2, V4, V6, V8, V10, V9, V7, V5, V3

D.V1, V2, V3, V5, V7, V9, V10, V6, V8, V4


对下图从顶点C出发进行深度优先搜索,哪个是错误的搜索序列?

A.CBADEFGH

B.CDABEHFG

C.CDAEHGFB

D.CBAEFGHD


以下算法的功能是()。

void graph1( adjmatrix GA, int i,int n, int *visited)

{

int k, j; Queue q;

cout<<i<<‘ ‘; visited[i]= 1;

InitQueue( q);

EnQueue (q, i);

while ( !EmptyQueue(q) ) {

k= OutQueue (q);

for( j=0; j<n; j++) {

if ( GA[k][j] != 0&& GA[k][j] != MaxValue && !visited[j] ) {

cout<<j<<‘‘; visited[j] = 1;

EnQueue (q, j);

}

}

}

}

A.从顶点i出发进行深度优先遍历

B.从顶点i出发进行广度优先遍历

C.输出顶点i的各邻接点

D.输出从顶点i出发到各顶点的路径


采用邻接表存储的图的广度优先遍历算法类似于二叉树的____算法。

A.先序遍历

B.中序遍历

C.后序遍历

D.层次遍历


对下图从顶点C出发进行广度优先搜索,哪个是正确的搜索序列?

A.CBDAEFGH

B.CDABEHFG

C.CBAEHGFD

D.CBDAEHFG


在图的广度优先遍历算法中用到一个队列,每个顶点最多进队____次。

A.1

B.2

C.3

D.不确定


任何一个带权无向连通图的最小生成树——

A.是唯一的

B.是不唯一的

C.有可能不唯一

D.有可能不存在


给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:

A.10

B.11

C.12

D.14


给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:

A.24

B.23

C.18

D.17


以下哪个不是给定无向带权图的最小生成树?

A.

B.

C.

D.


给出如下图所示的具有 7 个结点的网 G,采用Prim算法,从4号结点开始,给出该网的最小生成树。下列哪个选项给出了正确的树结点收集顺序?

A.4501362

B.4526301

C.4561023

D.4563201


已知无向图 G 如下所示,使用克鲁斯卡尔(Kruskal)算法求图 G 的最小生成树,加入到最小生成树中的边依次是:

A.(b,f), (b,d), (a,e), (c,e), (b,e)

B.(b,f), (b,d), (b,e), (a,e), (c,e)

C.(a,e), (b,e), (c,e), (b,d), (b,f)

D.(a,e), (c,e), (b,e), (b,f), (b,d)


给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:

A.8

B.15

C.20

D.22


给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:

A.22

B.20

C.15

D.8


给定有权无向图的邻接矩阵如下,其最小生成树的总权重是:

A.20

B.22

C.8

D.15


给定有权无向图如下。关于其最小生成树,下列哪句是对的?

A.最小生成树不唯一,其总权重为23

B.最小生成树唯一,其总权重为20

C.边(B, F)一定在树中,树的总权重为23

D.边(H, G)一定在树中,树的总权重为20


给定有权无向图如下。关于其最小生成树,下列哪句是对的?

A.边(B, A)一定在树中,树的总权重为23

B.边(D, C)一定在树中,树的总权重为20

C.最小生成树不唯一,其总权重为23

D.最小生成树唯一,其总权重为20


用于求最小生成树的Prim算法和Kruskal算法都是基于( )思想设计的算法。

A.分治算法

B.穷举

C.贪心算法

D.回溯算法


以下哪个命题是正确的?

A.对于带权无向图G = (V, E),M是G的最小生成树,则M中任意两点V1到V2的路径一定是它们之间的最短路径

B.P是顶点S到T的最短路径,如果该图中的所有路径的权值都加1,P仍然是S到T的最短路径

C.深度优先遍历也可用于完成拓扑排序

D.以上都不是


对于给定的有权无向图G,下列哪个说法是正确的?

A.G的最小生成树中,任意一对顶点间的路径必是它们在G中的最短路径

B.设顶点V到W的最短路径为P。若我们将G中每条边的权重都加1,则P一定仍然是V到W的最短路径

C.单源最短路问题可以用O(∣E∣+∣V∣)的时间解决

D.以上都不对


在一个有权无向图中,如果顶点b到顶点a的最短路径长度是10,顶点c与顶点b之间存在一条长度为3的边。那么下列说法中有几句是正确的?

  1. c与a的最短路径长度就是13

  1. c与a的最短路径长度就是7

  1. c与a的最短路径长度不超过13

  1. c与a的最短路径不小于7

A.1句

B.2句

C.3句

D.4句


若要求在找到从S到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]数组:count[V]记录S到顶点V的最短路径有多少条。则count[V]应该被初始化为:

A.对所有顶点都有count[V]=1

B.对所有顶点都有count[V]=0

C.count[S]=1; 对于其他顶点V则令count[V]=0

D.count[S]=0; 对于其他顶点V则令count[V]=1


数据结构中Dijkstra算法用来解决哪个问题?

A.关键路径

B.最短路径

C.拓扑排序

D.字符串匹配


在AOE网中,什么是关键路径?

A.最短回路

B.最长回路

C.从第一个事件到最后一个事件的最短路径

D.从第一个事件到最后一个事件的最长路径


若要求在找到从S到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]数组:count[V]记录S到顶点V的最短路径有多少条。则count[V]应该被初始化为:

A.count[S]=1; 对于其他顶点V则令count[V]=0

B.count[S]=0; 对于其他顶点V则令count[V]=1

C.对所有顶点都有count[V]=1

D.对所有顶点都有count[V]=0


若要求在找到从S到其他顶点最短路的同时,还给出不同的最短路的条数,我们可以将Dijkstra算法略作修改,增加一个count[]数组:count[V]记录S到顶点V的最短路径有多少条。则count[V]应该被初始化为:

A.对所有顶点都有count[V]=0

B.对所有顶点都有count[V]=1

C.count[S]=0; 对于其他顶点V则令count[V]=1

D.count[S]=1; 对于其他顶点V则令count[V]=0


使用迪杰斯特拉(Dijkstra)算法求下图中从顶点1到其他各顶点的最短路径,依次得到的各最短路径的目标顶点是:

A.5, 2, 3, 4, 6

B.5, 2, 3, 6, 4

C.5, 2, 4, 3, 6

D.5, 2, 6, 3, 4


已知一个长度为16的顺序表L,其元素按关键字有序排列。若采用二分查找法查找一个L中不存在的元素,则关键字的比较次数最多是:

A.4

B.5

C.6

D.7


在散列表中,所谓同义词就是:

A.两个意义相近的单词

B.具有相同散列地址的两个元素

C.被映射到不同散列地址的一个元素

D.被不同散列函数映射到同一地址的两个元素


在下列查找的方法中,平均查找长度与结点个数无关的查找方法是:

A.顺序查找

B.二分法

C.利用哈希(散列)表

D.利用二叉搜索树


对包含N个元素的散列表进行查找,平均查找长度为:

A.O(1)

B.O(logN)

C.O(N)

D.不确定


散列冲突可以被描述为:

A.两个元素除了有不同键值,其它都相同

B.两个有不同数据的元素具有相同的键值

C.两个有不同键值的元素具有相同的散列地址

D.两个有相同键值的元素具有不同的散列地址


设散列表的地址区间为[0,16],散列函数为H(Key)=Key%17。采用线性探测法处理冲突,并将关键字序列{ 26,25,72,38,8,18,59 }依次存储到散列表中。元素59存放在散列表中的地址是:

A.8

B.9

C.10

D.11


采用线性探测法解决冲突时所产生的一系列后继散列地址:

A.必须大于等于原散列地址

B.必须小于等于原散列地址

C.可以大于或小于但不等于原散列地址

D.对地址在何处没有限制


将元素序列{18,23,11,20,2,7,27,33,42,15}按顺序插入一个初始为空的、大小为11的散列表中。散列函数为:H(Key)=Key%11,采用线性探测法处理冲突。问:当第一次发现有冲突时,散列表的装填因子大约是多少?

A.0.27

B.0.45

C.0.64

D.0.73


给定散列表大小为11,散列函数为H(Key)=Key%11。采用平方探测法处理冲突:hi(k)=(H(ki^2)%11将关键字序列{ 6,25,39,61 }依次插入到散列表中。那么元素61存放在散列表中的位置是:

A.5

B.6

C.7

D.8


给定散列表大小为11,散列函数为H(Key)=Key%11。按照线性探测冲突解决策略连续插入散列值相同的4个元素。问:此时该散列表的平均不成功查找次数是多少?

A.1

B.4/11

C.21/11

D.不确定


给定输入序列 {4371, 1323, 6173,4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用开放定址法以及一个二次散列函数h2(X)=7−(X%7)解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)

A.1, 3, 3, 9, 4, 9, 9

B.1, 3, 4, 9, 7, 5, -1

C.1, 3, 4, 9, 5, 0, 8

D.1, 3, 4, 9, 5, 0, 2


设数字 {4371, 1323, 6173,4199, 4344, 9679, 1989} 在大小为10的散列表中根据散列函数 h(X)=X%10得到的下标对应为 {1, 3, 4, 9, 5, 0, 2}。那么继续用散列函数 “h(X)=X%表长”实施再散列并用线性探测法解决冲突后,它们的下标变为:

A.11, 3, 13, 19, 4, 0, 9

B.1, 3, 4, 9, 5, 0, 2

C.1, 12, 9, 13, 20, 19, 11

D.1, 12, 17, 0, 13, 8, 14


在有nn>1000)个元素的升序数组A中查找关键字x。查找算法的伪代码如下所示:

k = 0;

while ( k<n 且 A[k]<x ) k = k+3;

if ( k<n 且 A[k]==x ) 查找成功;

else if ( k-1<n 且 A[k-1]==x ) 查找成功;

else if ( k-2<n 且 A[k-2]==x ) 查找成功;

else 查找失败;

本算法与二分查找(折半查找)算法相比,有可能具有更少比较次数的情形是:

A.当x不在数组中

B.当x接近数组开头处

C.当x接近数组结尾处

D.当x位于数组中间位置


下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2

A.冒泡排序

B.插入排序

C.堆排序

D.快速排序


若数据元素序列{ 11,12,13,7,8,9,23,4,5 }是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是:

A.冒泡排序

B.选择排序

C.插入排序

D.归并排序


数据序列{ 3,2,4,9,8,11,6,20 }只能是下列哪种排序算法的两趟排序结果?

A.冒泡排序

B.选择排序

C.插入排序

D.快速排序


对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下:

第一趟排序结果:2,12,16,5,10,88

第二趟排序结果:2,12,5,10,16,88

第三趟排序结果:2,5,10,12,16,88

则采用的排序方法可能是:

A.冒泡排序

B.希尔排序

C.归并排序

D.基数排序


就排序算法所用的辅助空间而言,堆排序、快速排序、归并排序的关系是:

A.堆排序 < 归并排序 < 快速排序

B.堆排序 > 归并排序 > 快速排序

C.堆排序 < 快速排序 < 归并排序

D.堆排序 > 快速排序 > 归并排序


下面四种排序算法中,稳定的算法是:

A.堆排序

B.希尔排序

C.归并排序

D.快速排序


在基于比较的排序算法中,哪种算法的最坏情况下的时间复杂度不高于O(NlogN)

A.冒泡排序

B.归并排序

C.希尔排序

D.快速排序


N个不同的数据采用冒泡算法进行从大到小的排序,下面哪种情况下肯定交换元素次数最多?

A.从小到大排好的

B.从大到小排好的

C.元素无序

D.元素基本有序


下列排序算法中,时间复杂度不受数据初始状态影响,恒为O(NlogN)的是:

A.冒泡排序

B.直接选择排序

C.堆排序

D.快速排序


输入105个只有一位数字的整数,可以用O(N)复杂度将其排序的算法是:

A.快速排序

B.插入排序

C.希尔排序

D.基数排序


排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为:

A.插入排序

B.选择排序

C.快速排序

D.归并排序


有组记录的排序码为{ 46,79,56,38,40,84 },则利用堆排序的方法建立的初始堆为:

A.79,46,56,38,40,80

B.84,79,56,46,40,38

C.84,56,79,40,46,38

D.84,79,56,38,40,46


{ 12,9,11,8,7,4,5,13,23 }是下列哪种方法第二趟排序后的结果?

A.归并排序

B.堆排序

C.插入排序

D.基数排序


对10TB的数据文件进行排序,应使用的方法是:

A.希尔排序

B.堆排序

C.归并排序

D.快速排序


假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出,堆栈大小至少为:

A.2

B.3

C.4

D.5


若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?

A.b c a e f d

B.c b d a e f

C.d c e b f a

D.a f e d c b


设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?

A.3 2 1 5 4

B.5 1 2 3 4

C.4 5 1 3 2

D.4 3 1 2 5


有六个元素以6、5、4、3、2、1的顺序进栈,问哪个不是合法的出栈序列?

A.2 3 4 1 5 6

B.3 4 6 5 2 1

C.5 4 3 6 1 2

D.4 5 3 1 2 6


令P代表入栈,O代表出栈。若利用堆栈将中缀表达式3*2+8/4转为后缀表达式,则相应的堆栈操作序列是:

A.PPPOOO

B.POPOPO

C.POPPOO

D.PPOOPO


表达式a*(b+c)-d的后缀表达式是:

A.a b c + * d -

B.a b c d * + -

C.a b c * + d -

D.- + * a b c d


若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:

A.S->top == 0

B.S->top == -1

C.S->top != m-1

D.S->top == m-1


若栈采用顺序存储方式存储,现两栈共享空间V[m]:top[i]代表第i(i=1或2)个栈的栈顶;栈1的底在V[0],栈2的底在V[m-1],则栈满的条件是:

A.|top[2]-top[1]|==0

B.top[1]+top[2]==m

C.top[1]==top[2]

D.top[1]+1==top[2]


设栈S和队列Q的初始状态均为空,元素{1, 2, 3, 4, 5, 6,7}依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是{2, 5, 6, 4, 7, 3,1},则栈S的容量至少是:

A.1

B.2

C.3

D.4


给定一个堆栈的入栈序列为{ 1, 2, , n },出栈序列为{ p1, p2, , pn }。如果p2=n,则存在多少种不同的出栈序列?

A.n

B.n−1

C.2

D.1


为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是?

A.堆栈

B.队列

C.树

D.图


某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a、b、c、d、e依次入此队列后再进行出队操作,则不可能得到的出队序列是:

A.b a c d e

B.d b a c e

C.e c b a d

D.d b c a e


若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front和rear的值分别为多少?

A.2和0

B.2和2

C.2和4

D.2和6


如果循环队列用大小为m的数组表示,且用队头指针front和队列元素个数size代替一般循环队列中的front和rear指针来表示队列的范围,那么这样的循环队列可以容纳的元素个数最多为:

A.m-1

B.m

C.m+1

D.不能确定


如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:

A.front+size

B.front+size-1

C.(front+size)%m

D.(front+size-1)%m


在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算是( )。

A.f->next=s; f=s;

B.r->next=s; r=s;

C.s->next=s; r=s;

D.s->next=f; f=s;


循环顺序队列中是否可以插入下一个元素()。

A.与队头指针和队尾指针的值有关

B.只与队尾指针的值有关,与队头指针的值无关

C.只与数组大小有关,与队首指针和队尾指针的值无关

D.与曾经进行过多少次插入操作有关


已知初始为空的队列 Q 的一端仅能进行入队操作,另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1、2、3、4、5,则不能得到的出队序列是:

A.5、4、3、1、2

B.5、3、1、2、4

C.4、2、1、3、5

D.4、1、3、2、5

  • 20
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值