1、若栈S1中保存整数,栈S2中保存运算符,函数F()依次执行下述各步操作:
1)从Si中依次弹出两个操作数a和b;
2)从S2中弹出一个运算符op;
3)执行相应的运算b op a;
4)将运算结果压入S1。
假定S1中的操作数依次是5, 8,3,2 (2在栈顶),S2 中的运算符依次是*,-, + (+在栈顶)。调用3次F()后,Si栈顶保存的值是( )。
A、-15
B、15
C、-20
D、20
答案:B
解析:
第一次调用:①从S1中弹出2和3;
②从S2中弹出+;
③执行3+2=5;
④将5压入S1,第一次调用结束后S1中剩余5, 8, 5(5在栈顶), S2中剩余 * , - (-在栈顶)。
第二次调用:
①从S1中弹出5和8;
②从S2中弹出-;
③执行8-5=3;
④将3压入S1,第二次调用结束后S1中剩余5和3 (3在栈顶),S2中剩余 * 。
第三次调用:
①从S1中弹出3和5;
②从S2中弹出*;
③执行5x3= 15;
④将15压入S1,第三次调用结束后S1中仅剩余15 (栈顶),S2为空。
故选B.
2、现有队列Q与栈S,初始时Q中的元素依次是1,2,3,4,5,6 (1在队头),S为空。若仅允许下列3种操作:①出队并输出出队元素;②出队并将出队元素入栈;③出栈并输出出栈元素,则不能得到的输出序列是( )。
A、1,2,5,6,4,3
B、2,3,4,5, 6, 1
C、3,4,5,6, 1,2
D、6,5,4,3,2, 1
答案:C
解析:A的操作顺序为①①②②①①③③. B的操作顺序为②①①①①①③。D的操作顺序为②②②②②①3③③③③。对于C,首先输出3,说明1和2必须先依次入栈,而此后2肯定比1先输出,因此无法得到1, 2的输出顺序。
3、没有一个12x12的对称矩阵M,将其上三角部分的元素mij (1≤i≤j≤12)按行优先存入C语言的一-维数组N中,元素m6,6在N中的下标是( )。
A、50
B、51
C、55
D、66
答案:A
解析:数组N的下标从0开始,第一个元素m1, 1对应存入no,矩阵M的第一行有12个元素,第二行有11个,第三行有10个,第四行有9个,第五行有8个,故m6,6是第12+11+ 10+9+8+1=51个元素,下标应为50, 故选A.
4、设一棵非空完全二叉树T的所有叶结点均位于同一层,且每个非叶结点都有2个子结点。若T有k个叶结点,则T的结点总数是()。
A、2k-1
B、2k
C、k^2
D、(2^k) -1
答案:A
解析:非叶结点的度均为2,且所有叶结点都位于同一层的完全二叉树就是满二二叉树。对于一棵高度为h的满二叉树(空树h= 0),其最后一层全部是叶结点,数量为2^ (h-1); 总结点数为(2 ^ h)-1。因此当2^ (h-1)=k时,可以得到(2 ^ h)-1=2k- 1。
5、已知字符集{a, b,c,d,e,f},若各字符出现的次数分别为6,3, 8,2, 10, 4,则对应字符集中各字符的哈夫曼编码可能是( )。
A、 00, 1011,01, 1010, 11, 100
B、00, 100, 110, 000, 0010, 01
C、10, 1011, 11, 0011, 00, 010
D、0011, 10, 11, 0010, 01, 000
答案:A
解析:构造一棵符合题意的哈夫曼树,如下图所示。由此可知,左子树为0,右子树为1,故答案为A。
6、已知二叉排序树如下图所示,元素之间应满足的大小关系是( )。
A、x1<x2<x3
B、x1<x4<x5
C、x3<x5<x4
D、x4<x3<x5
答案:C
解析:根据二叉排序树的特性:中序遍历(LNR) 得到的是一个递增序列。图中二叉排序树的中序遍历序列为x1,x3,x5, x4,x2,可知x3<x5<x4.
7、下列选项中,不是如下有向图的拓扑序列的是( )。
A、1,5,2,3, 6,4
B、5,1,2, 6,3,4
C、5,1,2,3, 6, 4
D、5,2,1,6,3, 4
答案:D
解析:拓扑排序每次选取入度为0的结点输出,经观察不难发现拓扑序列前两位一定是 1, 5或5,1 (因为只有1和5的入度均为0,且其他结点都不满足仅有1或仅有5作为前驱)。因此D显然错误。
8、高度为5的3阶B树含有的关键字个数至少是( )。
A、15
B、31
C、62
D、242
答案:B
解析:m阶B树的基本性质:根结点以外的非叶结点最少含有⌈m/2⌉-1个关键字,代入m=3得有两个孩子。此时其树形与h=5的满二叉树相同,可求得关键字最少为31个。有两个孩子。此时其树形与h=5的满二叉树相同,可求得关键字最少为31个。
9、现有长度为7、初始为空的散列表HT,散列函数H(k)= k % 7,用线性探测再散列法解决冲突。将关键字22, 43, 15依次插入HT,查找成功的平均查找长度是( )。
A、1.5
B、1.6
C、2
D、3
答案:C
解析:
10、对初始数据序列(8, 3, 9, 11,2, 1, 4,7,5, 10, 6)进行希尔排序。若第-趟排序结果为(1,3,7,5,2, 6,4,9, 11, 10,8),第二趟排序结果为(1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9),则两趟排序采用的增量(间隔)依次是( )。
A、3,1
B、3,2
C、5,2
D、5,3
答案:D
解析:
第一趟分组: 8,1,6; 3,4; 9,7; 11,5; 2, 10;间隔为5,排序后组内递增。
第二趟分组: 1,5,4,10; 3,2,9,8; 7,6,11; 间隔为3,排序后组内递增。
故答案选D.
11、在将数据序列(6, 1, 5, 9, 8, 4, 7)建成大根堆时,正确的序列变化过程是( )。
A、6,1,7,9,8,4,5→6,9,7,1,8,4,5→9,6,7,1,8,4,5→9,8,7,1,6,4,5
B、6,9,5,1,8,4,7→ 6,9,7,1,8,4,5→9,6,7,1,8,4,5→9,8,7,1,6, 4,5
C、6,9,5,1,8,4,7→9,6,5,1,8,4,7→9,6,7,1,8,4,5→9,8,7,1,6,4,5
D、6,1,7,9,8,4,5→7,1,6,9,8,4,5→7,9,6,1,8,4,5→9,7,6,1,8,4,5→9,8,6,1,7,4,5
答案:A
解析:要熟练掌握建堆、堆的调整方法,从序列末尾开始向前遍历,变换过程如下图所示。