2 2 4 4 5 8 2 3 8 4 5 4 5 8 4 3 5 图12
四、 阅读算法(每题7分,共14分) 1. (1)查询链表的尾结点
(2)将第一个结点链接到链表的尾部,作为新的尾结点 (3)返回的线性表为(a2,a3,?,an,a1) 2. 递归地后序遍历链式存储的二叉树。 五、 算法填空(每空2分,共8 分) true BST->left BST->right 六、 编写算法(8分)
int CountX(LNode* HL,ElemType x)
{ int i=0; LNode* p=HL;//i为计数器 while(p!=NULL)
{ if (P->data==x) i++; p=p->next;
}//while, 出循环时i中的值即为x结点个数 return i; }//CountX
模拟试卷六
一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内。每小题1分,共10分)
1.下面程序段 for(i=1;i<=n;i++) for(j=1;j<=i;j++) x=x+1;
的时间复杂度为( )。
A)O(n) B)O(n2) C)O(n*i) D)O(n+i)
2.设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是( )。
A)ABCD B)DCBA C)ACDB D)DABC
3.当求链表的直接后继与求直接前驱的时间复杂度都相同时,此链表应为( )。
21
A)单链表 B)双向链表 C)单向循环链表 D)前面都不正确
4.已知串s='BBABBABBA',t='AB',c='A',执行置换操作REPLACE(s,t,c)后,s应为( )。
A)'BBABABA' B)'BBAABA' C)'BBAAA' D)'BBABABBA'
5.对于下图所示的二叉树,后序遍历结果序列为( )。
A)A,B,C,D,E,F,G,H B)A,B,D,F,C,E,G,H C)D,F,B,A,C,G,E,H D)H,F,D,B,G,E,C,A 6.下面AOE网中,关键路径长度为( )。
A)16 B)13
C)10 D)9
7.用Dijkstra算法求从源点到其它各顶点的最短路径的时间复杂度为( )。
A)O(n) B)O(n2) C)O(n3) D)O(nlogn)
8.在下列查找方法中,平均查找速度最快的是( )。
A)顺序查找 B)折半查找 C)分块查找 D)二叉排序树查找
9.哈希表的地址区间为0~17,哈希函数为H(K)=K % 17。采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到哈希表中。则59存放在哈希表中的地址是( )。
A)8 B)9 C)10 D)11
10.快速排序算法的平均时间复杂度是( )。
2
A)O(n) B)O(n) C)O(nlog2n) D)O(log2n) 二、填空题(每空1分,共15分)
1.设有一个记录r,设其类型为LNode,则r实际所占用的存储空间的大小为( )。
2.一个算法的时间复杂度为(5n3-3nlog2n+7n-9)/(6n),其数量级表示为( )。 3.如将n×n的对称矩阵压缩存储于sa[k]中,则k等于( )。
22
4.如一二维数组A[1..m,1..n]按行排列,设A[1,1]的相对位置为0,每个元素的大小为1,则任一元素A[i,j]的地址为( )。
5.线性表的顺序存储结构中存取元素的时间复杂度为是( )。 6.队列的插入操作在( )进行,删除操作在( )进行。 7.后缀表达式“4 5 * 3 2 + +”的值为( )。
8.对于一棵具有n个结点的树,此树中所有结点的度数之和为( ),设叶子结点数为n0,度为二的结点数为n2,则它们之间的关系为( )。
9.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。
10.在一个具有n个顶点的无向完全图中,包含有( )条边;在一个具有n个顶点的有向完全图中,包含有( )条弧。
11.每次从无序表中取一个最小或最大元素,把它们交换到有序表的一端,此种排序方法称为( )排序。
12.一种抽象数据类型应包括数据和( )两大部分。 三、判断改错题(判断正误,将正确的划上“√”,错误的划上“×”,每小题1分,共10分)
1.从逻辑关系上讲,数据结构主要分为两大类:线性结构和非线性结构。 ( )
2.数组可看成线性结构的一种推广,所以可对数组进行插入与删除操作。 ( )
3.在删除链表结点时,计算机能自动地将其后继的各个结点向前移动。 ( ) 4.利用栈求表达式的值时,设立操作数栈OPND,设OPND只有2个存储单元,则表达式(A-B)*C+D将不会发生发生上溢现象。 ( )
5.串是n个字母的有限序列(n>=0)。 ( )
6.n阶下三角矩阵的非零元素的个数最多为
n(n?1)。 2 ( )
7.二叉树只能采用二叉链表来存储。 ( ) 8.图G的某一最小生成树的代价一定小于其它生成树的代价。 ( ) 9.B+树是一种特殊的二叉树。 ( ) 10.所有的简单排序(即时间复杂度为O(n2)的排序)都是稳定排序。 ( )
四、简答题(每小题4分,共20分)
1.对于下列双向链表,设结构为(prior,data,next),结点类型为lnode,试写出在p所指结点之前插入元素x的语句序列。
2.对于下图,用Prim算法从结点1出发构造出一棵最小生成树,要求图示出每一步的变化情况。
23
3.已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。 先序序列:ABCDEFGHIJ 中序序列:CBEDAGHFJI
4.给定一组权值{3,4,7,14,15,20},试画出相应的哈夫曼树,并计算带树路径长度WPL的值。
5.有关键字序列{7,23,6,9,17,19,21,22,5},Hash函数为H(key)=key % 5,采用链地址法处理冲突,试构造哈希表。
五、算法题(共25分)
1.程序填空题(每空2分,共8分)
下面程序的功能是二叉树的中序遍历的非递归算法,其中二叉树的结点结构为(lchild,data,rchild),栈的常用方法有:入栈Push,出栈Pop,判空StackEmpty;试将程序补充完整。
template
BiTreeNode *BiTree
T = ; }
return T; }
template
void BiTree
t = GoFarLeft(T, S); // 找到最左下的结点 while(t){
visit(t->data); if (t->rchild)
t = GoFarLeft( , S); else if ( !StackEmpty(S )) t = ; else
t = ; // 栈空表明遍历结束 } // while
}// Inorder
2.程序填空题(每空2分,共8分)
下面程序的功能是用线性探测再散列处理冲突(即Hi=(H(key)+i)%m),哈希函数为H(key)=key % m,进行哈希表的插入算法。(如表中已存在关键字相同的记录或无插入位置,则不进行插入),试将程序补充完整。
typedef enum{SUCCESS,UNSUCCESS,OVERFLOW}Status; template
24
int m; }HashTable;
template
Status SerchHashTable(HashTable
int i=0,k= ; // i为冲突的次数,k为哈希函数的值 while(i
if(i>=m)return OVERFLOW;
else if(p->elem.key!=e.key)return ; else{
H.elem[p].elem= ; return SUCCESS; }//if
} //SerchHashTable 3.(9分)阅读下面算法,试回答: (1)根据邻接表画出对应的图;
(2)当图的邻接表如下时,执行算法T(g,1)时,输出的结果是什么? (3)函数T的功能是什么? 图的邻接表为:
template
void AdjGraph if(!Visited[p->adjvex]) T(p->adjvex); p=p->next; }//while }//T 六、写算法(共20分) 1.(12分)以单链表为存储结构实现简单选择排序,排序的结果是单链表按关键字值升 25