2011广东工业大学数据结构试题B答案
数据结构(B)卷答案
一、选择题(10分,每题1分)
ACBCD BACCD
二、填空题(10分,每空1分)
1、存储结构
2、(n-1)/2
6、103
7、广度
三、解答题(共36分)
1、(7分)3、SSXSXX
8、叶子结点
4、2
9、选择排序
5、3
10、直接存取
(1)A的第6列和第4行共占(8+9-1)*5=80个字节
(2)元素A[6][4]的起始地址与A按列存放时A[2][7]的起始地址一致。
因为如果按行存储,元素A[6][4]的存储位置为6*9+4=58,
同理如果按列存储,元素A[2][7]的存储位置也为7*8+2=58
2、(7分)(3分)(4分)
0 1 2 3 4A∧
B
C
D
E
4
1
3
4
5
1
∧
∧
∧
3642∧
3、(7分)
A
B C D
E F G
4、(7分)
0123456
632938
7124
5、(8分)
(1)不是大顶堆,调整后的大顶堆序列:
52
908,653,897,503,462,170,512,275,61,87(2)输出908后,调整后的大顶堆序列:
897,653,512,503,462,170,87,275,61(908)
四、算法题(36分,每题6分)
1、(1)len++(2分)
(2)p=p->next(2分)
(3)return len(2分)
2、(1)Q=(5,3,1);(3分)(2)保留队列中的奇数,并实现队列的逆置。(3分)
3、(1)(3分)(4分)(4分)
B
D
G A
C
E
F
(2)如果结点没有右孩子但有左孩子,就将其左孩子改变为右孩子(3分)
4、(1)G.v[i].vertex==v;(2分)
(2)p=G.v[i].firstArc(2分)
(3)p=p->nextArc(2分)
5、(1)r[j].key>=x.key(2分)
(2)r[i]=r[j](2分)
(3)r[i]=x(2分)
6、(1)T=p(2分)
(2)parent->left=p(2分)
(3)parent->right=p(2分)
五、算法设计题(8分)8
float f(LinkList L) LinkList p,q;
int k=0,c=0;
p=L->next;
while(p){
k++;
c++;
q=p->next;{(函数头
(初始化
(外循环
1分)
1分)
3分)
while(q
c++;
&&q->data==p->data){(内循环2分)
}
q=q->next;
}
p=q;
if(k==0)return0;
}
else return(float)c/k;(返回值1分)
六、附加题(10分,二选一,多做只按第一题给分)
1.参考答案
int fe1(LinkList L,CodeType c,int m){ LinkList p,q,s;
p=L;
q=p->next;
while(q!=L&&c>q->code){
p=q;
q=q->next;
}
if(q!=L&&q->code==c){
q->num+=m;
return0;
}else{
p->next=(LinkList)malloc(sizeof(Node));
p=p->next;
p->code=c;
p->num=m;
p->next=q;
return1;
}(1分) (1分)
(2分) (2分) (4分)
}
2.参考答案
Status fe2(BiTree T){(1分) if(!T)return TRUE;(1分) if((!T->lchild&&T->rchild)||(2分) (T->lchild&&!T->rchild))(2分)
}
return
else
return
FALSE;
fe2(T->lchild)&&fe2(T->rchild);
(1分)
(3分)