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

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

复习题集─参考答案

一判断题

(√)1. 在决定选取何种存储结构时,一般不考虑各结点的值如何。

(√)2. 抽象数据类型与计算机内部表示和实现无关。

(×)3. 线性表采用链式存储结构时,结点和结点内部的存储空间可以是不连续的。

(×)4. 链表的每个结点中都恰好包含一个指针。

(×)5.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。(×)6. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

(×)7. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

(×)8. 线性表在物理存储空间中也一定是连续的。

(×)9. 顺序存储方式只能用于存储线性结构。

(√)10.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)11.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

(√)12.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)13.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

(×)14.二叉树的度为2。

(√)15.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。

(×)16.二叉树中每个结点的两棵子树的高度差等于1。

(√)17.用二叉链表法存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。

(√)18.具有12个结点的完全二叉树有5个度为2的结点。

(√)19.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面。

(×)20.在冒泡法排序中,关键值较小的元素总是向前移动,关键值较大的元素总是向后移动。

(×)21.计算机处理的对象可以分为数据和非数据两大类。[计算机处理的对象都是数据]

(×)22.数据的逻辑结构与各数据元素在计算机中如何存储有关。

(×)23.算法必须用程序语言来书写。

(×)24.判断某个算法是否容易阅读是算法分析的任务之一。

(×)25.顺序表是一种有序的线性表。[任何数据结构才用顺序存储都叫顺序表]

(√)26.分配给顺序表的内存单元地址必须是连续的。

(√)27.栈和队列具有相同的逻辑特性。[它们的逻辑结构都是线性表]

(√)28.树形结构中每个结点至多有一个前驱。

(×)29.在树形结构中,处于同一层上的各结点之间都存在兄弟关系。

(×)30.如果表示图的邻接矩阵是对称矩阵,则该图一定是无向图。

(×)31.如果表示图的邻接矩阵是对称矩阵,则该图一定是有向图。

(×)32.顺序查找方法只能在顺序存储结构上进行。

(×)33.折半查找可以在有序的双向链表上进行。

(√)34.满二叉树中不存在度为1的结点。

(×)35.完全二叉树中的每个结点或者没有孩子或者有两个孩子。

(√)36.对n个元素执行快速排序,在进行第一次分组时,排序码的比较次数总是n-1次。

(√)37.在有向图中,各顶点的入度之和等于各顶点的出度之和。

一、选择题

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

A) 访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)C) 删除第i个结点(1≤i≤n)

B) 在第i个结点后插入一个新结点(1≤i≤n)D) 将n个结点从小到大排序(C)2. 算法分析的目的是:

A) 找出数据结构的合理性B) 研究算法中的输入和输出的关系

C) 分析算法的效率以求改进D) 分析算法的易懂性和文档性

(A)3. 算法分析的两个主要方面是:

A) 空间复杂性和时间复杂性B) 正确性和简明性

C) 可读性和文档性D) 数据复杂性和程序复杂性

(C)4. 计算机算法指的是:

A) 计算方法B) 排序方法C) 解决问题的有限运算序列D) 调度方法

(B)5. 计算机算法必须具备输入、输出和等5个特性。

A) 可行性、可移植性和可扩充性B) 可行性、确定性和有穷性

C) 确定性、有穷性和稳定性D) 易读性、稳定性和安全性

(B)6. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是: (A)110 (B)108 (C)100 (D)120

(D)下列选项中与数据存储结构无关的术语是:

A.顺序表

B.链表

C.链队列

D.栈

(A)7. 链接存储的存储结构所占存储空间:

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

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

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

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

(B)8. 带头结点的单链表head,链表为空的判定条件是

(A)head == NULL (B) head->next ==NULL ( C) head->next ==head (D) head!=NULL

(B)9. 一个栈的输入序列为1,2,3,…,n,若输出序列的第一个元素是n,输出第i(1≤i≤n)个元素是。

A) 不确定B) n-i+1 C) i D) n-i

(B)10. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。

A) (rear+1)% n==front B) rear===front C) rear+1==front D) (rear-l) % n==front (A)11. 循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是:

(A) (rear-front+m)%m (B) rear-front+1 (C) rear-front-1 (D) rear-front

(B)12. 若用一个大小为6的数值来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为:

(A) 1和5 (B) 2和4 (C) 4和2 ( D) 5和1

(C )13. 按照二叉树的定义,具有3个结点的二叉树有( )种。

A) 3 B) 4 C) 5 D) 6 [利用排列组合知识来做]

(B )14. 若一棵二叉树中度为l 的结点个数是3,度为2的结点个数是4,则该二叉树叶子结点的个数是:

(A) 4 (B) 5 (C) 7 (D) 8

(B )15. 具有n(n>0)个结点的完全二叉树的深度为:

(A) ?log 2(n)? (B) ? log 2(n)? (C) ? log 2(n) ?+1 (D) ?log 2(n)+1?

(D )16. 对一个满二叉树,m 个叶子,n 个结点,深度为h ,则:

(A) n = h+m (B) h+m = 2n (C) m = h-1 (D) n = 2h-1

(C )17.在高度为h 的完全二叉树中,表述正确的是( )

A.度为0的结点都在第h 层上

B.第i(1≤i

C.第i(1≤i

D.不存在度为1的结点

(B )18. 深度为5的二叉树至多有( )个结点。

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

(A )19. 用邻接表表示图进行深度优先遍历时,通常采用( )结构来时实现算法。

A) 栈 B) 队列 C) 树 D) 图

(D )20. 对N 个记录作顺序查找时,当查找成功时,平均查找长度是( )。

A) N 2 B) N 2/2 C) N D)(N ﹢1)/2

(B )21. 当一个有n 个顶点的图用邻接矩阵A 表示时,顶点V i 的度是( )。

(A)∑=n i j i A 1],[ B) ∑=n j j i A 1],[ C)∑=n i i j A 1],[ D)∑=n i j i A 1],[+∑=n j i j A 1

],[

(C )22.某算法的时间复杂度为O(2n ),表明该算法的( )

A.问题规模是2n

B.执行时间等于2n

C.执行时间近似与2n 成正比

D.问题的规模近似与2n 成正比

(D )23.“二叉树为空”意味着二叉树( )

A.由一些没有赋值的空结点构成

B.根结点没有子树

C.不存在

D.没有结点

(D )24.数据结构的研究内容不涉及( )

A.数据如何组织

B.数据如何存储

C.数据的运算如何实现

D.算法用什么语言描述

(C )25.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储

A.数据的处理方法

B.数据元素的类型

C.数据元素之间的关系

D.数据的存储方法

(D )26.数据采用顺序存储,要求( )

A.存储的是属于线性结构的数据

B.根据结点值的大小,有序存放各结点

C.按存储单元地址由低到高的顺序存放各结点

D.各结点存放方法有规律,能隐含表示结点间的逻辑关系

(D )27.一个顺序表所占存储空间大的大小与( )无关

A.顺序表长度

B.结点类型

C.结点中各字段的类型

D.结点存放顺序

(A )28.数据采用链接存储,要求( )

A.每个结点占用一片连续的存储区域

B.所有结点占用一片连续的存储区域

C.结点的最后一个字段是指针型的字段 C.每个结点有多少个后继,就设多少个指针字段

(A )29.算法的时间复杂度与( )有关

A.问题规模

B.计算机硬件性能

C.编译程序质量

D.程序设计语言

(C)30.在程序中,为了设置一个空的顺序表,必须()

A.给各数组元素赋空值

B.给各顺序表元素赋空值

C.给表示顺序表长度的变量赋初始值

D.给数组变量名赋初始值

(D)31.若变量H是某个带表头结点循环单向链表的表头指针,则在该链表最后的一个结点的后继指针域中存放的是()

A.H的地址

B.H的值

C.表头结点的值

D.首元结点的地址

(A)32.栈和队列的共同点在于()

A.逻辑特性

B.存储结构

C.运算方法

D.元素类型

(C)33.栈和队列的共同点在于()

A.都对存储方法作了限制

B.都是只能进行插入、删除运算

C.都对插入、删除的位置作了限制

D.都对插入、删除两中操作的先后顺序作了限制

(C)34.若5个元素的进栈序列是1,2,3,4,5,则不可能得到出栈序列()

A.1,2,3,4,5

B.3,4,2,5,1

C.4,2,1,3,5

D.5,4,3,2,1

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

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

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

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

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

(A)36.在顺序队列中,元素的排列顺序()

A.由元素插入队列的先后顺序决定

B.与元素值的大小有关

C.与队首指针和队尾指针的取值有关

D.与数组大小有关

(C)37.在高度为h的完全二叉树中,()

A.度为0的结点都在第h层上

B.第i(1≤i

C.第i(1≤i

D.不存在度为1的结点

(B)38.一颗二叉树如图所示,其中序遍历的序列为:

B. DGBAECHF

C. GDBEHFCA

D. ABCDEFGH

(A)39.采用邻接表存储的图的深度优先遍历算法类似于二叉树的

A.先序遍历B.中序遍历C.后序遍历D.按层遍历

(D)40.采用邻接表存储的图的广度优先遍历算法类似于二叉树的

A.先序遍历B.中序遍历C.后序遍历D.按层遍历

(D)41.已知关键字序列为(51,22,83,46,75,18,68,30),对其进行快速排序,第一趟划分完成后的

关键字序列是

A.(18,22,30,46,51,68,75,83)

B.(30,18,22,46,51,75,83,68)

C.(46,30,22,18,51,75,68,83)

D.(30,22,18,46,51,75,68,83)

二、填空题

1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算这三个方面的内容。

2.下面程序段的时间复杂度是O(log3n) 。

i =1;

while(i<=n)i = i * 3;

3.在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。

4.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表的元素是,应采用顺序存储结构。

5.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。6.已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾结点,试从下列提供的答案中选择合适的语句序列。

删除P结点的直接后继结点的语句序列是(11)(4)(14) 。

删除P结点的语句序列是(10)(12)(7)(4)(14) 。

(1) P = P->next ; (2) P->next = P; (3) P->next = P->next->next

(4) P->next = P->next->next; (5) while(P!=NULL) P = P->next ;

(6) while(Q->next != NULL) {P = Q; Q=Q->next;}

(7) while(P->next != Q) P = P->next;

(8) while(P->next->next != Q) P = P->next;

(9) while(P->next->next != NULL) P = P->next;

(10) Q = P; (11) Q = P->next; (12) P = L ;

(13) L = L->next; (14) free(Q);

7.栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。

8.设栈S的初始状态为空,若元素a、b、c、d、e、f依次进栈,得到的出栈序列是b、d、c、f、e、a,则

栈S的容量至少是 3 。

9.用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为 SXSSXSXX 。

10.数据的逻辑结构可以分为线性和非线性两大类。

11.数据的运算用算法表示。

12.逻辑上相邻的结点在存储器中也相邻,这是顺序存储结构的特点。

13.在长度为n的顺序表上实现定位操作,其算法的时间复杂度为O(n) 。

14.为了实现随机访问,线性结构应该采用顺序存储。

15.在长度为n的顺序表中插入一个元素,最多要移动n 个元素。

16.栈的存储结构主要有顺序和链式两种。

17.在编写程序的时候,如果栈的最大长度难以预先估计,则最好使用链式栈。

18.在树形结构中,如果某结点没有前驱(双亲),则称该结点为根结点;如果某结点没有后继(孩子),

则称该结点为叶子。

19.在树形结构中,每个结点最多只有一个前驱(双亲)。

20.由3个结点所构成的二叉树有 5 种形态。

21.二叉树的前序遍历按如下三个步骤进行:①访问根结点;②前序遍历左子树;③前序遍历右子树。【注意:②③中一定要加“前序”两字!】

22.二叉树的中序遍历按如下三个步骤进行:①中序遍历左子树;②访问根结点;③中序遍历左子树。【注意:①③中一定要加“中序”两字!】

23.在n个顶点的无向图中,至少有0 条边,至多有n(n-1)/2 条边。

24.在n个顶点的有向图中,至少有0 条边,至多有n(n-1) 条边。

25.如果排序不改变关键字相同的记录之间的相对次序,则称该排序方法是稳定的。

26.如果排序改变了关键字相同的记录之间的相对次序,则称该排序方法是不稳定的。

27.当待排关键字序列基本有序时,快速排序、简单选择排序和直接插入排序三种排序方法中,运行效率最高的是直接插入排序。

28.在一个图中,所有顶点的度数之和是所有边数的 2 倍。

29.无向图中边的数目等于邻接矩阵中非零元素个数的0.5 倍。

30.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素28,6,12,20 比较大小。

31.在有序表(2,4,6,8,10,12,14,16,18)上用折半查找法查找元素9,其中第二次被比较的元素是 4 。

32.在有序表(2,4,6,8,10,12,14,16,18)上用折半查找法查找元素9,其中第三次被比较的元素是 6 。

三、简答题

1.对链表设置头结点的作用是什么?(至少说出两条好处)

答:其好处有:(1)对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一个结点的指针域,因为任何元素结点都有前驱结点(若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点和删除该结点时操作复杂些)。

(2)对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。

2.写出下列程序段的输出结果(队列中的元素类型QElem Type为char)。

void main( ){

Queue Q; Init Queue (Q);

Char x=’e’; y=’c’;

EnQ ueue (Q,’h’); En Q ueue (Q,’r’); En Queue (Q, y);

DeQueue (Q,x); EnQueue (Q,x);

DeQueue (Q,x); EnQ ueue (Q,’a’);

while(!QueueEmpty(Q)){ DeQueue (Q,y); printf(y); };

Printf(x);

}

解:char

3. 简述以下算法的功能(栈和队列的元素类型均为int )。

void algo3(Queue &Q){

Stack S; int d;

InitStack(S);

while(!QueueEmpty(Q)){

DeQueue (Q,d); Push(S,d);

};

while(!StackEmpty(S)){

Pop(S,d); EnQueue (Q,d);

}

}

解:

利用栈S 作为缓存空间,将队列Q 中的元素进行逆置(即相对于原顺序进行倒排)。

4. 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。在单链表中设置头结点的作用是什么? 答:首元结点是指链表中存储线性表中第一个数据元素a 1的结点。为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。若链表中附设头结点,则不管线性表是否为空表,头指针均不为空。否则表示空表的链表的头指针为空。这三个概念对单链表、双向链表和循环链表均适用。是否设置头结点,是不同的存储结构表示同一逻辑结构的问题。

头指针 首元结点

简而言之,

头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针;

头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息(内放头指针?那还得另配一个头指针!!!)

首元素结点是指链表中存储线性表中第一个数据元素a 1的结点。

5. 对以下单链表执行下列语句,简述代码的功能,并画出单链表结果示意图。

while(T->next != NULL) { T->data = 2 * T->data; T = T->next; }

解:

代码功能:除最后一个结点之外,每个结点的数值部分改变为原值的2倍。

单链表结果示意图如下:

6. 请画出下图的邻接矩阵和邻接表

【本题较简单,不提供答案】

7.假设二叉树采用顺序存储结构,如图所示。

(1)画出二叉树表示;

(2)写出先序遍历、中序遍历和后序遍历的结果;

(3)写出结点值c 的双亲结点,其左、右孩子;

8. 树和二叉树之间有什么样的区别与联系?

解:

联系:(1)二叉树是树的一种,是一种特殊的树;(2)对树适用的操作或规律都可应用到二叉树上。

区别:(1)二叉树是一种特殊的树,特殊在,第一是有序树,第二结点的度数不超过2;(2)普通二叉树有3个性质,完全二叉树有5个性质,普通树是没有这些性质的。

9. 一棵二叉树中的结点的度或为0或为2,则二叉树的枝数为2(n0-1),其中n0是度为0的结点的个数。

证明:

设总结点数为n,度数为2的结点数为n2,依题意,该二叉树没有度数为1的结点。

那么n= n0+ n2

假定分枝数为B,每个结点通过一个分枝跟其双亲相连,除根结点外;这意味着除根结点外,每个结点对应一个分枝,即B=n-1 ,根据二叉树的性质3,n2=n0+1 ,

于是B==n-1= n0+ n2-1= n0+ n0-1-1=2(n0-1)

10. 一个深度为L的满K叉树有以下性质:第L层上的结点都是叶子结点,其余各层上每个结点都有K棵非空子树,如果按层次顺序从1开始对全部结点进行编号,求:

(1)各层的结点的数目是多少?

(2)编号为n的结点的双亲结点(若存在)的编号是多少?

(3)编号为n的结点的第i 个孩子结点(若存在)的编号是多少?

(4)编号为n的结点有右兄弟的条件是什么?如果有,其右兄弟的编号是多少?

请给出计算和推导过程。

11. 如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,而改置计数器count用以记录队列中结点的个数。

(1)编写实现队列的三个基本运算:判空、入队、出队

(2)队列中能容纳元素的最多个数是多少?

【此题超出教学范围,不作解答。】

12. 已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,画出此二叉树。并给出其后序

遍历的结果。

解:根据已知的前序和中序遍历结果,建立二叉树如图所示。

此二叉树的后序遍历结果为:CBEFDA

13.假设以二叉链表表示二叉树,其类型定义如下:

A

B D

typedef struct node {

char data;

struct node*lchild, *rchild; ∥左右孩子指针

} *BinTree ;

阅读下列程序。

void f13(BinTree T){

InitStack(S); ∥ 初始化一个堆栈S

while(T || !StackEmpty(S)){

while(T){

Push(S,T); T=T->lchild;

}

if(!StackEmpty(S)){

T=Pop(S);

printf(“%c ”,T->data);

T=T->rchild;

}

}

}

回答下列问题:

(1)已知以T 为根指针的二叉树如图所示,

请写出执行f13(T)的输出结果:

(2)简述算法f13的功能。

14.设如下图所示的二叉树B 的存储结构为二叉链表,root 为根指针,结点结构为:(lchild,data,rchild )。其

中lchild ,rchild 分别为指向左右孩子的指针,data 为字符型,root 为根

指针,试回答下列问题: (1)对下列二叉树B ,执行下列算法traversal(root),试指出其输出结果; (2)假定二叉树B 共有n 个结点,试分析算法traversal(root)的时间复杂度。 二叉树B

解:

(1)输出结果:ABCCEEBDFFGG

(2)时间复杂度:

15.已知有向图的邻接表如图所示,请回答下面问题:

(1)给出该图的邻接矩阵;

(2)从结点A出发,写出该图的深度优先遍历序列。

16.设要将序列{Q, H, C, Y, P, A, M, S, R, D, F, X}中的关键码按字母序的升序重新排列。简述快速排序的思

路,并以第一个元素为轴中心,给出用快速排序对序列一趟扫描的结果。

解:

快速排序的思路:(1)从序列中任意选取一个元素作为枢轴,以枢轴为标准将序列划分成三部分。第一部分的所有元素比枢轴小,第二部分是枢轴自己,第三部分的所有元素比枢轴大。这样处理以后,枢轴的位置已经排好。

(2)对上述划分的第一部分序列和第三部分序列循环执行第(1)步的操作,直到划分的序列中只有一个元素为止。

针对题目给定的序列,快速排序一趟扫描的结果是:F, H, C, D, P, A, M, Q, R, S, Y, X.

四、算法填空

1.假设线性表用不带头结点的单向链表表示,结点数据类型如下:

struct node{

int s;

node * next;

}

下面的算法用于求线性表的长度。请在方框中填入适当的内容,将算法补充完整。

int GetLinkLen(node *h){

int s;

s=0;

while(h)

{

s=s+1;

h=h->next ;

}

return(s);

}

2.设有n个顺序表元素存放在数组v[1]~v[n]中,数组v的最大下标为n0,元素类型为TElem. 下面的算法用于删除顺序表中第一个值为x的元素。请在方框中填入适当内容,将算法补充完整。

void DeleValue (TElem x){

int i, j;

i=1;

While( v[i]!=x && i<=n )

i=i+1;

if(i<=n){

for(j=n;j>i;j--)

v[j-1]=v[j];

n-- ;

}

}

五、算法设计题

1.从顺序表中删除值为x的元素。

答:假定顺序表为a,有效元素个数为n,下标从0开始。

int DeleteReapeatValue(datatype * a, int * pNum, datatype x){

int i, k, n;

n=*pNum;

k=0;

for(i=0;i

If(a[i]==x) k++;

Else a[i-k]=a[i];

}

*pNum=n-1;

return k;

}

2.将顺序存储结构线性表(v1, v2, …, v n)改变成(vk+1,vk+2,…, vn,v1,v2,…, vk)。

答:

void ChangeSequence(datatype * v){

datatype a[SIZE];

for(int i=1;i

for(i=1;i<=n;i++) v[(k+i)%n]=a[i];

}

3.将顺序存储的线性表(v1, v2, …, vn)改变成(v1, v3, v5,…)。

答:

void ChangeSequence(datatype * v){

for(int i=3;i<=n;i+=2) v[i-i/2]=v[i]

}

4.从顺序表中删除重复的元素,并使剩余元素间的相对次序保持不变。

答:

int DeleteAllReapeatValue(datatype * a, int * pNum){

int n=*pNum;

int i , j ;

for(i=0;i

for(j=i+1; j

if(a[i]!= INFINITY && a[i]==a[j]) a[j]= INFINITY;

return DeleteReapeatValue(a,pNum, INFINITY);

}

5.从键盘输入一系列整数,建立一个长度为n的、不含重复元素的顺序表。答:

int CreateSequence(){

int a[SIZE];

int i=0, j, k;

while(i

scanf(“%d”, &k);

for(j=0; j<=i ; j++) if(a[j]==k) break;

if(j>i) a[++i]=k;

}

}

6.从键盘输入n个整数,建立带表头结点的单向链表。

答:

LinkList CreateList(){

int i=0 , j , k;

LinkList head=(Node*)malloc(sizeof(Node));

Node* r=head,*p=NULL;

While(i

scanf(“%d”, &k);

p=head->next;

while(p){

if(p->data==k) break;

p=p->next;

}

if(p==NULL){

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

s->data=k;

r->next=s;

r=s

i++;

}

}

return head;

}

7.设H是带表头结点的单向链表的表头指针,将链表中数值重复的结点删除。

答:

LinkList DleReapeatValue(LinkList H){

Node *p=H->next,*q,*s;

While(p){

s= p;

q=s->next;

while(q){

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

s->next=q->next;

free(q);

q=s->next;

}

s=s->next;

q=q->next;

}

p=p->next;

}

}

8. 设有一带头结点的单链表,编程将链表颠倒过来。要求不用另外的数组或结点完成。

解:设链表结点的数据类型为:

typedef struct Node{

ElemType data; //自定义类型

struct Node *next;

}Node;

假定链表的头指针为H,如下的函数实现链表的倒置:

void RevLinkList(Node* H){

Node *p=H->next;

Node * q=NULL;

H->next=NULL;

while(p)

{

q=p->next; //保存下一个节点的指针

p->next=H->next;

H->next=p; //把取出的节点插入到头节点的后面

p=q;

}

}

9. 统计出单链表HL中结点的值等于给定值X的结点数。

解:设链表结点的数据类型为:

typedef struct Node{

ElemType data; //自定义类型

struct Node *next;

}Node;

假定链表的头指针为HL,如下的函数统计链表中接点值为X的结点数目:

Int CountNodeX(Node * HL, ElemType x){

Int n;

Node* p=HL->next;

While(p){

If(p->data==x) n++;

P=p->next;

}

Return p;

}

11.已知非空线性链表的第一个结点的指针为head,请写一个算法,将该链表中数据域值最小的结点移动到链表的最前端。

编写的函数具有如下原型:void func(TLinkNode *head),其中链结点的结构如下:struct TLinkNode { int data; TLinkNode *next; } 请完成该算法。

12. 编写递归算法,计算二叉树中叶子结点的数目。

解:假定二叉树用二叉链表存储,并假定二叉树的结点类型定义如下

struct node

{ char data;

struct node *lchild, rchild;

}node, BiTree*;

再假定n是一个全局整型变量,用来存放二叉树中叶子结点的数目。

如下的函数统计出二叉树t(为指向给定二叉树根的指针)中叶子结点的数目:

Int CountLeafNum(BiTree t){

If(t){

CountLeafNum(t->lchild);

CountLeafNum(t->lchild);

If(!t->lchild && !t->rchild) n++;

}

}

数据结构与算法C语言版期末复习题

《数据结构与算法》期末复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

数据结构与算法模拟试题

一、选择题 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、二分法插入排序

考研数据结构必须掌握的知识点与算法-打印版

《数据结构》必须掌握的知识点与算法 第一章绪论 1、算法的五个重要特性(有穷性、确定性、可行性、输入、输出) 2、算法设计的要求(正确性、可读性、健壮性、效率与低存储量需求) 3、算法与程序的关系: (1)一个程序不一定满足有穷性。例操作系统,只要整个系统不遭破坏,它将永远不会停止,即使没有作业需要处理,它仍处于动态等待中。因此,操作系统不是一个算法。 (2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。 (3)一个算法若用程序设计语言来描述,则它就是一个程序。 4、算法的时间复杂度的表示与计算(这个比较复杂,具体看算法本身,一般关心其循环的次数与N的关系、函数递归的计算) 第二章线性表 1、线性表的特点: (1)存在唯一的第一个元素;(这一点决定了图不是线性表) (2)存在唯一的最后一个元素; (3)除第一个元素外,其它均只有一个前驱(这一点决定了树不是线性表) (4)除最后一个元素外,其它均只有一个后继。 2、线性表有两种表示:顺序表示(数组)、链式表示(链表),栈、队列都是线性表,他们都可以用数组、链表来实现。 3、顺序表示的线性表(数组)地址计算方法: (1)一维数组,设DataType a[N]的首地址为A0,每一个数据(DataType类型)占m个字节,则a[k]的地址为:A a[k]=A0+m*k(其直接意义就是求在数据a[k]的前面有多少个元素,每个元素占m个字节) (2)多维数组,以三维数组为例,设DataType a[M][N][P]的首地址为A000,每一个数据(DataType 类型)占m个字节,则在元素a[i][j][k]的前面共有元素个数为:M*N*i+N*j+k,其其地址为: A a[i][j][k]=A000+m*(M*N*i+N*j+k); 4、线性表的归并排序: 设两个线性表均已经按非递减顺序排好序,现要将两者合并为一个线性表,并仍然接非递减顺序。可见算法2.2 5、掌握线性表的顺序表示法定义代码,各元素的含义; 6、顺序线性表的初始化过程,可见算法2.3 7、顺序线性表的元素的查找。 8、顺序线性表的元素的插入算法,注意其对于当原来的存储空间满了后,追加存储空间(就是每次增加若干个空间,一般为10个)的处理过程,可见算法2.4 9、顺序线性表的删除元素过程,可见算法2.5 10、顺序线性表的归并算法,可见算法2.7 11、链表的定义代码,各元素的含义,并能用图形象地表示出来,以利分析; 12、链表中元素的查找 13、链表的元素插入,算法与图解,可见算法2.9 14、链表的元素的删除,算法与图解,可见算法2.10 15、链表的创建过程,算法与图解,注意,链表有两种(向表头生长、向表尾生长,分别用在栈、队列中),但他们的区别就是在创建时就产生了,可见算法2.11 16、链表的归并算法,可见算法2.12 17、建议了解所谓的静态单链表(即用数组的形式来实现链表的操作),可见算法2.13 18、循环链表的定义,意义 19、循环链表的构造算法(其与单链表的区别是在创建时确定的)、图解

力 扣 数 据 结 构 与 算 法

前端如何搞定数据结构与算法(先导篇) 「观感度:?」 「口味:锅包肉」 「烹饪时间: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》,即算法 + 数据结构 = 程序。 我们可以得出结论,数据结构与算法之间是相辅相成的关系。数据结构服务于算法,算法作用于特定的数据结构之上。 数据结构与算法好难,怎么学?

数据结构与算法复习题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个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 A .8 B. 3 C .5 D. 9 答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。而二次探测再散列的增量序列为:d i =12,-12,22,-22,32,…,土k 2,(k ≤m/2), 沿着增量序列选择不同的增量按照开放定址公式: H i =( H(key)+d i ) MOD m i =1,2,…,k (k ≤m-1)

数据结构与算法基础知识总结

数据结构与算法基础知识总结 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表示队列满

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

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

数据结构(c语言版)期末考试复习试题

《数据结构与算法》(c语言版)期末考复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位

B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。(1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

知识点大纲全国计算机等级考试数据结构和算法

全国计算机等级考试二级office 二级公共基础知识部分(10分*10题) 第一章. 算法与数据结构 考点1:算法概念 ● 算法 算法:指解题方案准确而完整的描述。 算法不等于程序,也不是计算方法。程序编制通常不优于算法设计。 考点2:算法的四个基本特征 可行性、确定性(算法步骤有明确定义)、有穷性、拥有足够情报 考点3:算法的时间复杂度和空间复杂度 1. 时间复杂度:执行算法所需的工作量。 算法执行的基本次数是问题规模的函数,固定规模下还与输入有关。 2. 空间复杂度:算法执行需要的存储空间(算法程序、输入初始数据、某种数据结构所需空间) ● 数据结构 (反映数据元素之间关系的数据元素集合,即带有结构的数据元素的集合,结构指数据元素之间 的前后件(前驱、后继)关系)。目的是提高数据处理的效率(速度/空间) 数据的逻辑结构:是反映数据元素之间逻辑关系的数据结构。 可以表示成:B=(D ,R ) B 表示数据结构;D 表示数据元素集合;R 表示数据元素之间的前后件关系 【例:一年四季的数据结构可以表示成B=(D ,R );D=(春,夏,秋,冬);B={(春,夏), (夏,秋),(秋,冬)}】 数据结构的图形表示: 数据元素:用中间标有元素值的方框表示,称为结点。 逻辑关系:用有向线段从前件指向后件。没有前件的结点称为根结点;没有后件的结点称为 终端结点(叶子结点) B=(D ,R ) D={di|1≤i ≤7} ={d1,d2,d3,d4,(d1,d3),(d1,d7),(d2,d4),(d3,d6),(d4,d5)} 考点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)、找出一串字符中第一个不重复字符的下标。 点击查看详细面经〉〉〉〉〉〉〉〉〉〉〉〉 更多精品干货>>>>>>>>>>> 更多阿里机器学习/数据挖掘经典面试题 其他名企机器学习/数据挖掘经典面试题

数据结构与算法复习题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个记录(如下图

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

大学 《数据结构与算法分析》课程 习题及参考答案 模拟试卷一 一、单选题(每题 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};

(完整版)非常实用的数据结构知识点总结

数据结构知识点概括 第一章概论 数据就是指能够被计算机识别、存储和加工处理的信息的载体。 数据元素是数据的基本单位,可以由若干个数据项组成。数据项是具有独立含义的最小标识单位。 数据结构的定义: ·逻辑结构:从逻辑结构上描述数据,独立于计算机。·线性结构:一对一关系。 ·线性结构:多对多关系。 ·存储结构:是逻辑结构用计算机语言的实现。·顺序存储结构:如数组。 ·链式存储结构:如链表。 ·索引存储结构:·稠密索引:每个结点都有索引项。 ·稀疏索引:每组结点都有索引项。 ·散列存储结构:如散列表。 ·数据运算。 ·对数据的操作。定义在逻辑结构上,每种逻辑结构都有一个运算集合。 ·常用的有:检索、插入、删除、更新、排序。 数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。 ·结构类型:由用户借助于描述机制定义,是导出类型。 抽象数据类型ADT:·是抽象数据的组织和与之的操作。相当于在概念层上描述问题。 ·优点是将数据和操作封装在一起实现了信息隐藏。 程序设计的实质是对实际问题选择一种好的数据结构,设计一个好的算法。算法取决于数据结构。 算法是一个良定义的计算过程,以一个或多个值输入,并以一个或多个值输出。 评价算法的好坏的因素:·算法是正确的; ·执行算法的时间; ·执行算法的存储空间(主要是辅助存储空间); ·算法易于理解、编码、调试。 时间复杂度:是某个算法的时间耗费,它是该算法所求解问题规模n的函数。 渐近时间复杂度:是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。 评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度。 算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O (n^2)、立方阶O(n^3)、……k次方阶O(n^k)、指数阶O(2^n)。

数据结构算法面试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. 在决定选取何种存储结构时,一般不考虑各结点的值如何。 (√)2. 抽象数据类型与计算机部表示和实现无关。 (×)3. 线性表采用链式存储结构时,结点和结点部的存储空间可以是不连续的。 (×)4. 链表的每个结点中都恰好包含一个指针。 (×)5.链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。(×)6. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。 (×)7. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。 (×)8. 线性表在物理存储空间中也一定是连续的。 (×)9. 顺序存储方式只能用于存储线性结构。 (√)10.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 (√)11.对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。 (√)12.栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 (√)13.两个栈共享一片连续存空间时,为提高存利用率,减少溢出机会,应把两个栈的栈底分别设在这片存空间的两端。 (×)14.二叉树的度为2。 (√)15.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。 (×)16.二叉树中每个结点的两棵子树的高度差等于1。 (√)17.用二叉链表法存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。 (√)18.具有12个结点的完全二叉树有5个度为2的结点。 (√)19.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面。 (×)20.在冒泡法排序中,关键值较小的元素总是向前移动,关键值较大的元素总是向后移动。 (×)21.计算机处理的对象可以分为数据和非数据两大类。[计算机处理的对象都是数据] (×)22.数据的逻辑结构与各数据元素在计算机中如何存储有关。 (×)23.算法必须用程序语言来书写。 (×)24.判断某个算法是否容易阅读是算法分析的任务之一。 (×)25.顺序表是一种有序的线性表。[任何数据结构才用顺序存储都叫顺序表] (√)26.分配给顺序表的存单元地址必须是连续的。 (√)27.栈和队列具有相同的逻辑特性。[它们的逻辑结构都是线性表] (√)28.树形结构中每个结点至多有一个前驱。 (×)29.在树形结构中,处于同一层上的各结点之间都存在兄弟关系。 (×)30.如果表示图的邻接矩阵是对称矩阵,则该图一定是无向图。 (×)31.如果表示图的邻接矩阵是对称矩阵,则该图一定是有向图。 (×)32.顺序查找方法只能在顺序存储结构上进行。 (×)33.折半查找可以在有序的双向链表上进行。

数据结构与算法试题

数据结构与算法试题 一、单选题 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

数据结构与算法设计知识点

数据结构与算法设计知识点 试题类型: 本课程为考试科目(闭卷笔试),试题类型包括:概念填空题(10 %),是非判断题(10 %),单项选择题(40 %),算法填空题(10%),算法应用题(20 %),算法设计题(10 %)。 第一章绪论 重点内容及要求: 1、了解与数据结构相关的概念(集合、数据、数据元素、数据项、关键字、元 素之间的关系等)。 数据:所有能被输入到计算机中,且能被计算机处理的符号的 集合。是计算机操作的对象的总称。是计算机处理的信息的某种特定 的符号表示形式。 数据元素:是数据(集合)中的一个“个体”,数据结构中的基本 单位,在计算机程序中通常作为一个整体来考虑和处理。 数据项:是数据结构中讨论的最小单位,数据元素可以是一个或 多个数据项的组合 关键码:也叫关键字(Key),是数据元素中能起标识作用的数 据项。 其中能起到唯一标识作用的关键码称为主关键码(简称主码); 否则称为次关键码。通常,一个数据元素只有一个主码,但可以有多 个次码。 关系:指一个数据集合中数据元素之间的某种相关性。 数据结构:带“结构”的数据元素的集合。这里的结构指元素之 间存在的关系。 数据类型:是一个值的集合和定义在此集合上的一组操作的总

称。 2、掌握数据结构的基本概念、数据的逻辑结构(四种)和物理结构(数据元素 的表示与关系的表示、两类存储结构:顺序存储结构和链式存储结构)。 数据结构包括逻辑结构和物理结构两个层次。 数据的逻辑结构:是对数据元素之间存在的逻辑关系的一种抽象的描述,可以用一个数据元素的集合和定义在此集合上的若干关系来表示 逻辑结构有四种:线性结构、树形结构、图状结构、集合结构数据的物理结构:是其逻辑结构在计算机中的表示或实现,因此又称其为存储结构。 存储结构:顺序存储结构和链式存储结构 顺序存储结构:利用数据元素在存储器中相对位置之间的某种特定的关系来表示数据元素之间的逻辑关系; 链式存储结构:除数据元素本身外,采用附加的“指针”表示数据元素之间的逻辑关系。 3、了解算法分析的基本方法,掌握算法时间复杂度相关的概念。 算法:是为了解决某类问题而规定的一个有限长的操作序列 或处理问题的策略 一个算法必须满足以下五个重要特性:1.有穷性2.确定性3.可行性4.有输入5.有输出 设计算法时,通常还应考虑满足以下目标: 1.正确性, 2.可读性, 3.健壮性 4.高效率与低存储量需求

相关文档
最新文档