四、 阅读算法(每题 7分,共 14 分)
1.
LinkList mynote(LinkList L)
{//L 是不带头结点的单链表的头指针 if(L&&L->next){
q=L ; L=L->next ;p=L;
S1 : while(p ->next) p=p ->next ; S2 : p ->next=q ;q->next=NULL;
}
return L ;
} 请回答下列问题:
(1) 说明语句 S1 的功能;
(2) 说明语句组S2的功能;
(3) 设链表表示的线性表为(ai,a2,…,an),写出算法执行后的返回值所 表示的线性表。
2.
{
void ABC(BTNode * BT)
if BT {
ABC (BT->left); ABC (BT->right); cout<
}
该算法的功能是:
五、 算法填空(共 8 分) 二叉搜索树的查找——递归算法 : bool
Find(BTreeNode* BST,ElemType& item)
{
if (BST==NULL)
return false; // 查找失败 else {
if (item==BST->data){
item=BST->data;// 查找成功 return ;} else if(item
return Find( ________________ ,item); else return Find( ________________ ,item); }//if
}
六、 编写算法(共 8 X的结点数
int CountX(LNode* HL,ElemType x)
) 统计出单链表HL中结点的值等于给定值
分试题1答案
单选题(每题2分,共20 分)
1.
A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A
填空题(每空1分,共26 分)
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
正确性 易读性 强壮性 高效率
0( n) 9 3 3 -1
3 4 X * + 2 Y * 3 / -
n+1
2n n-1 e 2e
有向无回路
n(n-1)/2 n(n-1)
( 12,40) 增加1
O(log 2n) O(nlog 2n)
( ) ( 74) ( 23,55,63)
归并
运算题(每题6分,共24 分)
1.
线性表为: ( 78, 50, ,40, 60, 34,
90)
0 1 1 1
0 1 1 1 0
1 0 1 0
1 1 0 1
1 0 1 0
2.
邻接矩阵: 0 1 1 1
邻接表如图11所 示
图11
3.
用克鲁斯卡尔算法得到的最小生成树为:
(1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)20 4.
见图12
图12
阅读算法(每题7分,共14分)
( 1)查询链表的尾结点
(2) 将第一个结点链接到链表的尾部,作为新的尾结点 (3) 返回的线性表为(a2,a 3,…,an,aj
2.
四、
1.
递归地后序遍历链式存储的二叉树。
五、
true BST->left
BST->right
算法填空(每空2 分 ?,共8分)
六、
int CountX(LNode* HL,ElemType x) { int i=0; LNode* p=HL;//i while(p!=NULL)
{ if (P->data==x) i++; p=p->n ext; }//while, return i; }//Cou ntX
编写算法(8分)
为计数器
出循环时i中的值即为x结点个数
2017《数据结构》期末考试题与答案



