第一章单选题1、下列关于算法的基本特征,说法不正确的是()。
能行性是算法中的每一个步骤必须能够实现且能达到预期的目的。
算法的确定性是指算法中的每一个步骤必须是有明确的定义,不允许模棱两可。
算法的有穷性是指算法必须能在有限的时间内做完。
算法与提供情报无关。
[D] 教师批改:D2、算法的时间复杂度取决于()。
问题的规模待处理的数据的初态问题的难度 A 和B[D] 教师批改:D3、下列选项中,不是算法基本特征的是()。
可行性有穷性确定性高效率[D] 教师批改:D4、通常一个好的算法应达到的目标中,不包括()。
正确性可读性技巧性健壮性[C] 教师批改:C5、在一般的计算机系统中,基本的运算和操作不包括()。
语法处理算术运算关系运算数据传输[A] 教师批改:A6、工程上常用的分治法是()。
列举法归纳法减半递推技术回溯法[C] 教师批改:C多选题7、算法设计的要求包括()。
正确性可读性健壮性唯一性[ABC] 教师批改:A,B,C8、算法的时间复杂度应该与()无关。
所使用的计算机程序设计语言基本运算的执行次数程序编制者[ABD] 教师批改:A,B,D9、下列关于算法的描述中,不正确的有()。
算法即是计算机程序算法是解决问题的计算方法算法是排序方法算法是解决问题的有限运算序列[ABC] 教师批改:A,B,C填空题16、所谓算法是指()。
教师批改:解题方案的准确而完整的描述17、算法的基本特征有()、()、()和()教师批改:能行性、确定性、有穷性和拥有足够的情报。
18、一个算法通常由两种基本要素组成,它们是()和()。
教师批改:算法中对数据的运算和操作。
算法的控制结构。
19、工程上常用的几种算法设计方法有列举法、()、()、()、()和回溯法。
教师批改:归纳法、递推、递归、减半递推技术。
20、算法的复杂度主要包括()复杂度和()复杂度。
教师批改:时间、空间综合题21、设给定3个整数a,b,c,试写出寻找这3个整数的中数的算法;并分析在平均情况与最坏情况下,该算法分别要做多少次比较?寻找这3个整数的中数的算法用C语言描述如下(中数m由函数值返回):int mid ( int a, int b, int c){ int m 。
m=a 。
if ( m>=b ) { if (m>=c) { if ( b>=c ) m=b 。
else m=c 。
} }else { if ( m<=c) { if (b>=c) m=c。
else m=b 。
} }return ( m ) 。
}假设a,b,c中的每一个数为中数的概率相等(均为1/3)。
由于当a为中数时需要比较2次,b或c为中数时均需要比较3次,因此,在平均情况下上述算法所需要的比较次数为2*(1/3)+3*(1/3)+3*(1/3)= 8/3即在平均情况下,上述算法需要比较8/3次。
在最坏情况下,上述算法需要比较3次(当b或c为中数时)。
第二章选择题1、下列排序方法中,哪一个是稳定的排序方法()。
归并排序稀尔排序堆排序快速排序[A] 教师批改:A2、设输入序列为1,2,3,4,借助一个栈得到的输出序列可以是()。
3,4,1,2 4,2,1,34,1,2,3 1,3,4,2[D] 教师批改:D3、用数组A[m]存放循环队列的元素值,若其头尾指针分别为front和rear,则循环队列中当前元素的个数为()。
(rear+front)%m (rear-front+m)%m(rear-front)%m (rear-front+1)%m[D] 教师批改:B4、对于下三角矩阵A,若采用一个一维数组B以行为主顺序存放压缩矩阵A,则A43存放在()中. B7 B8B9 B10[C] 教师批改:C5、深度为5的二叉树至多有()个结点。
16 3231 10[C] 教师批改:C6、一个有n个顶点的无向图最多有()条边。
n n(n-1)n(n-1)/2 2n[C] 教师批改:C7、下列说法不正确的是()。
线性表可以顺序存储线性表可以链式存储线性表在顺序存储下可以对分查找线性表在链式存储下可以对分查找[D] 教师批改:D8、栈和队列的共同点是()。
都是先进后出都是先进先出只允许在端点处插入和删除元素没有共同点[C] 教师批改:C9、若进栈序列为A、B、C、D(进栈过程可以出栈),不可能得到的出栈序列是()。
A、D、C、B B、C、D、AC、A、D、B C、D、B、A[C] 教师批改:C10、在一个单链表中,若p结点不是最后一结点。
在p结点之后插入s结点的正确操作是()。
s->next=p。
p->next=s。
s->next=p->next 。
p->next=s。
s->next=p。
p=p。
p->next=s。
s->next=p。
[B] 教师批改:B11、由3个结点可以构造出多少种不同的二叉树()。
2 45 8[C] 教师批改:C填空题27、若一棵完全二叉树共有100个结点,则其叶子结点数为()。
教师批改:5028、在单链表中设置(表)头结点的作用是()。
教师批改:简化插入,删除算法,方便运算的实现。
29、结点最少的树为(),结点最少的二叉树为()。
教师批改:只有一个(根)结点的树。
空的二叉树。
34、在一棵二叉树中有30个叶子结点,仅有一个孩子的结点有20个,则该二叉树结点数为()。
教师批改:7935、在线性表的散列存储中,处理冲突有()和()两种方法。
教师批改:拉链法、开地址法36、已知一棵二叉树的中序遍历序列和后序遍历序列分别为BDCEAFHG和DECBHGFA,试写出其前序遍历序列。
教师批改:前序遍历:ABCDEFGH30、数据的()结构与数据元素本身的内容、形式、个数和相对位置无关。
教师批改:逻辑31、数据的存储结构有四种基本的存储映射方式:顺序、()、索引和()存储方式。
教师批改:链式、散列32、用顺序方法将完全二叉树的结点逐层存放在数组A[1]~A[n]中,若结点A[i] 有右子女,则右子女是结点为()。
教师批改:A[2*i+1]33、设有二维数组A4×6,其中每个元素占两个字节,数组按列优先顺序存储,第一个元素a11的存储地址为100,那么元素a43的存储地址为()。
教师批改:122综合题37、什么叫数据结构?数据结构对算法有什么影响?数据结构是指相互有关联的数据元素的集合。
因此,一个数据结构既要反映数据元素的信息,又要反映数据元素之间的关系。
数据元素之间的关系可以是逻辑关系(通常用前后件关系来表示),也可以是数据元素在计算机中的存储位置。
反映数据元素之间逻辑关系的数据结构称为数据的逻辑结构。
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,又称为数据的物理结构。
同一批数据元素的集合,采用不同的数据结构(特别是存储结构),其数据处理的效率是不一样的,主要体现在算法的时间复杂度与空间复杂度方面。
比如:若只是对2~3个数进行排序,则用几个IF语句即可完成;而若对一般情况下的N个数进行排序,则要使用数组,通过(双重等)循环来完成。
38、试写出在顺序存储结构下逆转线性表的算法,要求使用最少的附加空间顺序存储结构下逆转线性表的算法用C语言描述如下(其中ET为数据元素的类型):void invsl ( int n , ET a [ ] ){ int k 。
ET t 。
for ( k=0 。
k<n/2 。
k + + ){ t=a[k]。
a[k]=a[n-1-k]。
a[n-1-k]=t。
}return 。
}39、设循环队列的容量为70(序号为1~70),现经过一系列的入队与退队运算后,有:(1)front=14,rear=21。
(2)front=23,rear=12。
问在这两种情况下,循环队列中各有多少个元素?设循环队列的容量为M。
如果rear>front ,则循环队列中的元素个数为rear-front ;如果rear<front ,则循环队列中的元素个数为M+(rear-front) ;由此可以得到:(1)循环队列中的元素个数为rear-front = 21-14 = 7 。
(2)循环队列中的元素个数为M+(rear-front) = 70+(12-23) = 59 。
注:求循环队列中元素个数的通用式为:( rear-front+M ) % M 。
其中%为求余运算。
40、试编写一个算法,将两个有序的顺序表合并为一个有序的顺序表。
合并有序顺序表的算法如下描述。
输入:长度为的有序数组A(1:n),长度为的有序数组B(1:m)。
输出:有序数组A与有序数组B合并后的有序数组C(1:mn)。
其中mn = m+n 。
上述算法用C语言描述如下(其中ET为数据元素的类型):void mgsl ( int n , ET a[ ] , int m , ET b[ ] , ET c[ ] ){ int i , j , k , t 。
i = 0 。
j = 0 。
k = 0 。
while ( ( i<n ) && ( j<m ) ){ if ( a [ i ] <= b [ j ] ){ c [ k ] = a[ i ] 。
i = i+1 。
}else { c [ k ] = b [ j ] 。
j= j+1 。
}k = k+1 。
}if ( i = = n)for ( t = j 。
t < m 。
t + + ){ c [ k ] = b [ t ] 。
k = k+1 。
elsefor ( t = i 。
t < n 。
t + + ){ c [ k ] = a [ t ] 。
k = k+1 。
}return 。
}41、试写出计算循环链表长度的算法。
算法用C语言描述如下(其中ET为数据元素类型,函数值返回循环链表的长度n ):struct node /* 定义循环链表结点类型*/{ ET d 。
/* 定义循环链表结点数据类型*/struct node * next 。
/* 结点指针*/} 。
int lencst ( struct node * head ){ int n 。
struct node * p 。
n = 0 。
p = head->next 。
while ( p != head ) { n = n+1 。
p = p->next 。
}return ( n ) 。
}42、试写出逆转(带表头结点的)线性单链表的算法。
设其头指针为head ,数据元素类型为ET。
算法用C语言描述如下:struct node /* 定义线性单链表结点类型*/{ ET d 。
/* 定义线性单链表结点数据类型*/struct node * next 。