1.若有char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为( )。
(2分)
A.float
B.char
C.int
D.double
D
解析:
整形和浮点型计算,结果为浮点型;单精度和双精度计算,结果为双精度
因为在计算这个表达式时,首先要将各个变量强制转化为最高的存储类型。相当于(double)w*(double)x+(double)z-y,所以是double类型了。
c语言中两个不同类型的运算,要转化成同类型的,转换从低到高 char–>float–>short–>int–>double。
2.以下关于数据结构的说法中错误的是( )。
A.数据结构相同,对应的存储结构也相同
B.数据结构涉及数据的逻辑结构、存储结构和施加其上的操作3个方面
C.数据结构操作的实现与存储结构有关
D.定义逻辑结构时可不考虑存储结构
A
解析:
线性表,可以顺序存储,也可以链式存储,但是并没有改变线性表的逻辑特征
3.以下选项中属于非线性结构的是( )。
A.广义表
B.队列
C.优先队列
D.栈
A
解析:
广义表(Lists,又称列表)是一种非连续性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构
4.若将一棵树 T 转化为对应的二叉树 BT,则下列对 BT 的遍历中,其遍历序列与 T 的后根遍历序列相同的是:
A.先序遍历
B.中序遍历
C.后序遍历
D.按层遍历
B
解析:
一棵树的后根遍历与这棵树所对应的二叉树的中序遍历相同。因为树转化为二叉树后是没有右子树的,所以最后访问的是树的根结点。
给定一棵树,可以找到唯一一棵二叉树与之对应,同样,森林也与一棵树存在一一对应关系。树与二叉树,森林与二叉树的转化(a)(b)(c)为三棵树,并构成一个森林,(d)(e)(f)分别为(a)(b)(c)对应的二叉树,(g)为森林对应的二叉树。
树结构有两种次序遍历树的方法:
1、先根遍历:先访问树的根节点,再依次先根遍历子树;
2、后根遍历:先依次后根遍历子树,再访问树的根节点。
因为树并不一定是二叉树,‘中’的概念不好定义,比如对于一个拥有3个子树的根节点来说,根节点除了先根和后根两种遍历方式之外还有另外两种次序。
如一种次序是先遍历根节点的第一棵子树,再访问根节点,之后再依次遍历剩余子树,另一种次序是,先遍历根节点的前两棵子树,再访问根节点,最后访问第三棵子树。对于拥有更多子树的根节点来说,依次遍历的方法更多。
5.如果A和B都是二叉树的叶结点,那么下面判断中哪个是对的?
A.存在一种二叉树结构,其前序遍历结果是…A…B…,而中序遍历结果是…B…A…
B.存在一种二叉树结构,其中序遍历结果是…A…B…,而后序遍历结果是…B…A…
C.存在一种二叉树结构,其前序遍历结果是…A…B…,而后序遍历结果是…B…A…
D.以上三种都是错的
D
6.对于一个有N个结点、K条边的森林,共有几棵树?
A.N−K
B.N−K+1
C.N−K−1
D.不能确定
A
解析:
由一颗树的性质:结点等于边+1【n= k+ 1】。
等价于 n - k =1。
故共有 n - k 棵树。
7.在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
A.访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)
B.在第i个结点后插入一个新结点(1≤i≤N)
C.删除第i个结点(1≤i≤N)
D.将N个结点从小到大排序
A
8.对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:
A.O(1), O(1)
B.O(1), O(N)
C.O(N), O(1)
D.O(N), O(N)
B
解析:
题目字眼 “ 顺序存储 ” ,说明内存单元中分配的存储空间是连续的,所 以该线性表为数组形式存储,所以数组访问时,通过下标可随机访问,时间复杂度为O(1),而增加插入时,需要涉及大量元素的移动,所以时间复杂度为O(N)。
9.在长度为n的()上,删除第一个元素,其算法的时间复杂度为O(n)。
A.只有表头指针的不带表头结点的循环单链表
B.只有表尾指针的不带表头结点的循环单链表
C.只有表尾指针的带表头结点的循环单链表
D.只有表头指针的带表头结点的循环单链表
10.如果所有的变量按照下面的程序进行定义和声明,那么在main()函数中所有可用的变量为 ()。
void fun(int x)
{static int y;……return;
}
int z;
void main( )
{int a,b;fun(a);……
}
A.x,y
B.x,y,z
C.a,b,z
D.a,b,x,y,z
C
解析:
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。
普通局部变量存储于进程栈空间,使用完毕会立即释放。
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。
变量在全局数据区分配内存空间;编译器自动对其初始化
其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束