赞
踩
对
错
正确答案是[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.15. 顺序栈s中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为( )在初始数据表已经有序时,快速排序算法的时间复杂度为O(nlog2n)。
正确答案:× 在数据基本有序时,快速排序蜕变为起泡排序,时间复杂度是O(n2)。
11.采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为多少
成功的平均查找次数:(1+2+3+...+n)/n=(n+1)/2 失败的平局查找次数:(0+1+2+...+n-1)/n=(n-1)/2 12.下列程序的时间复杂度? i=s=0; while(s<n) { i++ s+=i; }
只给提示:每重循环中i增量为1,s增量为i,当s>=n时循环终止。 于是,设循环执行t次,有:1+2+...+t >= n,用n表示出的t就是所求内容。13.剩下的可就是数学问题了……t(1+t)/2>=n,然后可以用求根公式(判别式明显大于零)得到t用n的表示,不难发现它是O(根号n)。线性表采用链表存储结构,要求内存中可用存储单元地址()5
A 必须连接 B部分地址必须连接 C 一定不连接 D 连接不连接均可分析:选择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.21. (设有char a[5],*p=a;)下面的选项中正确的赋值语句是( )。在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.
分析:
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等是一样的,是一种数据结构。 数据结构是数据的存在形式。变量可看成是一个对象,结构可看成是一个类。 类是一个抽象,对象是一个实例. 25.若有定义:char *p(char[10]);则p是函数名。
分析: 如果形式如下:char (*p)(char a[10])此时是定义一个函数指针,名为p 26.switch(a){ case 'a': case 'b': case 'c': 输出语句; break; }
switch 语句来选择要执行的多个代码块之一。工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,
则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
27.
int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置: 文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准, 偏移offset( 指针 偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
28.
具有相同类型的指针类型变量p与数组a,不能进行的操作是
A p=a; B *p=a[0]; C p=&a[0]; D p=&a;
分析: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;bb=(enum aa)5
分析: 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。