数据结构(C++)第二次作业答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构第二次作业答案
一.单项选择题(20分)
( )1.一棵左子树为空的二叉树在前序线索化后,其空指针域数为 C
a、0
b、1
c、2
d、不确定
( )2.下列排序算法中,___D_____算法可能会出现下面的情况:初始数据有序时,花费的时间反而更长。
a、堆排序
b、起泡排序
c、直接选择排序
d、快速排序
( )3.在图采用邻接表存储时,求最小生成树的prim算法的时间复杂度是__B_____。
a.O(n*e)
b. O(n+e)
c. O(n2)
d.O(n3)
( )4.下面程序段的时间复杂度是__A______。
i=1;
while(i<=n) i++;
a. O(n)
b. O(n2)
c. O(2n)
d. O(log2n)
( )5.在有n(>0)个结点且为完全二叉树的二叉排序树中查找一个键值,其平均比较次数的数量级为____B______。
a. O(n)
b. O(log2n)
c. O(nlog2n)
d. O(n2)
( )6.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分为__B_____个结点最佳。
a. 10
b. 25
c. 6
d. 625
( )7.排序算法的稳定性是指__A____。
a.经过排序之后,能使值相同的数据保持原顺序中的相对位置不变
b.经过排序之后,能使值相同的数据保持原顺序中的绝对位置不变
c.算法的排序性能与被排序元素的数量关系不大
d.算法的排序性能与被排序元素的数量关系密切
( )8.某二叉树的先序序列和后序序列正好相反,则该二叉树一定是___B____的二叉树。
a. 空或只有一个结点
b. 高度等于其结点数(空树高度为0)
c. 任一结点无左孩子
d. 任一结点无右孩子
( )9.已知有向图G=(V,E)其中V={ V1 V2 V3 V4 V5 V6
V7},E={
__A_______。
a. V1 V3 V4 V6 V2 V5 V7
b. V1 V3V2 V6 V4 V5 V7
c. V1 V2 V3 V4 V5 V6 V7
d. V1 V2 V5 V3 V4 V6 V7
( )10.下列关于AOE网的叙述中不正确的是__D______。
a. 关键活动不按期完成会影响整个工程的完成时间
b. 所有的关键活动提前完成,那么整个工程将会提前完成
c. 某些关键活动若提前完成,那么整个工程将会提前完成
d. 任一关键活动提前完成,那么整个工程将会提前完成
二.填空作图简答题(共64分):
1.将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树,并写出其前序序列。
二叉树略
前序序列:*+++ab*c+def+gh
2.有一组关键码序列{10,20,60,47,50,45,95,33,75},采用Shell排序方法从小到大进
行排序,假设其间隔序列为5,3,1,请写出每趟的结果。
请按照下面的图例完成此题:
3.对下面的3阶B树依次插入关键码80,26,6,画出插入三个关键码后并删除关键码40后的
结果。
4.用Prim算法求下图的最小生成树, 若从顶点0出发,请将算法中的两个辅助数组的变化过程填
入下表。
辅助数组lowcost辅助数组nearvex
选出第1条边
选出第2条边
选出第3条边
选出第4条边
选出第5条边
选出第6条边
选出第7条边
5.求出下图中顶点A到其余个顶点的最短路径和最短路径长度。
AE=10; AF=17; AB=19; AG=25; AC=26; AD=27; AH=28
6. 已知报文为afecdaceadabdefbedeebcdefdede ,试设计其赫夫曼编码并画出相应的赫夫曼树。
a :2;
b :4;
c :
3;d :6;e :7;
7.
设初始归并段为(10,15,31,∞),(9,20, ∞),(22,34,37, ∞),(6,15,42, ∞),(12,37,
∞),(84,95, ∞),试利用败者树进行6路归并,画出选出最小的2个关键码的过程。
8. 已知哈希表地址空间为0~8,哈希函数为H(key)=key % 7,采用线性探查法处理冲突。将数据
(100,20,21,35,3,78,99,45)依次存入该散列表中,并计算等概率下查找不成功时的平均查找长度。 等概率下查找不成功时的平均查找长度:__ (1+2+3+4+5+6+7+8+9)/7=45/7___ 三. 程序填空(16分)
下面是仅给出了部分操作的二叉搜索树类的定义和实现。试在程序的每一划线部分填入一条语句或表达式,完成将元素x 插入到二叉树的操作。 class BinNode { public:
int data;
BinNode* leftchild, * rightchild;
BinNode() { leftchild = rightchild = NULL; }
};
class BinTree {
private:
BinNode* root;
void clearhelp(BinNode* rt) { if (rt == NULL) return;
clearhelp(rt->leftchild); clearhelp(rt->rightchild); delete rt; } public:
BinTree() { root = NULL; }
~BinTree() {clearhelp(root);}
void insert(const int x) ; //元素x 插入到二叉树
};
void BinTree :: insert(const int x) //元素x 插入到二叉树
{ BinNode *i, *j, *k;
①i=new BinNode ;
i->data = x;
if ( ②root==Null ) root = i; else
{ j = root;
while ( ③j!=Null )
{ k = j;
if ( ④x>j->data 或i->data>j->data ) j = j->rightchild;
else if(x==j->data) return;
else j = j->leftchild;
}
if ( x > k->data ) k->rightchild = i;
else k->leftchild = i;
}
}