1、语言L= {a m b n | m >= 0, n >= 1}的正规表达式是( )。
A.aa*bb*
B.a*bb*
C.aa*b*
D.a*b*
答案:B
解析:由于m的值大于等于0,因此a的个数可能没有,也可能是多个,与之对应的是a*,而n的值是大于等于1的,因此至少有一个b,那么与之对应的就是bb*,所以本题答案选B。
2、算术表达式(a-b)*c+d的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。
A.a b c d - * +
B.a b -- c d * +
C.a b -- c * d +
D.a b c -- d * +
答案:C
解析:本题要求通过中缀表达式,求后缀式(也称为逆波兰)。解答这类问题,可以借助于二叉树。因为中缀表达式对应于一颗二叉树的中序遍历,前缀表达式对应于二叉树的前序遍历,后缀表达式对应于二叉树的后序遍历。所以在本题中,需要先把二叉树构造处理。将表达式(a-b)*c+d构造成二叉树,如图所示。
将树进行后序遍历,得到:ab-c*d+。
3、某系统中仅有5个并发进程竞争某类资源,且都需要3个该类资源,那么至少有( )个该类资源,才能保证系统不会发生死锁。
A.9
B.10
C.11
D.15
答案:C
解析:本题考进程死锁的问题。
题目告诉我们有5个并发进程,且都需要3个资源,那么最坏的情况就是,每个进程都获得了比需要少一个的资源,即5个进程都分配了2个资源,如果这个时候,系统还有多的一个资源,那么无论分给那个进程,都不会死锁,这个时候是11个资源。因此系统只要有11个资源,那么无论怎么分配资源都不会死锁。
4、在13个元素构成的有序表M[1..13]中进行折半查找(向下取整),若找到的元素为M[4],则被比较的元素依次为( )。
A.M[7]、M[3]、M[5]、M[4]
B.M[7]、M[5]、M[4]
C.M[7]、M[6]、M[4]
D.M[7]、M[4]
答案:A
解析:整个查找的过程为:
(1+13)/2=7,因此首先与第7元素比较,由于要查找的元素在其前面,因此用(1+7-1)/2=3,然后与第3个元素比较,由于待查找在其后面,因此用(3+1+6)/2=5,因此接下来与第5个元素进行比较,最后再与第4个元素比较,找到了M[4]。
5、拓扑排序是将有向图中所有顶点排成一个线性序列的过程,并且该序列满足:若在AOV网中从顶点Vi到Vj有一条路径,则顶点Vì必然在顶点Vj之前。对于下面所示的有向图,( )是其拓扑序列。
A.1234576
B.1235467
C.2135476
D.2134567
答案:C
解析:本题考查数据结构中的拓扑排序。
6、 地址编号从80000H到BFFFFH且按字节编址的内存容量为( )KB,若用16K*4bit的存储器芯片构成该内存共需( )片。
A.128
B.256
C.512
D.1024
A.8
B.16
C.32
D.64
答案:第1题:B,第2题:C
解析:从80000H到BFFFFH有BFFFFH-80000H+1个地址单元,即40000H个地址单元。若按字节编址,有218个字节,即256KB。若用16K*4bit的存储芯片,需要(256K*1B)/(16K*4bit)=(256K*8bit)/(16K*4bit)=(256K*2*4bit)/(16K*4bit) = 32片芯片。