数据结构作业二_第1页
数据结构作业二_第2页
数据结构作业二_第3页
数据结构作业二_第4页
数据结构作业二_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作业二作业二一、单项选择题1. 给定有n个元素的向量,建立一个有序单链表的时间复杂度是( C   )。   A.O(1)   B. O(n)   C. O(n2) D. O(nlog2n)2. 带表头的双向循环链表的空表满足( B   )。  A. firstNULL;  B. first->rLink=first C. first->lLink=NULL D. first->rLink=NULL3. 栈的插入和删除操作在( A 

2、;    )进行。 A. 栈顶      B. 栈底        C. 任意位置           D. 指定位置4. 在一个顺序存储的循环队列中,队头指针指向队头元素的(  A   )位置。 A. 前一个      B. 后一个        C. 当前     

3、        D. 后面5. 假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为(  D   )。 A. front+1 = rear B. rear+1 = front C. front = 0 D. front = rear6. 设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。若想摘除链式栈的栈顶结点,并将被摘除结点的值保存到x中,则应执行(  A     )操作。&

4、#160;  A. x=top->data; top=top->link;         B. top=top->link; x=top->data;   C. x=top;  top=top->link;             D. x=top->data;7. 为增加内存空间的利用率和减少溢出的可能性, 由两个栈共享一块连续的内存空间时, 应将两栈的(  

5、;D   )分别设在这块内存空间的两端。           A. 长度      B. 深度     C. 栈顶     D.  栈底8. 在系统实现递归调用时需利用递归工作记录保存( C    ),当递归调用程序执行结束时通过它将控制转到上层调用程序。 A. 调用地址        B. 递归入口

6、0;     C. 返回地址        D. 递归出口9. 如果一个递归函数过程中只有一个递归语句,而且它是过程体的最后语句,则这种递归属于(  D   ),它很容易被改写为非递归过程。 A. 单向递归        B. 回溯递归       C. 间接递归          D. 尾递归10. 设有一个广义表A (a),其表尾为( C  &

7、#160; )。  Aa        B( ( ) )     C()           D(a)11. 对于一组广义表A( ), B(a,b), C(c,(e,f,g), D(B,A,C), E (B, D),其中的E是( D    )。 A. 线性表  B. 纯表     C. 递归表        D. 再入表12. 在一棵树中

8、,(  C    )没有前驱结点。        A. 树枝结点    B. 叶子结点    C. 树根结点    D. 空结点13. 在一棵具有n个结点的二叉树的第i层上(假定根结点为第0层,i大于等于0而小于等于树的高度),最多具有(  A    )个结点。        A. 2i       B. 2i+1&#

9、160;      C. 2i-1      D. 2n二、填空题1. 链表与顺序表、索引表、散列表等都是数据逻辑结构的(存储)表示。2. 队列是一种限定在表的一端插入,在另一端删除的线性表,它又被称为(先进先出)表。3. 向一个顺序栈插入一个元素时,首先使(栈顶指针)后移一个位置,然后把待插入元素写入到这个位置上。4. 向一个循环队列中插入元素时,需要首先移动(队尾)指针,然后再向所指位置写入新元素。5. 在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列至多有(1)个结点。6. 递归工作栈起到两个作用,其一是将

10、递归调用时的实际参数和返回地址传递给下一层递归;其二是保存本层的形式参数和(局部变量)。7. 非空广义表的除第一个元素外其他元素组成的表称为广义表的(表尾)。8. 广义表的深度定义为广义表括号的(重数)。9. 一棵树的广义表表示为a(b(c,d(e,f),g(h),i(j,k(x,y),结点f的层数为(3)。假定树根结点的层数为0。10. 在一棵三叉树中,度为3的结点数有2个,度为2的结点数有1个,度为1的结点数为2个,那么度为0的结点数有(6)个。11一棵二叉树中,假定双分支结点数为5个,单分支结点数为6个,则叶子结点数为(6)个。12.在一棵高度为h的理想平衡二叉树中,最多含有(2h+1-

11、1)个结点。假定树根结点的高度为0。三、判断题(对/错)1在用单链表表示的链式队列Q中,队头指针为Q->front,队尾指针为Q->rear,则队空条件为Q->front = Q->rear。错2递归调用算法与相同功能的非递归算法相比,主要问题在于重复计算太多,而且调用本身需要分配额外的空间和传递数据和控制,所以时间与空间开销通常都比较大。对3将f = 1 + 1/2 + 1/3+ + 1/n转化为递归函数时,递归部分为f (n) = f (n-1) + 1/n,递归结束条件为f (1) = 1。对4. 一个广义表 ( (a), ( (b), c), ( ( (d) )

12、 ) ) 的长度为3,深度为4。对5. 当从一个最小堆中删除一个元素时,需要把堆尾元素填补到堆顶位置完成删除操作。错6. 在一棵二叉树中,假定每个结点只有左子女,没有右子女,对它分别进行中序遍历和后序遍历,则具有相同的结果。对. 在一棵二叉树中,假定每个结点只有左子女,没有右子女,对它分别进行中序遍历和后序遍历,则具有相同的结果。对7. 在树的存储中,若使每个结点带有指向双亲结点的指针,这为在算法中寻找双亲结点带来方便。对8        于一棵具有n个结点的任何二叉树,进行前序、中序或后序的任一种次序遍历的空间复杂度为O(log2n)。错9对具有n个结

13、点的堆进行插入一个元素运算的时间复杂度为O(n)。对四、运算题1. 已知一棵树的静态双亲表示如下,其中用-1表示空指针,树根结点存于0号单元,分别求出该树的叶子结点数、单分支结点数、两分支结点数和三分支结点数。 序号:   0    1    2    3    4    5    6    7    8    9    10a  b  c

14、0; d   e  f  g  h  i   j   k-1  0    1   1  3  0   5   6   6   0   9      data:       parent:叶子结点数:  5 单分支结点数:3 两分支

15、结点数:2 三分支结点数:12. 已知一个有序表(15,26,34,39,45,56,58,63,74,76,83,94)顺序存储于一维数组a12中,根据折半搜索过程填写成功搜索下表中所给元素34, 56, 58, 63, 94时的比较次数。34        56        58        63        942        1       

16、 3        4        4元素      比较次数3. 假定一个线性序列为 (38,42,55,15,23,44,30,74,48,26),根据此线性序列中元素的排列次序生成一棵二叉搜索树,求出该二叉搜索树中左子树为空的所有单支结点和右子树为空的所有单支结点,请按照结点值从小到大的次序写出。左子树为空的所有单支结点:15,23,42,44 右子树为空的所有单支结点:304. 假定一组记录为(40,28,16,56,50,32,30,63,44,38),按次序插入

17、每个记录生成一棵AVL树,请回答插入时造成不平衡的结点个数。插入时造成不平衡的结点个数:45. 已知图G=(V,E),其中V=a,b,c,d,e,E=<a,b>,<b,a>,<c,b>,<c,d>,<d,e>,<e,a>,<e,c>,请写出各结点的出度和入度。                             

18、0;  结点    a     b     c     d     e 出度    1     1     2     1     2入度    2     2

19、     1     1     16. 已知一个图的顶点集V和边集G分别为:        V=1,2,3,4,5,6;       E=<1,2>,<1,3>,<2,4>,<2,5>,<3,4>,<4,5>,<4,6>,<5,1>,<5,3>,6,5>

20、    假定该图采用邻接表表示,每个顶点邻接表中的边结点都是按照终点序号(即数值域的值)从小到大的次序链接的,试写出:        (1) 从顶点1出发进行深度优先搜索所得到的顶点序列;        (2) 从顶点1出发进行广度优先搜索所得到的顶点序列。 答(1):1,2,4,5,3,6      (2):1,2,3,4,5,6五、算法分析题1. 请写出下面算法的功能.void unknown(Queue &Q)    &#

21、160;    Stack S; int d;        S.InitStack( );        while(!Q.IsEmpty( )             Q.DeQueue(d);  S.Push(d);              

22、  while(!S.IsEmpty( )             S.Pop(d);    Q.EnQueue(d);             利用"栈"作为辅助存储,将队列中的元素逆置(即相反次序放置)。2. 下面是判断一个带表头结点的双向循环链表L其前后结点值是否对称相等的算法, 若相等则返回1,否则返回0。请按标号补充合适的内容。  

23、60; int symmetry ( DoublelList* DL )     DoublelNode * p = DL->rLink, *q = DL->lLink;        while (p != q)           if ( p->data = q->data )               p = p->r

24、Link;               _(1)_;              if(p->lLink=q) _(2)_;                                 

25、60;  else _(3)_;       return 1;    (1) q = q->lLink  (2) return 1   (3) return 03. 设有一个求解汉诺塔(Hanoi)的递归算法如下:void HANOI ( int n, int peg1, int peg2, int peg3 )         if(n=1) cout<<peg1<<-><<

26、peg3<<endl;else         HANOI(n-1, peg1, peg3, peg2);            cout<<peg1<<-><<peg3<<endl;            HANOI(n-1, peg2, peg1, peg3);     

27、0;  当使用HANOI( 3,1,2,3)进行调用时,执行过程中else子句的cout语句得到的结果为:1213234. 已知二叉树中的结点类型BinTreeNode定义为:  struct BinTreeNode ElemType data;        BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。下面函数的功能是:从二叉树BT中查找值为X的结点,返回指向其父结点的指针。若该结点不存在或为树根结点则返回空。算法中参数PT的初值为NUL

28、L。请在划有横线的地方填写合适内容。BinTreeNode* ParentPtr(BinTreeNode* BT, BinTreeNode* PT, ElemType& X)            if(BT=NULL) return NULL;        else if(BT->data=X) return PT;        else      

29、;           if(PT=ParentPtr(BT->left,BT,X) _(1)_;             if _(2)_ return PT;                 else _(3)_;             (1) return

30、 PT (2) (PT=ParentPtr(BT->right,BT,X) (3) return NULL  或return 0六、算法设计题1. 计算多项式 Pn (x) = a0 xn + a1 xn-1 + a2 xn-2 + + an-1 x + an  通常使用的方法是一种递推的方法。它可以描述为如下的递推形式:            pn (x) = x * pn-1 (x) + an  (n>0)此处      

31、0;     Pn-1 (x) = a0 xn-1 + a1 xn-2 + + an-2 x + an-1               P0=an这也是问题的递归形式。多项式的递归求解形式为:poly(x, 0) = A0poly(x, n) = x * poly(x, n-1) + An,  n > 0试编写一个递归函数,计算这样的多项式的值。float poly ( float x, float A, int n ) 答:float poly (

32、 float x, float A , int n )            if ( ! n ) return A0;                                   else return x * poly( x, A, n-1 ) + An;      

33、         2. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode char data;        BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。根据下面函数声明编写出求一棵二叉树高度的算法,该高度由函数返回。假定树根的层次为0,参数BT初始指向这棵二叉树的根结点。     &#

34、160;  int BTreeHeight(BinTreeNode* BT);答:int BTreeHeight(BinTreeNode* BT)        if(BT=NULL)      /对于空树,返回-1并结束递归                return 1;          else        

35、       /计算左子树的高度                int h1=BTreeHeight(BT->left);       /计算右子树的高度                int h2=BTreeHeight(BT->right);       /返回树的高度    

36、60;           if(h1>h2) return h1+1;                  else return h2+1;         说明:函数体中的两个else可以没有3. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode char data;  &

37、#160;     BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中叶子结点总数的算法,该总数值由函数返回。假定参数BT初始指向这棵二叉树的根结点。        int BTreeLeafCount(BinTreeNode* BT);答:int BTreeLeafCount(BinTreeNode* BT)        if(BT=NULL) return

38、 0;         else if(BT->left=NULL && BT->right=NULL) return 1;         else return BTreeLeafCount(BT->left)+BTreeLeafCount(BT->right); 说明:函数体中的两个else可以没有ley0 2006-11-17 08:59作业三作业三一、单项选择题1. 在一棵具有n个结点的完全二叉树中,树枝结点的最大编号为(  D  &#

39、160; )。假定树根结点的编号为0。A. &euml;(n-1)/2&ucirc; B.&euml;n/2&ucirc; C. én/2ù D. euml;n/2&ucirc;-12. 在一棵树的左子女-右兄弟表示法中,一个结点的右子女是该结点的(  A    )结点。        A. 兄弟     B. 父子     C

40、. 祖先     D. 子孙3. 已知一棵树的边集表示为<A,B>, <A,C>, <B,D>, <C,E>, <C,F>, <C,G>, <F,H>, <F,I>,则该树的深度为(  B    )。假定树根结点的高度为0。        A. 2        B. 3   

41、60;    C. 4        D. 54. 一棵树的广义表表示为a(b,c(e,f(g),d),当用左子女-右兄弟链表表示时,右指针域非空的结点个数为(  C    )。        A 1        B 2         C 3     &#

42、160; D 45. 对长度为10的顺序表进行搜索,若搜索前面5个元素的概率相同,均为1/8,搜索后面5个元素的概率相同,均为3/40,则搜索任一元素的平均搜索长度为(  C    )。        A. 5.5      B. 5         C. 39/8      D. 19/46. 对于长度为n的顺序存储的有序表,若采用折半搜索,则对所有元素的

43、搜索长度中最大的为(   A   )的值向上取整。        A. log2(n+1)      B. log2n      C. n/2       D. (n+1)/27. 对于长度为18的顺序存储的有序表,若采用折半搜索,则搜索第15个元素的搜索长度为(  B    )。      

44、60; A. 3         B. 4         C. 5         D. 68. 从具有n个结点的二叉搜索树中搜索一个元素时,在等概率情况下进行成功搜索的时间复杂度大致为(  C    )。        A. O(n)      B. O(1)

45、60;     C. O(log2n)      D. O(n2)9. 向一棵AVL树插入元素时,可能引起对最小不平衡子树的调整过程,此调整分为( C   )种旋转类型。        A. 2      B. 3        C. 4       D. 510. 设G1=(V1,E1)和G2=(V2,E2

46、)为两个图,如果V1&Iacute;V2,E1&Iacute;E2,则称 ( A )。   AG1是G2的子图           BG2是G1的子图   CG1是G2的连通分量       DG2是G1的连通分量11. n个顶点的连通图中至少含有 (  A  )。   An-1条边      Bn条边  

47、60;  Cn(n-1)/2条边    Dn(n-1)条边12. 对于具有e条边的无向图,它的邻接表中有 ( D   ) 个边结点。   Ae-1       Be      C2(e-1)      D2e13. 在n个顶点的有向无环图的邻接矩阵中至少有 (  C  ) 个零元素。   An     

48、60;Bn(n-1)/2      Cn(n+1)/2        Dn(n-1) 二、填空题1在一个堆的顺序存储中,若一个元素的下标为i(0in-1),则它的左子女元素的下标为(2i+1)。2在一个最大堆中,堆顶结点的值是所有结点中的(最大值)。3. 假定一个顺序表的长度为40,并假定顺序搜索每个元素的概率都相同,则在搜索成功情况下的平均搜索长度为(20.5)。4. 从一棵二叉搜索树中搜索一个元素时,若给定值大于根结点的值,则需要向(右子树)继续搜索。5. 在一棵AVL树中,每个结点的左子树

49、高度与右子树高度之差的绝对值不超过(1)。6. 根据一组记录(56,42,38,64,48)依次插入结点生成一棵AVL树时,当插入到值为38的结点时需要进行(右单旋转)调整。7. n (n0) 个顶点的连通无向图各顶点的度之和最少为(2(n-1))。8. 设图G = (V, E),V = 1, 2, 3, 4, E = <1, 2>, <1, 3>, <2, 4>, <3, 4>,从顶点1出发,对图G进行广度优先搜索的序列有(2)种。9. n个顶点的连通无向图的生成树含有(n-1)条边。10. 一般来说,深度优先生成树的高度比广度优先生成树的高度

50、要(高)。11. 第i (i = 1, 2, , n-1) 趟从参加排序的序列中取出第i个元素,把它插入到由第0个至第i-1个元素组成的有序表中适当的位置,此种排序方法叫做(直接插入)排序。三、判断题(对/错)1. 能够在链接存储的有序表上进行折半搜索,其时间复杂度与在顺序存储的有序表上相同。错2. 折半搜索所对应的判定树,既是一棵二叉搜索树,又是一棵理想平衡二叉树。对3. 对于两棵具有相同记录集合而具有不同形态的二叉搜索树,按中序遍历得到的结点序列是相同的。对4.用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。对5. 存储有向图

51、的邻接矩阵是对称的,因此可以只存储邻接矩阵的下(上)三角部分。错6. 有回路的有向图不能完成拓扑排序。对7. 对于AOE网络,加速任一关键活动就能使整个工程提前完成。错8. 对一个连通图进行一次深度优先搜索可以遍访图中的所有顶点。对四、运算题1. 已知一个图的顶点集V和边集G分别为:        V=1,2,3,4,5,6;       E=<1,2>,<1,3>,<2,4>,<2,5>,<3,4>,<4,5>,

52、<4,6>,<5,1>,<5,3>,6,5>    假定该图采用邻接表表示,每个顶点邻接表中的边结点都是按照终点序号(即数值域的值)从大到小的次序链接的,试按照遍历算法写出:        (1) 从顶点1出发进行深度优先搜索所得到的顶点序列;        (2) 从顶点1出发进行广度优先搜索所得到的顶点序列。 答(1):1,3,4,6,5,2      (2):1,3,2,4,5,62. 已知一个带权图的顶点集

53、V和边集G分别为:        V=0,1,2,3,4,5,6;        E=(0,1)19,(0,2)10,(0,3)14,(1,2)6,(1,5)5,(2,3)26,(2,4)15,(3,4)18,           (4,5)6,(4,6)6,(5,6)12;       试根据迪克斯特拉(Dijkstra)算法求出从顶点0到其余各顶点的最短

54、路径,在下面填写对应的路径长度。    顶点:     0     1     2     3     4     5     6路径长度: 0     16    10    14    25

55、60;   21    313. 已知一个AOV网络的顶点集V和边集G分别为:        V=0,1,2,3,4,5,6,7;      E=<0,2>,<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>,<4,7>,<5,7>,<6,7>    若存储它采用邻接表,并且每个顶点邻接表中的边结点

56、都是按照终点序号(即dest域的值)从小到大的次序链接的,则按主教材中介绍的进行拓扑排序的算法,写出得到的拓扑序列(提示:先画出对应的图形,然后再运算)。    拓扑序列:1,3,6,0,2,5,4,74. 已知一个AOE网络的顶点集V和边集G分别为:        V=0,1,2,3,4,5;        E=<0,1>5,<0,2>8,<1,2>7,<1,3>10,<1,4>6,<2,

57、4>3,<3,4>9,<3,5>15,<4,5>12;    若存储它采用邻接表,则按主教材中介绍的求关键路径的方法,依次写出所有的关键活动(用边表示),并求出关键路径长度(提示:先画出对应的图形,然后再运算)。所有关键活动:<0,1>5,<1,3>10,<3,4>9,<4,5>12关键路径长度:365. 如果某个文件经内排序得到80个初始归并段,试问  (1) 若使用多路归并执行3趟完成排序,那么应取的归并路数至少应为多少?  (2) 如果操作系统要求一个程序同时

58、可用的输入/输出文件的总数不超过15个,则按多路归并至少需要几趟可以完成排序?答(1)归并路数: 5              (2)需要归并躺数:2答案解释:    (1) 设归并路数为k,初始归并段个数m = 80,根据归并趟数计算公式S = élogkmù = élogk80ù = 3得:k380。由此解得k5,即应取的归并路数至少为5。        (2) 设多路归并的归并路数为k,需要

59、k个输入缓冲区和1个输出缓冲区。1个缓冲区对应1个文件,有k +1 = 15,因此k = 14,可做14路归并。由S = élogkmù = élog1480ù = 2。即至少需2趟归并可完成排序。五、算法分析题1. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode ElemType data; BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。根据下面函数的定

60、义指出函数的功能。算法中参数BT指向一棵二叉树。    void BTC(BinTreeNode* BT)                if(BT!=NULL)                     if( BT->left!=NULL && BT->right!=NULL)       

61、0;                     if(BT->left->data>BT->right->data)                                     BinTreeNode* t=BT->left;

62、0;                                   BT->left=BT->right;                                    BT->

63、right=t;                                            BTC(BT->left);                    BTC(BT->right);

64、60;                   算法功能:当BT中每个结点的左子女的值大于右子女的值则交换左右子树。2. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode char data;        BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。

65、假定一棵二叉树采用链接存储,它的广义表表示为r(b(,d(f,g),t(e),rt,bt,dt和et指针变量分别保存指向r,b,d和e结点的指针值,则:执行BTM(rt)调用后,得到的函数值为_(1)_;执行BTM(bt)调用后,得到的函数值为_(2)_;执行BTM(dt)调用后,得到的函数值为_(3)_;执行BTM(et)调用后,得到的函数值为_(4)_;char BTM(BinTreeNode* BT)            static char max=0;      

66、0;     if(BT!=NULL)                     char k1,k2;                    k1=BTM(BT->left);                  &

67、#160; k2=BTM(BT->right);                    if(k1>max) max=k1;                    else if(k2>max) max=k2;                

68、    else if(BT->data>max) max=BT->data;                        return max;(1) t   (2) g   (3) g   (4) e   3. 在a10数组中数据16,35,42,73,54,58,80为一个最小堆,n为整型变量,其值为7

69、,则执行DH(a,n)调用下面算法后数组a中的数据变为_。int DH(int HBT, int& n)            if(n=0) cerr<<"null!"<<endl; exit(1);            int temp=HBT0;            n-;   

70、;         int x=HBTn;            int i=0;            int j=2*i+1;            while(j<=n-1)                &

71、#160;    if(j<n-1 && HBTj>HBTj+1) j+;                    if(x<=HBTj) break;                    HBTi=HBTj;            &

72、#160;       i=j; j=2*i+1;                        HBTi=x;            return temp;35,54,42,73,80,584. 假定p1和p2是两个单链表的表头指针,用来表示两个集合,单链表中的结点包括值域data和指向后继结点的指针域l

73、ink,试根据下面算法指出算法功能。int SS(ListNode* p1, ListNode* p2)            while(p2!=NULL)                        ListNode* r=p1;                  

74、0; While(r!=NULL)                             if(p2->data=r->data) break;                    r=r->link;            &

75、#160;                           if(r=NULL) return 0;                    p2=p2->link;                &#

76、160;       return 1;判断p2单链表所代表的集合是否为p1单链表所代表的集合的子集合,若是则返回1否则返回0。5. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode ElemType data;        BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左、右子女结点的指针域。参数bt指向一棵二叉树,引用参数x一

77、开始具有的值小于树中所有结点的值。试根据下面的函数定义指出此算法的功能。    int JB(BinTreeNode* bt, ElemType& x)            if(bt=NULL) return 1;        else            if(JB(bt->left,x)=0) return 0;  

78、60;        if(bt->data<x) return 0;           x=bt->data;               if(JB(bt->right,x)=0) return 0;               

79、else return 1;                算法功能:判断二叉树bt是否为一棵二叉搜索树,若是则返回1否则返回0。六、算法设计题1. 已知二叉树中的结点类型BinTreeNode定义为:        struct BinTreeNode char data;        BinTreeNode *left, *right;其中data为结点值域,left和right分别为指向左

80、、右子女结点的指针域,根据下面函数声明编写出判断两棵二叉树是否相等的算法,若相等则返回1否则返回0。算法中参数T1和T2为分别指向这两棵二叉树根结点的指针。当两棵树的结构完全相同并且对应结点的值也相同时才被认为相等。                int BTreeEqual(BinTreeNode* T1,BinTreeNode* T2);答:int BTreeEqual(BinTreeNode* T1,BinTreeNode* T2)  /若两棵树均为空则返回1表示相等  

81、0; if(T1=NULL && T2=NULL) return 1;     /若一棵为空一棵不为空则返回0表示不等                else if(T1=NULL | T2=NULL) return 0;    /若根结点值相等并且左、右子树对应相等则两棵树相等        else if(T1->data=T2->data && B

82、TreeEqual(T1->left, T2->left) &&                           BTreeEqual(T1->right, T2->right) )                return 1;   /若根结点值不等或左、右子树对应不等则两棵树不等 

83、;           else        return 0; 2. 已知二叉树中的结点类型用BinTreeNode表示,被定义为:        struct BinTreeNode char data;        BinTreeNode *left, *right;    其中data为结点值域,left和right分别为指向左、右子女结点的指针域,根据下

84、面函数声明编写出复制一棵二叉树的算法,并返回复制得到的二叉树的根结点指针。算法中参数BT初始指向待复制二叉树的根结点。        BinTreeNode* BTreeCopy(BinTreeNode* BT);答:BinTreeNode* BTreeCopy(BinTreeNode* BT)    if(BT=NULL) return NULL;         else           /得到新结点

85、0;       BinTreeNode* pt=new BinTreeNode;        /复制根结点值                pt->data=BT->data;       /复制左子树                pt->left=BTreeCop

86、y(BT->left);       /复制右子树                pt->right=BTreeCopy(BT->right);       /返回新树的树根指针            return pt;        说明:函数体中的else可以没有3. 假定元素类型为ElemTy

87、pe的一维数组Rn中保存着按关键码升序排列的n个记录,记录的关键码域key的类型为KeyType,试按照下面的函数声明编写一个非递归算法,从一维数组Rn中折半搜索出关键码等于K的记录,若搜索成功则返回记录位置(即元素下标),否则返回-1。        int BinSearch(ElemType R, int n, KeyType K);答:int BinSearch(ElemType R, int n, KeyType K)            &#

88、160;                   int low=0, high=n-1;                 while(low<=high)                              

89、          int mid=(low+high)/2;                 if(K=Rmid.key) return mid;                         else if(K<Rmid.key) high=mid-1;   

90、0;                 else low=mid+1;                                 return -1;          说明:函数体中第一个else可以没有ley0

91、2006-11-17 08:59作业四作业四一、        单项选择题1. 与邻接矩阵相比,邻接表更适合于存储 (  C  )。   A无向图     B连通图    C稀疏图     D稠密图2. 设无向图的顶点个数为n,则该图最多有( B    )条边。A. n-1    B. n(n-1)/2      C.

92、 n(n+1)/2    D. n(n-1)3. 图的深度优先搜索类似于树的(   A   )次序遍历。A. 先根   B. 中根     C. 后根        D. 层次4. 采用Dijkstra算法求解带权有向图的最短路径问题时,要求图中每条边所带的权值必须是(   C   )数。A. 非零      B. 非整      C. 非负

93、60;     D. 非正5. 对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。这样的排序方法是(  C   )。 A. 直接选择排序       B. 直接插入排序       C. 快速排序       D. 起泡排序6. 假设某文件经过内部排序得到100个初始归并段,那么如果要求利用多路平衡归并在3 趟内完成排序,则应取的归并路

94、数至少是(  C   )。        A. 3        B. 4        C. 5        D. 67. 一个对象序列的排序码为46, 79, 56, 38, 40, 84,采用快速排序(以位于最左位置的对象为基准)所得到的第一次划分结果为( C    )。A. 38, 46,

95、 79, 56, 40, 84       B. 38, 79, 56, 46, 40, 84C. 40, 38, 46, 79, 56, 84       D. 38, 46, 56, 79, 40, 848. 5阶B树中, 每个结点最多允许有(  C  )个关键码。        A. 2        B. 3        C. 4   

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论