表达式"X=A+B(C-D)/E"的后缀表示形式可以是()//答案是C
A XAB+CDE/-=
B XA+BC-DE/=
C XABCD-E/+=
D XABCDE+/=
//从左到右边遍历这个中缀表达式
//X添加到后缀表达式,=入栈,A添加到后缀表达式中
//+进入栈,B进入后缀表达式,和(入栈,C进入后缀表达式中
//-进入栈,D进入后缀表达式,遇到),-和(出栈,因为/和优先级一样
//所以,出栈,/入栈,E进入表达式,最后将栈中所有操作符依次出栈,
//到后缀表达式中
对于序列( 12 , 13 , 11 , 18 , 60 , 15 , 7 , 19 , 25 , 100 ),
用筛选法建堆,必须从值为 ________ 的数据开始建初始堆//答案是C
A
100
B
12
C
60
D
15//这里需要注意的是有n个元素的序列,若使用筛选法建堆,则从位置为n/2取下整的元素开始建堆
//从第一个有子节点的点开始 即n/2个 如果是0开始的数组下标,n/2-1
已知输入序列为abcd经过输出受限的双向队列后能得到的输出序列有()//答案是BD
A
dacb
B
cadb
C
dbca
D
bdac
E
以上答案都不对//这里需要注意的是,什么叫做经过输出受限的双向队列
//所谓的输出受限的双向队列就是指,入队的话,可以从队尾和队头入队
//出队的话就只能从一个口出,根据输入序列abcd可以知道,当a和b完成
//入队的操作的时候,可能的结果为ab或者ba,c只可能是在这两者的两边
//所以,在出队的时候,c是不可能在a和b之间的,所以A和C错误
有一个虚拟存储系统,若进程在内存中占3页(开始时内存为空),若采用先进先出(FIFO)页面淘汰算法,
当执行如下访问页号序列后1,2,3,4,5, 1,2,5,1,2,3,4,5,会发生多少缺页?//答案是D
A 7
B 8
C 9
D 10
// 访问序列 1 2 3 4 5 1 2 5 1 2 3 4 5
// 物理块1 1 1 1 4 4 4 2 2 2 2 2 2 5
// 物理块2 2 2 2 5 5 5 5 5 5 3 3 3
// 物理块3 3 3 3 1 1 1 1 1 1 4 4
// 是否缺页 ~ ~ ~~~ ~~ ~~~
//~的总个数是10个,所以缺页为10
大小为MAX的循环队列中,f为当前对头元素位置,r为当前队尾元素位置(最后一个元素的位置),则任意时刻,队列中的元素个数为//答案是B
A r-f
B (r-f+MAX+1)%MAX
C r-f+1
D (r-f+MAX)%MAX//这里需要注意的是
//队尾r的位置,如果队尾r是指向队尾元素的下一个位置,那么计算个数的公式是
//(r-f+MAX)%MAX,但是如果r是指向队尾元素时,那么计算公式为(r-f+MAX+1)%MAX,所以
//选择的应该是B
1
以下开源软件中经常被用作队列的是哪个?//答案是选择BD
A MongoDB
B Redis
C Memcached
D kafka
//MongoDB 是非关系型数据库,多用作评论实现等;
//Memcached:
Memcached简洁而强大;它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题;它的API兼容大部分流行的开发语言;
本质上,它是一个简洁的key-value存储系统;
//Redis:虽然也是非关系型数据库,但是有Redis Stream;
//kafka:有Kafka Stream;
递归算法一般需要利用哪种数据结构实现?//答案是D
A 数组
B 链表
C 队列
D 栈
//栈与递归的关系,函数的递归调用和普通函数调用是一样的。当程序执行到某个函数时,将这个函数进行入栈操作,
//在入栈之前,通常需要完成三件事。
//1、将所有的实参、返回地址等信息传递给被调函数保存。
// 2、为被调函数的局部变量分配存储区。
// 3、将控制转移到被调函数入口。
// 当一个函数完成之后会进行出栈操作,出栈之前同样要完成三件事。
//1、保存被调函数的计算结果。
//2、释放被调函数的数据区。
//3、依照被调函数保存的返回地址将控制转移到调用函数。
// 上述操作必须通过栈来实现,即将整个程序的运行空间安排在一个栈中。
//每当运行一个函数时,就在栈顶分配空间,函数退出后,释放这块空间。所以当前运行的函数一定在栈顶。
队列{a,b,c,d,e}依次入队,允许在其两端进行入队操作,但仅允许在一端进行出队操作,则不可能得到的 出队 序 列 是()//答案选C
A
b, a, c, d, e
B
d, b, a, c, e
C
d, b, c, a, e
D
e, c, b, a, d
//两端可入队,一端出队的问题的解题技巧:
//入队顺序为a b c d e,则出队顺序必然包含在序列e d c b a b c d e中,
//找出找出四个选项中不符合顺序条件的序列即可。
关于堆数据结构,下面描述中不恰当的一项是?//答案是D
A
用堆可以实现优先队列(priority_queue)
B
使用堆可以实现排序算法,复杂度为NlogN
C
可以用大顶堆实现快速从M个元素中查找最小的N个元素的算法
D
在大顶堆的二叉树中,第N层中的所有元素比第N+1层中的所有元素都要大
//堆只能保证父子节点之间的大小关系,而不是层与层之间的关系,保证不了
//N层的元素一定比N+1层大
下列关键字序列为堆的是()?//答案是A
A
100,60,70,50,32,65
B
60,70,65,50,32,100
C
65,100,70,32,50,60
D
70,65,100,32,50,60
E
32,50,100,70,65,60
F
50,100,70,65,60,32
//这个需要注意的是关键字序列是否为堆,首先堆是完全二叉树,分为大顶堆和小顶堆,例如:大顶堆就是根节点要大于其孩子节点,
//而且关键字序列转变为堆,就是采用层序遍历的方式还原
以下关于堆的叙述中正确的是()//答案是B
Ⅰ.在一个大根堆中,最小关键字的记录一定属于最底层的叶子结点层
Ⅱ.在一个小根堆中,从根结点到某个叶子结点所经路径上的结点构成一个递增有序序列
Ⅲ.堆一定是一棵完全二叉树
Ⅳ.由某关键字序列构造的一棵完全二叉树经过一次筛选便可以变成一个堆
A
仅Ⅰ、Ⅲ
B
仅Ⅱ、Ⅲ
C
仅Ⅱ、Ⅲ、Ⅳ
D
仅Ⅰ、Ⅱ、Ⅲ
//最主要的是I的错误点在于最小关键字一定是叶子节点,但是并不一定是最底层的叶子节点
对关键码集合K={22,11,38,68,43,6,10,48},用筛选法创建最小堆时,从关键码( )开始调整//答案是C
A 22
B 38
C 68
D 48
//这个问题的解法是,筛选法就是开始按现有的顺序从上到下,从左到右放到一个完全二叉树里面。
//进行比较把这个树调节成堆,调节的时候从最后一个有儿子的节点开始。
//按照筛选法得到的二叉树为,然后从下到上,从右往左得到的第一个有孩子节点的节点,便是从它开始
22
/
11 38
/ \ /
68 43 6 10
/
48
一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为//答案是C
A
(11 5 7 2 3 17)
B
(11 5 7 2 13 3)
C
(17 11 7 2 3 5)
D
(17 11 7 5 3 2)
E
(17 7 11 3 5 2)
F
(17 7 11 3 2 5)
//解题的方法:
//初始堆就是第一次排序时建立的堆的形状,可以将题目中的给的序列按层次写成完全二叉树的形式,再移动元素形成堆。
//最后将堆再按层次遍历的方式写成序列的形式
//移动元素成堆就是,如果某个子节点比它的父节点要大,那么交换两个,直到有序为止