对
错
正确答案是[n/2]+1。因为叶子结点可能出现在最后两层,最小编号的叶子结点为最大编号为n的叶子结点的父结点右边那个结点
分析:两种情况,有可能叶子节点只有1层;则2k-2]+1
叶子节点有2层:[n/2]+1
2.若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指针。在这种存储结构中,n个结点的二叉树共有_____2n___个指针域,其中有____n-1____个指针域是存放了地址,有____n+1____个指针是空指针。为什么?在线等。
因为有n个节点,每个节点都存了一个lchild,一个rchild,所以共2n个指针域。
因为除了根节点,其他所有的节点都存在自己的父节点,而父节点肯定存在指向其孩子的指针,所以有n-1个存了地址(根节点没有父节点,所以-1),因为总数是2n个所以NULL的就是2n-(n-1)=n+1个
3.在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有向完全图中,包含有________条边
分析:完全图 和 连通图 不一样 n*(n+1)/2 n*(n+1)
4.一个有N个顶点和E条边的无向图 在其对应的邻接表中所含边结点数为?还有边结点的意思是什么?
无向图就是不分方向的图 连接表的横列有N项,纵列也是N项 形成的N*N项每项都被称为边结点 每项都有纵横两个坐标,例如点(N,N-1),表示的就是从第N点向第N-1点有无路径. 由于有E条边,自然有E条路径,但是由于无向,=双向,所以要乘以二
5.n个顶点的强连通图的边数至少有n个,那n个连通图的边数至少有n-1个,为什么
1、强连通图,指有向图中,任意两点之间都有路径.则最少情况是这N个点排成环.
2、连通图,是无向图中,任意两点间有路径,只需要这N点排成一条线然后相邻的连接起来.
6.
最差情况下是O(n) 如果是最一般最基础的二叉树的话, 因为深度不平衡,所以会发展成单链的形状,就是一条线 n个点那么深
如果是深度平衡的二叉树 o(logn)
7.设一组权值集合W={2,3,4,5,6},则由该权值集合构造的哈夫曼树中带权路径长度之和为( ).
(A) 20(B) 30(C) 40(D) 45
带权路径=6*2+5*2+4*2+3*3+2*3=45
8.设某无向图中有n个顶点e条边,则建立该图邻接表的时间复杂度为( )。
(A) O(n+e) (B) O(n) (C) O(ne) (D) O(n)
9.
C,最好选择,也就只有一个答案,首先明确哈希函数的除留余法的P选择小于长度的最大质数比较好,所以C 质数也就是素数,就是除了1和本身不能让其他除尽 10.
剩下的可就是数学问题了……t(1+t)/2>=n,然后可以用求根公式(判别式明显大于零)得到t用n的表示,不难发现它是O(根号n)。
选择D。 不过应该不是“连接”,而是“连续”。 链式存储结构与顺序存储结构相比,最大的优点就是地址不连续。因此才会使得元素的插入、删除等操作变得方便。线性表只是逻辑结构,按照链式存储之后,定义操作只能按照线性结构来
A.s.elem[top]=e;
s.top=s.top+1;
B.s.elem[top+1]=e;
s.top=s.top+1;
C.s.top=s.top+1;
s.elem[top+1]=e;
D.s.top=s.top+1;
s.elem[top]=e;
分析:假定一个链栈的栈顶指针用top表示,每个结点的结构由一个数据域data和一个指针域组成,当p指向的结点进栈时
,执行的操作为().
A.p->next=top;
B.top=p;p->next=top;
C.p->next=top->next;top->next=p;
D.p->next=top;top=p;
分析:栈顶指针执行栈顶元素,链栈使用头插法
16.
一、线索二叉树的原理
通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。
记ptr指向二叉链表中的一个结点,以下是建立线索的规则:
(1)如果ptr->lchild为空,则存放指向中序遍历序列中该结点的前驱结点。这个结点称为ptr的中序前驱;
(2)如果ptr->rchild为空,则存放指向中序遍历序列中该结点的后继结点。这个结点称为ptr的中序后继;
其中:
(1)ltag为0时指向该结点的左孩子,为1时指向该结点的前驱;
(2)rtag为0时指向该结点的右孩子,为1时指向该结点的后继;
17.
18.
分析形参:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。 即 实际调用的时候 ,是形参的结果 作为最终结果,给实参传入函数 19.
在turbo C中,系统为整型(int)数据分配两个字节,表示范围在-32768到32767之间。如果不在这个范围内就要使用长整型(long int)来表示了。
在Visual C++中,系统为整型(int)数据分配四个字节,表示的范围在-2147483648到2147483647之间 20. 值为5的枚举常量是() enum week{sun,mon=4, tue,wed,thu,fri,sat}w; A.tue B.sat C.fri D.thu 允许多个枚举成员有相同的值. 没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1. 21. (设有char a[5],*p=a;)下面的选项中正确的赋值语句是( )。分析:
A)p=p+2;
意思是将a[2]的地址赋给p:p=&a[2];
B)a是个指针常量不能赋值
C)如果将*p的星号去掉就是正确的
D)a是个数组名是一个不能改变的左值
22.设有以下程序段,则值为6的表达式是( ).
struct st{ int n; struct st *next;};
staticstruct st a[3]={5,&a[1],7,&a[2],9,0 },*p;
p=&a[0];
A p++->n B++p->n C p->n++ D (*p).n++
分析:
++p->n的优先级是先取出p指向的结构体中的n值,再对n加一,p指向结构体数组的首元素,p->n = 5,然后5+1 = 6;
23.
输出AB,
24.
结构体类型是我们自定义的类型,它和其他的如int、char等是一样的,是一种数据结构。
数据结构是数据的存在形式。
分析: 如果形式如下:char (*p)(char a[10])此时是定义一个函数指针,名为p 26.
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,
则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
27.
28.
char * 与 char ** 值不同,char * 的结果执行的对象在常量区,但是 char ** 的 结果在 堆栈区域,难以使用字符类型ascii进行转换,所以报错。
尽量按照同类型转换,强制转换也是 同级指针。
指针包含两个方面的内容:一是存储单元的起始地址,二是操作对象的类型,这两个是缺一不可的。在汇编语言中有这样的汇编指令: mov ds:[bx],6 '将数值6存储到ds:bx所确定的存储单元 其实它是不能通过编译的,虽然通过ds:bx可以确定该存储单元的地址,但却不知道是将数值6存储到该地址开始的字节中、字中、还是双子中等,必须明确指出,比如: mov byte ptr ds:[bx],6 '存储到字节中 mov word ptr ds:[bx],6 '存储到字中 mov dword ptr ds:[bx],6 '存储到双字中 这样才能通过编译。
29.
分析: enum aa{a=5,b,c} bb; 是C语言中定义的枚举类型;意思是:定义aa这个数据类型,其取值范围是a,b,c三个数,其中,a=5, b=6,c=7(如果不给b,c指定数值,就是其前一个数+1)。 同时定义aa 这个数据类型的变量bb bb=(enum aa)5;和你学到的 int a = (int)b;功能一样,是把数值5转义成(enum aa)数据类型,同时赋值给变量bb;30.