数据结构第二次作业答案
- 格式:doc
- 大小:49.00 KB
- 文档页数:9
数据结构第二次作业答案
一、单项选择题
1. C 2. B 3. A 4. A 5. D 6. A
7. D 8. C 9. D 10. C 11. D 12. C 13. A
二、填空题
1. 存储 2. 先进先出 3. 栈顶指针 4. 队尾
5. 一 6. 局部变量 7. 表尾 8. 重数
9. 3 10. 6 11. 6 12. 2h+1-1
三、判断题
1. 错 2. 对 3. 对 4. 对 5. 错 6. 对 7. 对 8. 错 9. 错
四、运算题
1.
叶子结点数: 5
单分支结点数:3
两分支结点数:2
三分支结点数:1
2.
元素 34 56 58 63 94
比较次数 2 1 3 4 4
3.
左子树为空的所有单支结点:15,23,42,44
右子树为空的所有单支结点:30
4.
插入时造成不平衡的结点个数:4
5.
结点 a b c d e
出度 1 1 2 1 2
入度 2 2 1 1 1
6.
(1) 1,3,4,6,5,2 (3分)
(2) 1,3,2,4,5,6 (3分)
五、算法分析题
1.
利用"栈"作为辅助存储,将队列中的元素逆置(即相反次序放置)。
2. (1) q = q->lLink
(2) return 1
(3) return 0
3.
1→2
1→3
2→3
4.
(1) return PT
(2) (PT=ParentPtr(BT->right,BT,X))
(3) return NULL 或return 0
六、算法设计题
1.
float poly(float x, float A[], int n) {
if(!n) return A[0];
else return x*poly(x, A, n-1)+A[n];
}
2.
int BTreeHeight(BinTreeNode* BT)
{
if(BT==NULL)
//对于空树,返回-1并结束递归
return –1;
else
{
//计算左子树的高度
int h1=BTreeHeight(BT->left);
//计算右子树的高度
int h2=BTreeHeight(BT->right);
//返回树的高度
if(h1>h2) return h1+1;
else return h2+1;
}
}
3.
int BTreeLeafCount(BinTreeNode* BT)
{
if(BT==NULL) return 0; else if(BT->left==NULL && BT->right==NULL) return 1;
else return BTreeLeafCount(BT->left)+BTreeLeafCount(BT->right);
}
数据结构第三次作业答案
一、单项选择题
1. D 2. A 3. B 4. C 5. C 6. A
7. B 8. C 9. C 10. A 11. A 12. D 13. C
二、填空题
1. 2i+1 2. 最大值 3. 20.5 4. 右子树 5. 1
6. 右单旋转 7. 2(n-1) 8. 2 9. n-1 10. 高 11. 直接插入
三、判断题
1. 错 2. 对 3. 对 4. 对 5. 错 6. 对 7. 错 8. 对
四、运算题
1.
(1) 1,5,6,4,3,2
(2) 1,5,3,2,6,4
2.
顶点: 0 1 2 3 4 5 6
路径长度: 0 16 10 14 25 21 31
3.
拓扑序列:1,3,6,0,2,5,4,7
4.
所有关键活动:<0,1>5,<1,3>10,<3,4>9,<4,5>12
关键路径长度:36
5.
(1)归并路数:5 (2)需要归并躺数:2
答案解释:
(1) 设归并路数为k,初始归并段个数m = 80,根据归并趟数计算公式S = logkm =
logk80 = 3得:k3≥80。由此解得k≥5,即应取的归并路数至少为5。
(2) 设多路归并的归并路数为k,需要k个输入缓冲区和1个输出缓冲区。1个缓冲区对应1个文件,有k +1 = 15,因此k = 14,可做14路归并。由S = logkm = log1480 =
2。即至少需2趟归并可完成排序。
五、算法分析题 1.
算法功能:当BT中每个结点的左子女的值大于右子女的值则交换左右子树。
2.
(1) ’t’
(2) ’g’
(3) ’g’
(4) ’e’
3.
{35,54,42,73,80,38}
4.
判断p2单链表所代表的集合是否为p1单链表所代表的集合的子集合,若是则返回1否则返回0。
5.
算法功能:判断二叉树bt是否为一棵二叉搜索树,若是则返回1否则返回0。
六、算法设计题
1.
int BTreeEqual(BinTreeNode* T1,BinTreeNode* T2)
{
//若两棵树均为空则返回1表示相等
if(T1==NULL && T2==NULL) return 1;
//若一棵为空一棵不为空则返回0表示不等
else if(T1==NULL || T2==NULL) return 0;
//若根结点值相等并且左、右子树对应相等则两棵树相等
else if(T1->data==T2->data && BTreeEqual(T1->left, T2->left) &&
BTreeEqual(T1->right, T2->right) )
return 1;
//若根结点值不等或左、右子树对应不等则两棵树不等
else
return 0;
}
另一个参考答案:
int BTreeEqual(BinTreeNode* T1,BinTreeNode* T2)
{
//若两棵树均为空或实际上是同一棵树时返回1表示相等
if(T1==T2) return 1;
//若一棵为空一棵不为空则返回0表示不等
if(T1==NULL || T2==NULL) return 0; //若根结点值不等返回0表示不等
if(T1->data!=T2->data) return 0;
//若根结点值相等则两棵树是否相等取决于它们的左、右子树是否对应相等
return BTreeEqual(T1->left, T2->left) &&
BTreeEqual(T1->right, T2->right);
}
2.
BinTreeNode* BTreeCopy(BinTreeNode* BT)
{
if(BT==NULL) return NULL;
else {
//得到新结点
BinTreeNode* pt=new BinTreeNode;
//复制根结点值
pt->data=BT->data;
//复制左子树
pt->left=BTreeCopy(BT->left);
//复制右子树
pt->right=BTreeCopy(BT->right);
//返回新树的树根指针
return pt;
}
}
说明:函数体中的else可以没有
3.
int BinSearch(ElemType R[], int n, KeyType K)
{
int low=0, high=n-1;
while(low<=high)
{
int mid=(low+high)/2;
if(K==R[mid].key) return mid;
else if(K
else low=mid+1;
}
return -1;
}
数据结构第四次作业答案
一、单项选择题
1. C 2. B 3. A 4. C 5. C 6. C