文档库 最新最全的文档下载
当前位置:文档库 › 数据结构与算法复习题含答案

数据结构与算法复习题含答案

数据结构与算法复习题含答案
数据结构与算法复习题含答案

《数据结构与算法》2015-2016学年第

1学期考试复习题

一、 选择题(下面各小题有一个正确答案,请将正确答案的编号填写在各小题的括号内)。

1、在一棵具有5层的满二叉树中结点总数为( A )。

A) 31 B )32 C )33 D )16

2、串的逻辑结构与( D )的逻辑结构不相同。

A )线性表

B )栈

C )队列

D )集合

3、下列序列中,执行第一趟快速排序后得到的序列是( A )。

A )[d,a,e,d,b]f[h,g] B) [c,e,a,d]f[h,g,b] C) [g,a,e,c,b]f[d,h] D) [a,b,c,d,]f[e,g,h] 4、n 个顶点的强连通图至少有( A )条边。

A )n

B )n+1

C )n-1

D )n(n-1) 5、数据结构中,在逻辑上可以把数据结构分成( B )。 A )动态结构和静态结构 B )线性结构和非线性结构

C )紧凑结构和非紧凑结构

D )内部结构和外部结构

6、链式存储的存储结构所占存储空间( A )。

A )分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针

B )只有一部分,存放结点值

C )只有一部分,存储表示结点间关系的指针

D )分两部分,一部分存放结点值,另一部分存放结点所占单元数

7、有一个有序表{1,4,6,10,18,35,42,53,67,71,78,84,92,99}。当用二分查找法查找键值为84的结点时,经( B )比较后查找成功。 A) 4 B)3 C)2 D)12

8、设单链表中指针p 指向结点m ,若要删除m 之后的结点(若存在),则需修改指针的操作为( A )。

A )p->next=p->next->next;

B ) p=p->next;

C )p=p->next->next;

D ) p->next=p;

9、n 个顶点,e 条边的有向图的邻接矩阵中非零元素有( C )个。 A )n B )2e C )e D ) n+e

10、对下图V4的度为( C )。

A )1

B )2

C )3

D )4

11、在一棵度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数为( C )。

A )4

B )5

C )6

D )7

12、在数据结构中,从逻辑上可以把数据结构分为( C )。

A )动态结构和静态结构

B )紧凑结构和非紧凑结构

C )线性结构和非线性结构

D )内部结构和外部结构

13、用一维数组A 进行顺序存储时,若起始地址为loc(A1),元素长度为c ,则A 的第i 个数组单元在存放地址loc(Ai),等于( B )。

A )loc(A1)+i*c

B )loc(A1)+(i-1)*c

C )loc(A1)+i*c+1

D )loc(A1)+(i+1)*c 14、( C )在进行插入操作时,常产生假溢出现象。

A )顺序栈

B )循环队列

C )顺序队列

D )链队列

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

A) 单链表 B) 仅有头指针的单循环链表 C) 双链表 D) 仅有尾指针的单循环链表

16、向一个栈顶指针为hs 的链栈中插入一个s 结点时,应执行( D )。 A) hs->next=s; B) s->next=hs->next; hs->next=s; C) s->next=hs; hs=s; D) s->next=hs; hs=hs->next;

17、在一个链队列中,假定front 和rear 分别为队首和队尾指针,则删除一个结点的操作为( B )。

A) rear=rear->next; B) front=front->next;

C) rear=front->next; D) front=rear->next ;

18、已知栈的最大容量为4。若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( C )。

A) 5,4,3,2,1,6 B) 2,3,5,6,1,4

C) 3,2,5,4,1,6 D) 1,4,6,5,2,3

19、已知广义表L=((x,y,z),a,(u,t,w)),从L 表中取出原子项t 的操作是( D )。

A) Head(Head(Tail(Tail(L))))

B) Tail(Head(Head(Tail(L))))

C) Head(Tail(Head(Tail(L))))

D)Head(Tail(Head(Tail(Tail(L)))))

20、下列各种数据结构中属于线性结构的有( A )。

A)栈B) 二叉树

C) 广义表D) 图

21、倘若在对串的插入、删除运算中,期望运算速度最快,则应采用( C )。

A)顺序表示法B)单字符为结点的单链表表示法

C)等量分块表示法D)不等量分块表示法

22、广义表head(((a,b),(c,d)))的运算结果为( A )。

A)(a,b) B)(c,d)

C)空表D)((a,b),(c,d))

23、n个顶点的图的最小生成树必定( D ),是不正确的描述。

A)不唯一B)权的总和唯一

C)不含回路D)有n条边

24、采用链结构存储线性表时,其地址( B )。

A)必须是连续的B)连续不连续都可以

C)部分地址必须是连续D)必须是不连续的

25、队列的操作的原则是( A )。

A)先进先出B) 后进先出

C) 只能进行插入D) 只能进行删除

26、以下属于顺序存储结构优点的是( A )。

A) 存储密度大B) 插入运算方便

C)删除运算方便D)可方便地用于各种逻辑结构的存储表示27、数据结构研究的内容是( D )。

A)数据的逻辑结构B)数据的存储结构

C)建立在相应逻辑结构和存储结构上的算法D)包括以上三个方面28、在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s 结点,则须执行( A )。

A)q->next=s; s->next=p; B)s->next=p->next; p->next=s;

C)p->next=s->next; s->next=p D)p->next=s; s->next=q;

29、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(D )存储方式最节省时间。

A)顺序表B)双链表C)带头结点的双循环链表D)单循环链表

30、下面关于线性表的叙述中,错误的是哪一个?(D )

A)线性表采用顺序存储,必须占用一片连续的存储单元。

B)线性表采用链接存储,便于插入和删除操作。

C)线性表采用链接存储,不必占用一片连续的存储单元。

D)线性表采用顺序存储,便于进行插入和删除操作。

31、在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为( C )。

A)top不变B)top=0 C)top-- D)top++

32、在一个链队列中,假定front和rear分别为队首和队尾指针,则插入一个结点的操作为( B )。

A)front=front->next; B)rear=rear->next;

C)rear=front->next; D)front=rear->next ;

33、设有一个栈,元素的进栈次序为A, B, C, D, E,下列是不可能的出栈序列是(C )。

A)A, B, C, D, E

B)B, C, D, E, A

C)E, A, B, C, D

D)E, D, C, B, A

34、广义表A=(A,B,(C,D),(E,(F,G))),则head(tail(head(tail(tail(A)))))=( D )。

A)(G) B)(D) C) C D) D

35、设给定问题的规模为变量n,解决该问题的算法所需时间为T n=O(f(n)),T n 表示式中记号O表示( A )。

A)一个数量级别B)一个平均值

C)一个最大值D)一个均方值

36、线性表的链接实现有利于( A )运算。

A)插入B)读元素

C)查找D)定位

37、串的逻辑结构与( D )的逻辑结构不同。

A)线性表B)栈

C)队列D)树

38、下面程序段的时间复杂度是( A )。

s =0;

for( i =0; i

for(j=0;j

s +=B[i][j];

sum = s ;

A)O(n2) B)O(n)

C)O(m*n) D)O(1)

39、二叉树第i(i≥1)层上至多有( C )结点。

A)2i B)2i C)2i-1D)2i-1

40、设单链表中指针p指着结点A,若要删除A之后的结点(若存在),则需要修改指针的操作为( A )。

A)p->next=p->next->next B)p=p->next

C)p=p->nexe->next D)p->next=p

41、设一数列的顺序为1,2,3,4,5,6,通过栈结构不可能排成的顺序数列为( B )。

A)3,2,5,6,4,1 B)1,5,4,6,2,3

C)2,4,3,5,1,6 D)4,5,3,6,2,1

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

A)9 B)11 C)15 D)不能确定

43、对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是( A )。

A)直接选择排序B)直接插入排序

C)快速排序D)起泡排序

44、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为( B )。

A)13 B)33 C)18 D)40

45、如果结点A有3个兄弟,而且B为A的双亲,则B的度为( B )。

A)3 B)4 C)5 D)1

46、线索二叉树中某结点D,没有左孩子的条件是( B )。

A)D->Lchild=Null B) D->ltag=1

C) D->Rchild=Null D) D->ltag=0 47、栈进行插入和删除操作的特点是( A )。

A)LIFO B)FIFO

C)FCFS D)HPF

48、与无向图相关的术语有( C )。

A)强连通图B)入度

C)路径D)弧

49、n个顶点的图的最小生成树必定( D ),是不正确的描述。

A)不唯一B)权的总和唯一

C)不含回路D)有n条边

50、若采用邻接矩阵法存储一个n个顶点的无向图,则该邻接矩阵是一个( D )。

A)上三角矩阵B) 稀疏矩阵

C) 对角矩阵D) 对称矩阵

51、采用链结构存储线性表时,其地址( B )。

A)必须是连续的B)连续不连续都可以

C)部分地址必须是连续D)必须是不连续的

52、倘若在对串的插入、删除运算中,期望运算速度最快,则应采用( B )。

A)顺序表示法B)单字符为结点的单链表表示法

C)等量分块表示法D)不等量分块表示法

53、在循环队列中,若front与rear 分别表示对头元素和队尾元素的位置,则判断循环队列空的条件是( C )。

A)front==rear+1 B)rear==front+1

C)front==rear D)front==0

二、判断题(对的打√,错的打╳)

1、算法和程序都应具有下面一些特征:有输入,有输出,确定性,有穷性,有效性。( 1 )

2、顺序表和一维数组一样,都可以按下标随机(或直接)访问。(1 )

3、线性表的链式存储结构优于顺序存储。(0 )

4、对稀疏矩阵进行压缩存储是为了节省存储空间。( 1 )

5、数据的逻辑结构反映了数据在计算机中的存储方式。( 1 )

6、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个元素结点。( 1 )

7、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为:(rear+l)%n= = front。( 1 )

8、选择好的哈希函数就可以完全避免冲突的发生。(0 )

9、栈和队列都是顺序存取的线性表,它们对存取位置的限制是一样的。(0 )

10、在铁路的列车调度中,假设两侧铁道均为单向行驶道,如果进站的列车序列为123456,则一定能得到435612和135426的出站序列。(0 )

11、广义表是由零个或多个原子或子表所组成的有限序列,所以广义表可能为空表。(0 )

12、数组是一种复杂的数据结构,数组元素之间的关系,即不是线性的也不是树形的。(0 )

13、用邻接表存储图所用的空间大小与图的顶点数和边数都有关。(0 )

14、设散列表长度为m,散列函数为H(key)=key% p,为了减少发生冲突的可能性,p应取小于m的最大奇数。( 1 )

15、在排序前,关键字值相等的不同记录间的前后相对位置保持不变的排序方法称为稳定的排序方法。( 1 )

16、引入线索二叉树的目的是为了能在二叉树中方便的进行插入与删除。(0 )

17、算法分析的主要任务是研究数据之间的逻辑关系。(0 )

18、在一个长度为n的顺序表中删除第i个元素(0i n)时,需向前移动n i 个元素。(0 )

19、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队空的条件为:rear= = front。(0 )

20、在铁路的列车调度中,假设两侧铁道均为单向行驶道,如果进站的列车序列为123456,则只能得到654321的出站序列。(0 )

21、在一棵二叉树中,假定每个结点只有左孩子,没有右孩子,对它分别进行前序遍历和中根遍历,则具有相同的结果。(0 )

22、广义表((a,b),a,b)的表头和表尾是相等的。(0 )

23、线性表可以看成是广义表的特例,如果广义表中的每个元素是原子,则广义表便成为线性表。( 1 )

24、插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也会经常使用。(0 )

25、线索二叉树是一种物理结构。(1 )

26、一个带权无向连通图的最小生成树有一棵或多棵。( 1 )

27、对线性表进行二分查找时,要求线性表必键值有序的链接表。( 1 )29、树中所有结点的度等于所有结点数加1。(0 )

30、图的深度优先搜索是一种典型的回溯搜索的例子,可以通过递归算法求解。( 1 )

三、填空题。

1、在一个带头结点的单循环链表中,p指向尾结点的直接前驱,则指向头结点的指针head可用p表示为:p->next->next 。

2、有向图的边称为弧,边的始点称为弧尾,边的终点称为弧头。有向图顶点的度为出度和入度之和。

3、若一个算法中的语句频度之和为T(n)=3n+nlog2n+n2,则算法的时间复杂度为O(T(n))___。

4、如下程序段的时间复杂度为___O(m*n)___

for(i=1; i<=n; i++){

m=n-i;

for (j=1; j<=m; j++)

sum+=j;

}

5、设某数据结构的二元组形式表示为A=(D,R),D={1,2,3,4,5,6,7,8,9},R={r},r={<1,2>,<1,3>,<1,4>,<2,5>,<2,6>,<3,7>,<3,8>,<3,9>},则该数据结构是____树形___结构。

6、从一个具有n个结点的单链表中查找值等于x的结点时,在查找成功的情况下,平均比较次数为:____(n+1)/2____。

7、在中序线索二叉树中,左线索指向前驱或左孩子。

8、对于一个以顺序实现的循环队列Q[0..m-1],队头、队尾指针分别为f,r,其判空的条件是f=r ,判满的条件是(r+1)%m=f 。

9、若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为___n-i+1____。

10、设有n个结点的完全二叉树,如果按照从自上到下、从左到右从1开始顺序编号,则第i个结点的右孩子结点的编号为_____2n+1__。

11、在一棵二叉树中,如果度为2的结点有25个,则该树的叶子结点一定有____26____个。

12、在一个具有n个顶点的无向完全图中,包含有__n(n-1)/2__条边。

13、线性结构的逻辑特征是除头结点和尾节点外每个节点仅有一个前驱和一个后继结点。

14、设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为____45____

15、设有向图G中有向边的集合E={<1,2>,<1,3>,<2,4>,<3,2>,<3,4>,<4,5>},则该图的拓扑序列为_____13245____。

16、一个队列的入队序列是1,2,3,4,则出队序列为:__________1234____。

17、设有一个顺序循环队列中有M个存储单元,则该循环队列中最多能够存储______M-1_____个队列元素。

18、队列Q,经过下列运算:InitQueue(Q)(初始化队列); InQueue(Q,a); InQueue(Q,b); DeQueue(Q, x); DeQueue(Q, x); 后x值是_______b_____。

19、数据结构包括了数据的逻辑结构、数据的存储结构、数据的运算三个方面的内容。

20、设一棵完全二叉树中有300个结点,则该二叉树的深度为____9____。

21、在一个具有n个顶点的有向完全图中,包含有____n*(n-1)__条边。

22、一棵深度为10 的完全二叉树的结点总数的最小值为__2^9-1__,最大值为____2^10-1______。

23、有一个有序表{3,7,8,15,18,22,34,67,75,84,92,100},当用二分查找法查找键值为92的结点时,经____3__次比较后查找成功。

24、递归算法必须依赖堆栈的处理来实现。

25、队列的运算特点是先进先出,栈的运算特点是先进后出。

26、设有向图G中有向边的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},则该图的拓扑序列为______1423___。

27、在一个长度为n的顺序表L中,删除下标为i的结点,需要移动的结点数为____n-i-1__。

28、假设用front表示队头元素在一维数组中的前一位置,rear表示对尾元素在一维数组中的位置,则队列为空的条件是__front==rear____。

29、一棵含7个结点的完全二叉树的深度为___3____。

30、已知二维数组A[6][10],每个数组元素占4个存储单元,若按行优先顺序存放数组元素a[3][5]的存储地址是1000,则a[0][0]的存储地址是______860___。

31、含n个顶点的无向连通图中至少含有____n-1__条边。

32、对于栈只能在___栈顶___插入和删除元素。

33、树是n个节点的有限集合,其中有且仅有一个___根__节点没有前趋节点,而包含度为0的节点称为___n+1/2__节点。34、指向前趋节点和后继节点的指针称为线索,加了线索的二叉树称为___线索二叉树___。

35、常用的图的遍历方法有两种;深度优先搜索和____广度优先搜索_____。

36、为了能有效地应用HASH查找技术,必须解决的两个问题是____构造一个好的hash函数_____和___确定解决冲突的方法____。

37、顺序表中逻辑上相邻的元素的物理位置相邻。单链表中逻辑上相邻的元素的物理位置不相邻。

38、在一个长度为n的数组的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i 个元素。

四、简答题。

1、已知两个一元多项式A(x)和B(x)如下:

A(x) = 3 + 5x + 7x5 + 9x15B(x) = 4x– 7x5+ 21x7

要求给出图形示意表示:

(1)采用单链表表示一元多项式A(x)和B(x)

(2)给出求和A(x)+B(x)多项式的单链表(要求给出结点指针变化过程)2、简述下列术语:数据,数据元素、数据对象、数据结构、存储结构。

数据:指所有能够输入到计算机中并被计算机程序处理的符号集合。

数据元素:数据集合中的一个实体,是计算机程序中加工处理的基本单位。

数据对象:性质相同的数据元素的集合。是数据的一个子集。

数据结构:相互之间存在一种或多种关系的数据元素的集合。即包括数据元素的集合和数据元素之间的关系的集合。

存储结构:数据结构在计算机中的表示(也称映像)叫做物理结构。又称为存储结构。

3、简述栈和线性表的差别。

4、试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。

抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用

的数据和在这些数据上所进行的操作。 5、已知一棵树边的集合为

{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法画出此树,并回答下列问题。

(1) 哪个是根结点? a

(2) 哪些是叶结点? d m n j k f l (3) 哪个是g 的双亲? c

(4) 哪些是g 的祖先? a b c (5) 哪些是g 的孩子? j k (6) 哪些是e 的子孙? i m n

(7) 哪些是e 的兄弟?哪些是f 的兄弟? dgfh degh (8) 结点b 和n 的层次各是多少? 2 5 (9) 树的深度是多少? 5 (10) 以结点c 为根的子树的深度是多少? 2 (11) 树的度是多少? 3

6、何谓队列的“假溢出”现象,如何解决?

假溢出是是队列在一端进入插入,TOP 值就会增加,在另一端删除,当判断TOP==MAX-1是,就会说明已经队满,但实际在队列的另一端还是有存储空间的,这就是“假溢出”。

解决方法:设置队列为循环队列就可以了。TOP=(TOP+1)MOD (MAX-1)。

7、简述队列和堆栈这两种数据类型的相同点和差异处。

8、

先序:abdce 中序:bdaec 后序:dbeca

9、对于下图,试给出:

(1)每个顶点的入度,出度。

d(1)+ = 1, d(1)- = 2 d(2)+ = 2, d(1)- = 2 d(3)+ = 3, d(3)- = 1 d(4)+ = 3, d(4)- = 0 d(5)+ = 2, d(5)- = 3 d(6)+ = 1, d(6)- = 2

(2)邻接矩阵和入边表图示。 (3)强连通分量。

23652

邻接表0000100010110000001110000001010

01000 入边表(逆邻接表)0

001001001000101010

000101100000

10010

10、已知一组元素的排序码为:(46,74,16,53,14,26,40,38,86,65,27,34)写出用直接选择排序方法进行每趟排序的结果。 【14】,74,16,53,46,26,40,38,86,65,27,34 【14,16】,74,53,46,26,40,38,86,65,27,34 【14,16,26】,53,46,74,40,38,86,65,27,34 【14,16,26,27】,46,74,40,38,86,65,53,34 【14,16,26,27,34】,74,40,38,86,65,53,46 【14,16,26,27,34,38】,40,74,86,65,53,46

【14,16,26,27,34,38,40】,74,86,65,53,46

【14,16,26,27,34,38,40,46】,86,65,53,74

【14,16,26,27,34,38,40,46,53】,65,86,74

【14,16,26,27,34,38,40,46,53,65】,86,74

【14,16,26,27,34,38,40,46,53,65,74】,86

【14,16,26,27,34,38,40,46,53,65,74,86】

11、设二叉树的顺序存储结构如下:

123456789 1011 121314 15 16 17 18 19

20

E A

F ∧ D ∧H ∧∧ C ∧∧∧

G I ∧∧∧∧ B

(2)写出按前序、中序、后序遍历该二叉树所得的结点序列。

前序:EADCBFHGI

中序:ABCDEFGHI

后序:BCDAGIHFE

(3)画出二叉树的后序线索化树。

12、已知某电文中只有ABCDE共5个字母,权值集合W={0.25,0.10,0.20,0.30,0.15},试分析Huffman树的生成过程,画出存储结构表(初态和终态),以及最终的Huffman树,并用0/1给ABCDE这5个字母分别编码,最后写出电文:BAACDE的Huffman编码。A(00),B(110),C(10),D(01),E(111).

BAACDE(11000001001111);

13、某系统在通信联络中只可能出现八种字符,它们分别是ABCDEFGH,其概率分别为0.05,0.19,0.18,0.09,0.12,0.23,0.13,0.01。现要对这八种字符进行Huffman编码,写出该编码值。画出该Huffman树(权值大的结点做左孩子),在所有的结点上标出其权值,并求出这棵树的带权路径长度。

A(01010) B(11) C(000) D(0100) E(011) F(10) G(001) H(01011)

L(n)=0.05*5+0.19*2+0.18*3+0.09*4+0.12*3+0.23*2+0.13*3+0.01*5 = 2.79

14、已知一组元素为(46,25,78,62,12,37,70,29),试画出按元素排列次序插入生成的一棵二叉排序树。

15、简述起泡算法的过程,并写出使用起泡排序方法对下面的整数数列进行排序的结果(写出每趟排序后的结果): {97,66,49,38,26,17,9,6}。 {66,49,38,26,17,9,6,(97)} {49,38,26,17,9,6,(66, 97)} {38,26,17,9,6,(49, 66, 97)} {26,17,9,6,(38, 49, 66, 97)} {17,9,6,(26, 38, 49, 66, 97)} {9,6,(17, 26, 38, 49, 66, 97)} {6,(9, 17, 26, 38, 49, 66, 97)} {(6, 9, 17, 26, 38, 49, 66, 97)}

16、画出下列二叉排序树的平衡结果图,要求:

(1)已知初始查找表的关键字序列为(70,100,80,30,75),构造并画出初始二叉排序树,标明各结点平衡因子+。

(2)插入关键字20,

a. 画出失衡后的二叉排序树,标明各结点平衡因子

b. 画出重新平衡后的二叉排序树,标明各结点平衡因子

17、什么是有向网?已知有向网G=(V,E),其中顶点集V={a,b,c,d,e},边集为:E={,, , , },E 中的每条边是一个三元组,分别表示弧尾,弧头和边的长度(权重)。画出有向网G ,写出其邻接矩阵。 0

030020000010000100000005 18、关键字集合为{19, 36,23, 82,14,55,68,11, 01},哈希函数为:

Hash(key)=key mod 7,试写出哈希表的链地址处理图。

19、写出如下所示二叉树的叶子结点和非终端结点以及各结点所在的层次、树的深度、树的深度,并且写出该树的先序遍历、中序遍历、后序遍历和层次遍历的结果。

叶子结点: GHMJ

非终端结点: ABCDEF

结点所在层次: A(1),B(2),C(2),D(3),E(3),F(3),G(4)H(4),J(4),M(4) 树的深度: 4

先序:ABDGEHCFMJ 中序:DGBEHACMFJ 后序:GDHEBMJFCA 层次:ABCDEFGHMJ ○A ○B ○C ○D ○E ○F ○

G ○H ○M ○J

20、用快速排序方法对数据集{23 45 12 90 78 56}进行排序,写出快速排序第一趟的详细过程,以及简述后面的递归过程。 {23 45 12 90 78 56} {23 45 12 90 78 56} {23 45 12 90 78 56} {23 45 12 56 78 90} {23 45 12 56 78 90}

{(23 45 12 56) 78 (90)}

21、对于下面两个图,求出:

(1)无向图中每个顶点的度,有向图中每个顶点的入度,出度和度。 d(0)=4, d(1)=2, d(2)=3, d(3)=3, d(4)=2.

d(0)+ = 2, d(0)- = 2, d(1)+ = 1, d(1)- = 2, d(2)+ = 1, d(2)- = 3 d(3)+ = 2, d(3)- = 1, d(4)+ = 2, d(0)- = 0 (2)画出有向图的邻接距阵。 0

00001

0000110010010101001

(3)下面是否是连通图或强连通图,如果不是,画出连通分量或强连通分量。

22、给出下列AOV 网的可能的拓扑排序序列。拓扑排序序列是否唯一?在什么情况下拓扑排序无法完成。 CDBAE 或DCBAE 或…… 不唯一

在含有回路的时候拓扑排序无法完成

○A ○E

○B

○D

C

23、已知二叉树的先序序列和中序序列分别为HDACBGFE 和ADCBHFEG 。 (1)画出该二叉树

(2)写出其后序序列;

ABCDEFGH

24、已知带权无向图的邻接表如下所示,其中边表结点的结构为:

依此邻接表从顶点C 出发进行深度优先遍历。

(1)画出由此无向图;

(2)写出遍历过程中得到的从顶点C 开始的可能的一个顶点序列。 DCABEF

五、算法阅读题 1、阅读下面的算法 typedef int Datatype; typedef Struct node {

Datatype data;

Struct node *next;

}lklist;

void delredundant(lklist *&head){

lklist *p,*q,*s;

for(p=head;p!=0;p=p->next)

{

for(q=p->next,s=q;q!=0; )

if (q->data= =p->data)

{s->next=q->next;

free(q);

q=s->next;

}

else

{s=q;

q=q->next;

}

}

}

问:该算法的功能是什么?

2、阅读下面的算法

typedef int Datatype;

typedef Struct node {

Datatype data;

Struct node *lchild,*rchild;

} bitree;

bitree *q[20];

int r=0,f=0,flag=0;

void preorder(bitree *bt, char x)

{

if (bt!=0 && flag= =0)

if (bt->data= =x) { flag=1; return;}

else {r=(r+1)%20; q[r]=bt; preorder(bt->lchild,x); preorder(bt->rchild,x); } }

void parent(bitree *bt,char x) {

int i;

preorder(bt,x);

for(i=f+1; i<=r; i++) if (q[i]->lchild->data==x || q[i]->rchild->data) break;

if (flag= =0) printf("not found x\n");

else if (i<=r) printf("%c",bt->data);

else printf("not parent");

}

问:该算法的功能是什么?

找到根节点到某个节点的路径

3、阅读下面的算法

int minnum=-32768, flag=1;

typedef Struct node{

int key;

Struct node *lchild,*rchild;

}bitree;

void inorder(bitree *bt){

if (bt!=0)

{

inorder(bt->lchild);

if(minnum>bt->key) flag=0;

minnum=bt->key;

inorder(bt->rchild);

}

}

问:该算法的功能是什么?

找最小值

4、已知一个算法设计如下:

LinkList mynote(LinkList L)

{//L是不带头结点的单链表的头指针

if(L&&L->next){

q=L;L=L->next;p=L;

S1:while(p->next) p=p->next;

S2:p->next=q;q->next=NULL;

}

return L;

}

问:

(1)说明语句S1的功能

(2)说明语句组S2的功能

(3)设链表表示的线性表为(a1,a2, …,a n),写出算法执行后的返回值所表示的线性表

5、已知一个算法设计如下:

int unkown(JD r[ ],int n,int k)

{ int low,high,mid,found;

low=1; high=n; found=0;

while((low<=high)&&(found= =0))

{ mid=(low+high)/2;

if(k>r[mid].key) low=mid+1;

else if(k= =r[mid].key) found=1;

else high=mid-1;

}

if(found= =1)

return(mid);

else

return(0);

}

问:该算法的功能是什么?

二分查找关键字,若找到返回其下标,若没有找到返回0

6、已知二叉树的存储结构为二叉链表,阅读下面算法。

typedef Struct node {

DateType data;

Struct node * next;

}ListNode;

typedef ListNode * LinkList ;

LinkList Leafhead=NULL;

Void Inorder (BinTree T) {

LinkList s;

If(T){

Inorder(T->lchild);

If ((!T->lchild)&&(!T->rchild)){

s=(ListNode*)malloc(sizeof(ListNode));

s->data=T->data;

s->next=Leafhead;

Leafhead=s;

}

Inorder(T->rchild);

}

}

对于如下所示的二叉树

(1)画出执行上述算法后所建立的结构;

(2)说明该算法的功能。

中序建立线索二叉树

7、已知一个算法设计如下:

void ABC(BTNode * BT)

{

if BT {

ABC (BT->left);

ABC (BT->right);

cout<data<<' ';

}

}

问:该算法的功能是什么?

后序遍历二叉树

8、已知一个算法设计如下:

void unkown(JD r[ ],int n)

{ int m,i,j,flag=1;

JD x;

m=n-1;

while((m>0)&&(flag==1))

{ flag=0;

for(j=1;j<=m;j++)

if(r[j].key>r[j+1].key)

{ flag=1;

x=r[j];

r[j]=r[j+1];

r[j+1]=x;

}

m--;

}

}

问:该算法的功能是什么?

冒泡法升序排列某个数组

9、阅读下面的算法

typedef char Datatype;

typedef Struct node { Datatype data;

Struct node *lchild,*rchild;

} bitree;

void createbitree(bitree *&bt) {

char ch; scanf("%c",&ch);

if(ch= ='#') {bt=0; return;}

bt=(bitree*)malloc(sizeof(bitree)); bt->data=ch;

createbitree(bt->lchild); createbitree(bt->rchild);

}

问:该算法的功能是什么?

先序创建二叉树

10、阅读下面的算法

void Search(BTNode * BT)

{

if BT {

Search(BT->left);

Search(BT->right);

cout<data<<' ';

}

}

问:该算法的功能是什么?

后序遍历二叉树

六、算法填空题

1、将二叉树bt中每一个结点的左右子树互换的C语言算法如下,其中ADDQ(Q,bt),DELQ(Q),EMPTY(Q)分别为进队、出队和判别队列是否为空的函数,请填写算法中空白之处,完成其功能。

typedef struct node

{int data ; struct node *lchild, *rchild; }btnode;

void EXCHANGE(btnode *bt)

{btnode *p, *q;

if (bt){ADDQ(Q,bt); //入队

while(!EMPTY(Q)) //队不空,那么我们就出队

{p=DELQ(Q);

if(p->lchild) _ (1) ADDQ(Q, p->lchild)__; //左孩子不空,左

孩子入队

if(p->rchild) _ (2) ADDQ(Q, p->rchild)__; //右孩子不空,右

孩子入队

//下面交换左右孩子

q=_(3)p->rchild __; //

p->rchild=_(4)p->lchild __;

_ (5)p->lchild _=q;

}

}

}

2、下列算法将以二叉链表存储的二叉树中的叶子结点按从左到右的顺序链成一个带头结点的双向循环链表,链接时,结点的Lchild域作为前链域,指向结点的直接前驱,结点的Rchild域作为后链域,指向结点的直接后继。算法中,使用一个顺序栈stack,栈顶指针为top,p,t为辅助指针,head为双向循环链表的头指针。试填充算法中的空格,以完整算法。

void leafchain(BiTree &bt)

{ p=(BiTree)malloc(sizeof(BiTNode));

if(!p){printf(“OVERFLOW\n”;exit(1); }

head=p; top=1;

if(bt) //如果树不为空

{top++; stack[top]=bt; // 入栈

while(top) //栈不空

{ t=stack[top]; top--; // 出栈

if(!t->Lchild && !t->Rchild) //该节点的左右孩子都为空,那么这是叶子节点

{

//双链表的创建操作

(1) p->Rchild = t ;

t->Lchild=p ;

(2) t->Rchild = NULL ;

}

else {

if( (3) t->Lchild){top++; stack[top]= t->Rchild ; }//如果有左孩子那么左孩子入栈

if( (4) t->Rchild){top++; stack[top]= (5) ; }//如果有右孩子那么右孩子入栈

}

}

p->Rchild=head; head->Lchild=p; //构成循环链表

}

}

3、下列算法的功能是在链式结构上实现简单选择排序,请在空白处填入适当的内容。

void simpleselectsorlklist(lklist *&head)

{

lklist *p,*q,*s;

int min, t;

if(head==0 ||head->next==0) return;//如果为空表或只有一个节点,不用排序了

for(q=head; q!=0;q=q->next) //只要节点存在,那么一直向后移动

//此时的q一直指向乱序的第一个位置{

(1)min = q->data;//min赋初值

s=q; //s指向无序的第一个元素

for(p=q->next; p!=0;p=p->next) //p从s的下一个位置开始找

if(min>p->data) //如果发现有一个比这些乱序中的第一个元素,那么s指向这个最小的值,同时min我们也要变成这个值

{ (2)min = p->data;

s=p;}

if(s!=q) //如果这个最小值不在我们的乱序的第一个位置,那么我们就变换位置,让这个最小值变到无序序列的第一个位置,然后我们的有序序列就又多了一个成员

//下面实现交换。此时q指向无序序列的第一个位置,即我们要变成最小值的位置s指向我们最小值的位置。

{ (3)min = s->data;

(4)s->data = q->data;

(5)q->data = min;

}

}

}

4、下列算法的功能是比较两个链串的大小,其返回值为:

?

?

?

?

?

=

=

-

=

2

1

2

1

2

1

2

1

1

1

)

,

(

s

当s

s

当s

s

当s

s

s

comstr

φ

请在空白处填入适当的内容。

int comstr(LinkString s1,LinkString s2)

{//s1和s2为两个链串的头指针

while(s1&&s2){

if(s1->datedate) return -1;

if(s1->date>s2->date) return1;

(1)s1 = s1->next;

(2)s2 = s2->next;

}

if( (3)(!s1)&&s2) return -1;//s1短些

if( (4)s1&&(!s2)) return 1;//s1长些

(5)return 0;//一样长且一直不大于也不小于}

数据结构与算法模拟试题

一、选择题 1.在逻辑上可以把数据结构分成() A.线性结构和非线性结构 B.动态结构和静态结构 C.紧凑结构和非紧凑结构 D.内部结构和外部结构 2.单链表中各结点之间的地址() A.必须连续 B.部分必须连续 C.不一定连续 D.以上均不对 3.在一个长度为n的顺序表中向第i个元素(0front==L C.P==NULL D.P->rear==L 12. 已知P为单链表中的非首尾结点,删除P结点的后继结点Q的语句为()。 A.P->NEXT=Q->NEXT;FREE(Q); B.Q->NEXT=P; FREE(Q); C.Q->NEXT=P->NEXT;FREE(Q); D.P->NEXT=S;S->NEXT=P; 13.循环队列SQ队满的条件是()。 A.SQ->rear==SQ->front B. (SQ->rear+1)%MAXLEN==SQ->front C.SQ->rear==0 D. SQ->front==0 14.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为()。 A、79,46,56,38,40,80 B、84,79,56,38,40,46 C、84,79,56,46,40,38 D、84,56,79,40,46,38 15.排序趟数与序列原始状态(原始排列)有关的排序方法是()方法。 A、插入排序 B、选择排序 C、冒泡排序 D、快速排序 16.下列排序方法中,()是稳定的排序方法。 A、直接选择排序 B、二分法插入排序

力 扣 数 据 结 构 与 算 法

前端如何搞定数据结构与算法(先导篇) 「观感度:?」 「口味:锅包肉」 「烹饪时间:20min」 本文已收录在Github? 为什么要学习数据结构与算法? 在0202年的今天,由于每天被无数的信息轰炸,大多数人已经变得越来越浮躁了,并且丧失了独立思考的能力。 你可能会经常听到这样的感慨: 技术人究竟能走多远?我遇到了天花板 35岁的程序员要如何面对中年危机? 技术更新太快,好累,学不动了 然后,你也变得焦虑起来。那你有没有静下心来想过,如何才能抵御年龄增长并且使自己增值呢? 无非是终身学习,持续修炼自己的内功。内功也就是基础知识和核心概念,这些轰轰烈烈发展的技术本质,其实都是基础知识,也就是我们在大学里学过的基础课-程。 操作系统 计算机组成原理 计算机网络 编译原理

设计模式 数据结构与算法 这也就是为什么越靠谱的面试官越注重你基础知识的掌握程度,为什么越牛的的企业越重视你的算法能力。因为当你拥有了这些,你已经比大多数人优秀了。你的天花板由你自己来决定,大家口中的中年危机可能并不会成为你的危机。新技术来临时,你对它的本质会看得更加透彻,学起来会一通百通。这样的人才,公司培养你也会花费更少的成本。 (不过,一辈子做个开开心心的 CRUD Boy 也是一种选择。) 数据结构与算法之间的关系 Rob Pikes 5 Rules of Programming中的第五条是这样说的: Data dominates. If youve chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming. 数据占主导。如果您选择了正确的数据结构并组织得当,那么这些算法几乎总是不言而喻的。数据结构而非算法是编程的核心。 瑞士计算机科学家,Algol W,Modula,Oberon 和 Pascal 语言的设计师 Niklaus Emil Wirth 写过一本非常经典的书《Algorithms + Data Structures = Programs》,即算法 + 数据结构 = 程序。 我们可以得出结论,数据结构与算法之间是相辅相成的关系。数据结构服务于算法,算法作用于特定的数据结构之上。 数据结构与算法好难,怎么学?

数据结构与算法复习题库含答案

数据结构复习题 第一章概论 一、选择题 1、研究数据结构就是研究( D )。 A. 数据的逻辑结构 B. 数据的存储结构 C. 数据的逻辑结构和存储结构 D. 数据的逻辑结构、存储结构及其基本操作 2、算法分析的两个主要方面是( A )。 A. 空间复杂度和时间复杂度 B. 正确性和简单性C. 可读性和文档性 D. 数据复杂性和程序复杂性 3、具有线性结构的数据结构是( D )。 A. 图 B. 树 C. 广义表 D. 栈 4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、( B )等5个特性。 A. 可执行性、可移植性和可扩充性 B. 可执行性、有穷性和确定性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和确定性 5、下面程序段的时间复杂度是( C )。 fori0;im;i++ forj0;jn;j++ a[i][j]i*j; A. Om2 B. On2 C. Om*n D. Om+n 6、算法是( D )。

A. 计算机程序 B. 解决问题的计算方法 C. 排序算法 D. 解决问题的有限运算序列 7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示( C )。 A. On B. Onlog2n C. On2 D. Olog2n 8、下面程序段的时间复杂度为( C )。 i1; whilein ii*3; A. On B. O3n C. Olog3n D. On3 9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的( B )和运算等的学科。 A. 结构 B. 关系 C. 运算 D. 算法 10、下面程序段的时间复杂度是( A )。 is0; whilesn i++;s+i; A. On B. On2 C. Olog2n D. On3 11、抽象数据类型的三个组成部分分别为( A )。 A. 数据对象、数据关系和基本操作 B. 数据元素、逻辑结构和存储结构 C. 数据项、数据元素和数据类型 D. 数据元素、数据结构和数据类型 12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是(D)。

数据结构与算法习题及答案

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 (2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。 A.存储结构B.存储实现 C.逻辑结构D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说法正确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是()。 A.顺序队列B.链表C.有序表D.链栈 (6)以下数据结构中,()是非线性数据结构 A.树B.字符串C.队D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90;y=100; while(y>0) if(x>100) {x=x-10;y--;} elsex++; (2)for(i=0;i

[第1题-60题汇总]微软数据结构+算法面试100题

精选微软等公司数据结构 精选微软等公司数据结构++算法面试100题 -----[第1题-60题总] 资源说明: 此份,是为微软等公司数据结构+算法面试100题,之前60题的汇总。 总结整理了前第1题-第60题。特此并作此一份上传。以飨各位。:)。 -------------------------------- 相关资源,包括答案,下载地址: [答案V0.2版]精选微软数据结构+算法面试100题[前20题]--答案修正 https://www.wendangku.net/doc/9513246539.html,/source/2813890 //此份答案是针对最初的V0.1版本,进行的校正与修正。 [答案V0.1版]精选微软数据结构+算法面试100题[前25题] https://www.wendangku.net/doc/9513246539.html,/source/2796735 [第二部分]精选微软等公司结构+算法面试100题[前41-60题]: https://www.wendangku.net/doc/9513246539.html,/source/2811703 [第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题] https://www.wendangku.net/doc/9513246539.html,/source/2778852 更多资源,下载地址: http://v_july_https://www.wendangku.net/doc/9513246539.html,/ 很快,我将公布第21-40题的答案,敬请期待。:).. 如果你对以下的前第1-60题,有好的思路,和算法,欢迎跟帖回复, 或者,联系我,发至我的邮箱, zhoulei0907@https://www.wendangku.net/doc/9513246539.html,。 My CSDN Blog:https://www.wendangku.net/doc/9513246539.html,/v_JULY_v My sina Blog:https://www.wendangku.net/doc/9513246539.html,/shitou009 帖子维护地址: [整理]算法面试:精选微软经典的算法面试100题[前1-60题] https://www.wendangku.net/doc/9513246539.html,/u/20101023/20/5652ccd7-d510-4c10-9671-307a56006e6d.html -------------------------------------- July、2010、/11.12.请享用。:)。 1

数据结构与算法复习题10(C语言版)

习 9解答 判断题: 1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。 答:FALSE (错。链表表示的有序表不能用折半查找法。) 2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。 答:FALSE (错。因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。) 3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。( ) 答:TRUE 4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。 答:TRUE 5.查找表是由同一类型的数据元素(或记录)构成的集合。 答:TRUE 单选题: 6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。 A. 1、2、3 B. 9、5、2、3 C. 9、5、3 D.9、4、2、3 答:D (第一次??2/)181(+ = 9,第二次??2/)81(+ = 4,第三次??2/)31(+ = 2, (第四次??2/)33(+ = 3,故选D. 7. 顺序查找法适合于存储结构为____________的线性表。 A.散列存储 B.顺序存储或链式存储 C.压缩存储 D.索引存储 答:B 8.对线性表进行二分查找时,要求线性表必须( )。 A .以顺序方式存储 B. 以链接方式存储 C .以顺序方式存储,且结点按关键字有序排序 D. 以链接方式存储,且结点按关键字有序排序 答:C 9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。表中已有4个记录(如下图

阿里校园招聘历年经典面试题汇总:算法工程师

阿里校园招聘历年经典面试题汇总:算法工程师 (1)、jvm 原理 (2)、minor GC 与 Full GC (3)、HashMap 实现原理 (4)、java.util.concurrent 包下使用过哪些 (5)、concurrentMap 和 HashMap 区别 (6)、信号量是什么,怎么使用? (7)、阻塞队列了解吗?怎么使用? (8)、JAVA NIO 是什么? (9)、类加载机制是怎样的 (10)、什么是幂等性 (11)、有哪些 JVM 调优经验 (12)、分布式 CAP 了解吗? (13)、hdfs怎么添加Datanode,添加后hdfs会有什么操作? (14)、Hbase 跟关系数据库对比优缺点?为什么 Hbase 索引速度快 (15)、Hbase 大压缩与小压缩区别 (16)、Hive 与 Hbase 的使用场景 (17)、简单说说Spark功能,spark 与hive有无依赖关系? (18)、zookeeper 有什么应用场景,怎么选举的?3 个节点挂掉一个能正常工作吗? (19)、Hbase 中 zookeaper 作用 (20)、Hbase 写操作什么时候返回 (21)、mysql 有哪些存储引擎?各自特点 (22)、用过哪些设计模式?怎样实现线程安全单例模式? (23)、用过哪些RPC框架? (24)、什么是AOP? (25)、决策树算法怎么实现的? (26)、java垃圾回收会出现不可回收的对象吗?怎么解决内存泄露问题?怎么

定位问题源? (27)、终止线程有几种方式?终止线程标记变量为什么是 valotile 类型?(28)、用过哪些并发的数据结构? cyclicBarrier 什么功能?信号量作用?数据库读写阻塞怎么解决? (29)、乐观锁与悲观锁,怎么实现乐观锁? (30)、开发过分布式框架?怎么实现分布式事务? (31)、spark streaming与storm区别? (32)、找到最大子数组的 start,和end下标 (33)、用过 CDH中什么任务调度? (34)、spark streaming时间间隔设置很小会出现什么状况? (35)、搜索引擎了解多少?你认为搜索引擎的难点在哪里? (36)、RPC 了解吗?怎么监控 RPC 状态,找出出现问题的 RPC 连接?(37)、spring 框架了解多少? (38)、flume应用场景 (39)、找出一串字符中第一个不重复字符的下标。 点击查看详细面经〉〉〉〉〉〉〉〉〉〉〉〉 更多精品干货>>>>>>>>>>> 更多阿里机器学习/数据挖掘经典面试题 其他名企机器学习/数据挖掘经典面试题

计算机学院数据结构与算法分析期末试题(2007级B)_无答案

四川大学期末考试试题 (2008-2009学年第1学期) 课程号:课程名称:数据结构与算法分析(B卷)任课教师: 1.数据类型为()。 A)数据项的集合B)值的集合及定义在其上的一组操作的总称 C)数据元素的集合D)关键字的集合 2.链表不具有的特点是()。 A)可随机直接访问任一元素B)插入删除不需要移动元素 C)不必事先估计元素个数D)所需空间与线性表长度成正比 3.设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。 A)ABCD B)DCBA C)ABCD D)DABC 4.将对称矩阵A nxn压缩存储在一维数组B[m]中,则m的值至少为()。 A)n(n+1)/2 B)n(n-1)/2 C)n(n+1) D)n2 5.设二叉树中有n2个度为2的结点,n1个度为1的结点,n0个叶子结点,则此二叉树中空指针域个数为()。 A)n0+n1+n2 B)n2+n1+2n0 C)2n2+n1D)2n0+n1 6.对于具有n个顶点的强连图,其弧条数的最小值为()。 A)n+1 B)n C)n-1 D)n-2 7.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。 A)2k-1-1 B)2k-1C)2k-1+1 D)2k-1 8.归并排序的时间复杂度是()。 A)O(1) B)O(n) C)O(n2) D)O(nlogn) 9.每一趟都能选出一个元素放在其最终位置上,并且不稳定的排序算法是()。 A)冒泡排序B)简单选择排序C)希尔排序D)直接插入排序10.按照二叉树的定义,具有3个结点的不同形态(相似)的二叉树有()种。 A)3 B)4 C)5 D)6 二、(本题10分) 利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算,请简述算法思想。 三、(本题10分) 已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。 先序序列:ABCDEFGH IJ 中序序列:CBEDAGHFJI 注:试题字迹务必清晰,书写工整。本题2页,本页为第1页 教务处试题编号:

数据结构与算法分析习题与参考答案

大学 《数据结构与算法分析》课程 习题及参考答案 模拟试卷一 一、单选题(每题 2 分,共20分) 1.以下数据结构中哪一个是线性结构?( ) A. 有向图 B. 队列 C. 线索二叉树 D. B树 2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点, 则执行如下( )语句序列。 A. p=q; p->next=q; B. p->next=q; q->next=p; C. p->next=q->next; p=q; D. q->next=p->next; p->next=q; 3.以下哪一个不是队列的基本运算?() A. 在队列第i个元素之后插入一个元素 B. 从队头删除一个元素 C. 判断一个队列是否为空 D.读取队头元素的值 4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( ) 个不同的字符串? A.14 B.5 C.6 D.8 5.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。 以下6-8题基于图1。 6.该二叉树结点的前序遍历的序列为( )。 A.E、G、F、A、C、D、B B.E、A、G、C、F、B、D C.E、A、C、B、D、G、F D.E、G、A、C、D、F、B 7.该二叉树结点的中序遍历的序列为( )。 A. A、B、C、D、E、G、F B. E、A、G、C、F、B、D C. E、A、C、B、D、G、F E.B、D、C、A、F、G、E 8.该二叉树的按层遍历的序列为( )。

A.E、G、F、A、C、D、B B. E、A、C、B、D、G、F C. E、A、G、C、F、B、D D. E、G、A、C、D、F、B 9.下面关于图的存储的叙述中正确的是( )。 A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 10.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建 堆的结果?( ) A. a,g,h,m,n,p,q,x,z B. a,g,m,h,q,n,p,x,z C. g,m,q,a,n,p,x,h,z D. h,g,m,p,a,n,q,x,z 二、填空题(每空1分,共26分) 1.数据的物理结构被分为_________、________、__________和___________四种。 2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________, 在表尾插入元素的时间复杂度为____________。 3.向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________; 删除一个结点时,需要执行的操作是______________________________(假设栈不空而 且无需回收被删除结点)。 4.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左 孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有 双亲,则双亲结点的编号为________。 5.当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整 到____________位置为止。 6.以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。 7.表示图的三种常用的存储结构为_____________、____________和_______________。 8.对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7 作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。 9.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为 ____________,空间复杂度为___________。 10.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________ 个,其子树数目最少为________,最多为________。 三、运算题(每题 6 分,共24分) 1.写出下列中缀表达式的后缀形式: (1)3X/(Y-2)+1 (2)2+X*(Y+3) 2.试对图2中的二叉树画出其: (1)顺序存储表示的示意图; (2)二叉链表存储表示的示意图。 3.判断以下序列是否是小根堆? 如果不是, 将它调 图2 整为小根堆。 (1){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 } (2){ 05, 23, 20, 28, 40, 38, 29, 61, 35, 76, 47, 100 } 4.已知一个图的顶点集V和边集E分别为: V={1,2,3,4,5,6,7};

数据结构算法面试100题

数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node }; 2.设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 参见C:\Users\Administrator\Desktop\demo\Stack 分析:min时间复杂度要达到O(1),需要我们在栈中存储最小元素 3.求子数组的最大和(数组) 题目: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 分析:根据dp思想 #include #define N 8 int main() { int i, a[N] = {1, -2, 3, 10, -4, 7, 2, -5}; int from[N], result[N], max;

数据结构与算法试题

数据结构与算法试题 一、单选题 1、在数据结构的讨论中把数据结构从逻辑上分为 (C ) A 内部结构与外部结构 B 静态结构与动态结构 C 线性结构与非线性结构 D 紧凑结构与非紧凑结构。 2、采用线性链表表示一个向量时,要求占用的存储空间地址(D ) A 必须就是连续的 B 部分地址必须就是连续的 C 一定就是不连续的 D 可连续可不连续 3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为( D )。 A n B n/2 C (n-1)/2 D (n+1)/2 4、在一个单链表中,若q结点就是p结点的前驱结点,若在q与p之间插入结点s,则执行( D )。 A s→link = p→link;p→link = s; B p→link = s; s→link = q; C p→link = s→link;s→link = p; D q→link = s;s→link = p; 5、如果想在4092个数据中只需要选择其中最小的5个,采用( C )方法最好。 A 起泡排序 B 堆排序 C 锦标赛排序 D 快速排序 6、设有两个串t与p,求p在t中首次出现的位置的运算叫做( B )。 A 求子串 B 模式匹配 C 串替换 D 串连接 7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放该数

组至少需要的存储字数就是( C )。 A 80 B 100 C 240 D 270 8、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。 A 栈 B 队列 C 循环队列 D 优先队列 9、一个队列的进队列顺序就是1, 2, 3, 4,则出队列顺序为( C )。 10、在循环队列中用数组A[0、、m-1] 存放队列元素,其队头与队尾指针分别为front与rear,则当前队列中的元素个数就是( D )。 A ( front - rear + 1) % m B ( rear - front + 1) % m C ( front - rear + m) % m D ( rear - front + m) % m 11、一个数组元素a[i]与( A )的表示等价。 A *(a+i) B a+i C *a+i D &a+i 12、若需要利用形参直接访问实参,则应把形参变量说明为( B )参数。 A 指针 B 引用 C 值 D 变量 13、下面程序段的时间复杂度为( C ) for (int i=0;i

典型数据结构面试题

数据结构 1?在一个单链表中p所指结点之前插入一个s (值为e)所指结点时,可执行如下操作: q=head; while (q->next!=p)q=q->next; s= newNode;s->data=e; q->next=;// 填空 s->next=;// 填空 2.线性表的顺序存储结构是一种的存储结构,而链式存储结构是一种___的 存储结构。 A.随机存取 B.索引存取 C.顺序存取 D.散列存取 3.线性表若采用链式存储结构时,要求内存中可用存储单元的地址___。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 4?在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p 之间插入s结点,则执行_。 A.s->next=p->next;p->next=s; B.p->next=s->next;s->next=p;

C.q->next=s;s->next=p; D.p->next=s;s->next=q; 5.在一个单链表中,若p 所指结点不是最后结点,在p 之后插入s 所指结点,则执行__。 A.s->next=p;p->next=s; B.s->next=p->next;p->next=s; C.s->next=p->next;p=s; C. p->next=s;s->next=p; 6.在一个单链表中,若删除p 所指结点的后续结点,则执行__。 A.p->next= p->next->next; B.p= p->next;p->next= p->next->nex;t C.p->next= p->next; D.p= p->next->next; 7.链表不具备的特点是__。 A 可随机访问任何一个元素 B 插入、删除操作不需要移动元素 C无需事先估计存储空间大小D所需存储空间与线性表长度成正比 8.以下关于线性表的说法不正确的是。 A 线性表中的数据元素可以是数字、字符、记录等不同类型。 B 线性表中包含的数据元素个数不是任意的。 C 线性表中的每个结点都有且只有一个直接前趋和直接后继。 D 存在这样的线性表:表中各结点都没有直接前趋和直接后继。 9?在一个长度为n的顺序表中删除第i个元素,要移动个元素。如果要在第 i 个元素前插入一个元素,要后移()个元素。N-I N-I+1

算法与数据结构试题及答案

数据结构模拟试题... 一、简答题(15分,每小题3分) 1.简要说明算法与程序的区别。 2.在哈希表中,发生冲突的可能性与哪些因素有关?为什么? 3.说明在图的遍历中,设置访问标志数组的作用。 4.说明以下三个概念的关系:头指针,头结点,首元素结点。 5.在一般的顺序队列中,什么是假溢出?怎样解决假溢出问题? 二、判断题(10分,每小题1分) 正确在括号内打√,错误打× ( )(1)广义表((( a ), b), c ) 的表头是(( a ), b),表尾是( c )。 ( )(2)在哈夫曼树中,权值最小的结点离根结点最近。 ( )(3)基数排序是高位优先排序法。 ( )(4)在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过1。 ( )(5)在单链表中,给定任一结点的地址p,则可用下述语句将新结点s插入结点p的后面:p->next = s; s->next = p->next; ( )(6)抽象数据类型(ADT)包括定义和实现两方面,其中定义是独立于实现的,定义仅给出一个ADT的逻辑特性,不必考虑如何在计算机中实现。 ( )(7)数组元素的下标值越大,存取时间越长。 ( )(8)用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。 ( )(9)拓扑排序是按AOE网中每个结点事件的最早发生时间对结点进行排序。 ( )(10)长度为1的串等价于一个字符型常量。 三、单项选择题(10分, 每小题1分) 1.排序时扫描待排序记录序列,顺次比较相邻的两个元素的大小,逆序时就交换位置。这是哪种排序方法的基本思想? A、堆排序 B、直接插入排序 C、快速排序 D、冒泡排序 2.已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应该: A)将邻接矩阵的第i行删除B)将邻接矩阵的第i行元素全部置为0 C)将邻接矩阵的第i列删除D)将邻接矩阵的第i列元素全部置为0 3.有一个含头结点的双向循环链表,头指针为head, 则其为空的条件是: A.head->priro==NULL B. head->next==NULL C. head->next==head D. head->next-> priro==NULL 4. 在顺序表( 3, 6, 8, 10, 12, 15, 16, 18, 21, 25, 30 ) 中,用折半法查找关键码值11,所需的关键码比

国家二级ACCESS机试选择题(数据结构与算法)模拟试卷15

国家二级ACCESS机试选择题(数据结构与算法)模拟试卷15 (总分:64.00,做题时间:90分钟) 一、选择题(总题数:32,分数:64.00) 1.设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为 (分数:2.00) A.4 √ B.6 C.m-5 D.m-6 解析:解析:初始状态为:front=rear=m,rear-front=0,此时队列为空。经过一系列入队与退队运算后,front=15,rear=20。队尾大于队头,则队尾rear减队头front等于5个元素。此时队列中有5个元素,而查找最大项至少要比较n.1次,就是4次。因此选项A正确。 2.下列叙述中正确的是 (分数:2.00) A.循环队列属于队列的链式存储结构 B.双向链表是二叉树的链式存储结构 C.非线性结构只能采用链式存储结构 D.有的非线性结构也可以采用顺序存储结构√ 解析:解析:顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构。例如,完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。 3.某二叉树中有n个叶子结点,则该二叉树中度为2l的结点数为 (分数:2.00) A.n+1 B.n-1 √ C.2n D.n/2 解析:解析:任意一棵二叉树,如果叶结点数为N 0,而度数为2的结点总数为N 2,则N 0 =N 2 +1;N 2 =N 0 -1。所以如果二叉树中有n个叶子结点,则该二叉树中度为2的结点数为n-1。因此选项B正确。4.下列叙述中错误的是 (分数:2.00) A.算法的时间复杂度与算法所处理数据的存储结构有直接关系 B.算法的空间复杂度与算法所处理数据的存储结构有直接关系 C.算法的时间复杂度与空间复杂度有直接关系√ D.算法的时间复杂度与空间复杂度没有必然的联系 解析:解析:算法的时间复杂度,是指执行算法所需要的计算工作量。算法的空间复杂度,是指执行这个算法所需要的内存空间。两者与算法所处理数据的存储结构都有直接关系,但两者之间没有直接关系,因此选项C错误。 5.设栈的顺序存储空间为S(0:49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素)。则栈中的元素个数为 (分数:2.00) A.30 B.29 C.20 √ D.19

数据结构与算法各章试题

一、选择题 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于() A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2)这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4.一个算法应该是()。A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C. 5. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是()(1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法(3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?()】 A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对x的赋值语句的频度为()】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A.O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中n为正整数,则最后一行的语句频度在最坏情况下是() A. O(n) B. O(nlogn) C. O(n3) D. O(n2) 】 13.以下哪个数据结构不是多型数据类型()】 A.栈B.广义表C.有向图D.字符串 14.以下数据结构中,()是非线性数据结构】

数据结构与算法试卷(B卷)

广西科技大学2015 —2016 学年第 1 学期课程考核试题试卷 考核课程数据结构与算法( B 卷)考核班级物联网141 学生数36 印数40 考核方式闭卷考核时间120 分钟 一、单项选择题(在每小题的四个备选答案中,选出一个正确答案。每小题1分,共33分) 1、算法是()。 A. 计算机程序 B. 解决问题的计算方法 C. 排序算法 D. 解决问题的有限运算序列 2、一个顺序表的第一个元素的存储地址是90,每个元素的长度为2,则第8个元素的存储地址是()。 A. 102 B. 104 C. 106 D. 108 3、在一个长度为n的顺序表中删除第i个元素,需要向前移动()个元素。 A. n-i B. n-i+1 C. n-i-1 D. i+1 4、在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next==head,则()。 A. p指向头结点 B. p指向尾结点 C. p的直接后继是头结点 D. p的直接后继是尾结点 5、在以下的叙述中,正确的是()。 A. 线性表的顺序存储结构优于链表存储结构 B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况 C. 线性表的链表存储结构适用于频繁插入/删除数据元素的情况 D. 线性表的链表存储结构优于顺序存储结构 6、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入一个结点s,则执行()。 A. s->next=p->next; p->next=s; B. p->next=s->next; s->next=p; C. q->next=s; s->next=p; D. p->next=s; s->next=q; 7、在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,修改指针的操作是()。 A. p->next=q; q->prior=p; p->next->prior=q; q->next=q; B. p->next=q; p->next->prior=q; q->prior=p; q->next=p->next; C. q->prior=p; q->next=p->next; p->next->prior=q; p->next=q; D. q->next=p->next; q->prior=p; p->next=q; p->next=q; 8、在单链表中,指针p指向元素为x的结点,实现删除x的后继的语句是()。 A. p=p->next; B. p->next=p->next->next; C. p->next=p; D.p=p->next->next; 9、在表长为n的顺序表中,当在任何位置删除一个元素的概率相同时,删除一个元素所需移动的平均个数为()。 A. (n-1)/2 B. n/2 C. (n+1)/2 D. n 10、将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为()。 A. O(1) B. O(n) C. O(m) D. O(m+n) 11、线性表的顺序存储结构是一种()存储结构。 A. 随机存取 B. 顺序存取 C. 索引存取 D. 散列存取 12、循环链表的主要优点是()。 A. 不再需要头指针 B. 已知某结点位置后能容易找到其直接前驱 C. 在进行插入、删除运算时能保证链表不断开 D. 在表中任一结点出发都能扫描整个链表 13、在下列对顺序表进行的操作中,算法时间复杂度为O(1)的是()。

22道数据结构算法面试题

微软的22道数据结构算法面试题(含答案)1、反转一个链表。循环算法。 1 List reverse(List l) { 2 if(!l) return l; 3 list cur = l.next; 4 list pre = l; 5 list tmp; 6 pre.next = null; 7 while ( cur ) { 8 tmp = cur; 9 cur = cur.next; 10 tmp.next = pre; 11 pre = tmp; 12 } 13 return tmp; 14 } 2、反转一个链表。递归算法。 1 List resverse(list l) { 2 if(!l || !l.next) return l; 3 4 List n = reverse(l.next); 5 l.next.next = l; 6 l.next=null; 7 } 8 return n; 9 } 3、广度优先遍历二叉树。 1 void BST(Tree t) { 2 Queue q = new Queue(); 3 q.enque(t); 4 Tree t = q.deque(); 5 while(t) { 6 System.out.println(t.value); 7 q.enque(t.left);

9 t = q.deque(); 10 } 11 } ---------------------- 1class Node { 2 Tree t; 3 Node next; 4 } 5class Queue { 6 Node head; 7 Node tail; 8 public void enque(Tree t){ 9 Node n = new Node(); 10 n.t = t; 11 if(!tail){ 12 tail = head = n; 13 } else { 14 tail.next = n; 15 tail = n; 16 } 17 } 18 public Tree deque() { 19 if (!head) { 20 return null; 21 } else { 22 Node n = head; 23 head = head.next; 24 return n.t; 25 } 26} 4、输出一个字符串所有排列。注意有重复字符。 1char[] p; 2void perm(char s[], int i, int n){ 3 int j; 4 char temp; 5 for(j=0;j

相关文档
相关文档 最新文档