【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()
A.【2、1、4、3、9、5、8、6、7】
B.【1、2、5、4、3、9、8、6、7】
C.【2、3、1、4、7、9、5、8、6】
D.【1、2、5、4、3、9、7、8、6】
正确答案: D
第二,
堆是一种经过排序的完全二叉树,最小堆:根结点的键值是所有堆结点键值中最小者。根据这个不难写出原来堆依次为 顶层0 第二层 2 1 第三层 4 3 9 5 第四层 8 6 7
第三,最小堆删除堆顶后,用最后一个元素暂代堆顶,然后变成顶层7 第二层2 1 第三层 4 3 9 5 第四层 8 6 ,7>2>1,故1和7对调,对调后顶层1 第二层2 7 第三层 4 3 9 5 第四层 8 6;因为9>7>5,5和7对调 ,对调后顶层1 第二层 2 5 第三层 4 3 9 7 第四层 8 6;形成新的最小堆
故答案为:D
中缀表达式(a+b)*c*(d-e/f) 转成后缀
ab+c*def/-*
遇到数字:直接输出
遇到'(':压栈
遇到')':持续出栈,如果出栈的符号不是'('则输出,否则终止出栈。
遇到符号则判断该符号与栈顶符号的运算优先级,如果栈顶符号的运算优先级高,则出栈并输出,直到优先级相等或栈为空;如果栈顶符号的运算优先级低于或等于当前符号的运算优先级,则将当前符号压栈。
处理完字符串后将栈中剩余的符号全部输出。
遇到'(':压栈
遇到')':持续出栈,如果出栈的符号不是'('则输出,否则终止出栈。
遇到符号则判断该符号与栈顶符号的运算优先级,如果栈顶符号的运算优先级高,则出栈并输出,直到优先级相等或栈为空;如果栈顶符号的运算优先级低于或等于当前符号的运算优先级,则将当前符号压栈。
处理完字符串后将栈中剩余的符号全部输出。
下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数数组中共有M个字符串,且串长小于N。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
试题程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#define M
5
#define N
20
int
fun(
char
(* ss)[N],
int
*n)
{
int
i, k =
0
, len = N;
for
(i =
0
; i < ______; i++)
{
len = strlen(ss[i]);
if
(i ==
0
)
*n = len;
if
(len ____ * n)
{
*n = len;
k = i;
}
}
return
( _____ );
}
main( )
{
char
ss[M][N] = {
"shanghai"
,
"guangzhou"
,
"beijing"
,
"tianjing"
,
"chongqing"
};
int
n, k, i;
printf(
"\nThe originalb stringsare:\n"
);
for
(i =
0
; i < M; i++)
puts(ss[i]);
k = fun(ss, &n);
printf(
"\nThe length of shortest string is: % d\n"
, n);
printf(
"\nThe shortest string is: % s\n"
, ss[k]);
}
|
A.N,< ,k
B.N, >,k
C.M,<,k
D.M,>,k
C
若6行5列的数组以列序为主序顺序存储,基地址为1000,每个元素占2个存储单元,则第3行第4列的元素(假定无第0行第0列)的地址是()
A.1040
B.1042
C.1026
D.备选答案A,B,C都不对
A
思路:按列存储,第一列的基址是:1000,第二列的基址是:1012,第3列是:1024,第4列是:1036,所以第三行第4列为:1036+2+2=1040