《数据结构C语言描述》陈慧南主编答案Word格式.docx
《《数据结构C语言描述》陈慧南主编答案Word格式.docx》由会员分享,可在线阅读,更多相关《《数据结构C语言描述》陈慧南主编答案Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
=j;
k++)
x++;
划线语句的执行次数为n(n+1)(n+2)/6。
(4)x=n;
y=0;
while(x>
=(y+1)*(y+1))y++;
划线语句的执行次数为n。
第二章两种基本的数据结构
2-4.
Loc(A[i][j][k])=134+(i*n*p+j*p+k)*2
2-9.第34页习题
(2).9
voidInvert(Telements[],intlength)
{//length数组长度
//elements[]为需要逆序的数组
Te;
for(inti=1;
=length/2;
i++)
{
e=elements[i-1];
elements[i-1]=elements[length-i];
elements[length-i]=e;
}
}
2-12.第34页习题(12)
voidpInvert(Node*first)
{
Node*p=first,*q;
first=NULL;
while(p){
q=p->
Link;
p->
Link=first;
first=p;
p=q;
}
第三章栈与队列
1.第54页习题
(1)
设A、B、C、D、E五个元素依次进栈(进栈后可立即出栈),问能否得到下列序列。
若能得到,则给出相应的push和pop序列;
若不能,则说明理由。
1)A,B,C,D,E2)A,C,E,B,D
3)C,A,B,D,E4)E,D,C,B,A
答:
(1)Push(A);
Pop(A);
Push(B);
Pop(B);
Push(C);
Pop(C);
Push(D);
Pop(D);
Push(E);
Pop(E);
2)不能得到,因为E,B,D而言,E最先出栈,则表明,此时B和D均在栈中,由于,B先于D进栈,所以应有D先出栈。
3)不能得到,因为C,A,B而言,C最先出栈,则表明,此时A和B均在栈中,由于A优先于B近栈,所以B应比A先出栈。
(4)Push(A);
Push(C);
Push(D);
Push(E);
Pop(E);
Pop(C);
5.
Stack1Stack2
TOP1TOP2
栈满Top2-Top1==1
Top1<
0栈1空Top2>
n-1栈2空
9:
voidPrintQueue(Queueq)
{
intfirst=q.Front+1;
while(((first)%q.MaxQueue)!
=q.Rear)
{
printf("
%d\n"
q.Elements[first]);
first=first+1;
voidPrintQueue2(Queueq)
for(inti=1;
q.Front!
=q.Rear;
i++)
{
q.Elements[(q.Front+1)%q.MaxQueue]);
q.Front=(q.Front+1)%q.MaxQueue;
voidPrintQueue3(Queueq)
for(;
q.Front=(q.Front+1)%q.MaxQueue)
第四章线性表与数组
1(85页)
intSearch_Insert(List*lst,Tx)
inti,j;
j=lst->
Size-1;
for(i=lst->
i>
=0;
i--)
if(lst->
Elements[i]==x)
{
returni;
}
if(lst->
Size==lst->
MaxList)
return-1;
}
while(lst->
Elements[j]>
x)
lst->
Elements[j+1]=lst->
Elements[j];
j--;
lst->
Elements[j+1]=x;
Size++;
returnj+1;
voidSearch_Delete(List*lst,Tx,Ty)
inti=0;
if(lst->
Size==0)
printf("
thelistisempty,cannotbedeleted!
\n"
);
return;
for(intj=0;
j<
lst->
Size;
j++)
if((lst->
Elements[j]<
x)||(lst->
y))
lst->
Elements[i]=lst->
i=i+1;
Size=i;
13.(第86页,第13题)给出下列稀疏矩阵的
顺序三元组的行优先和列优先表示。
14.(第86页,第14题)
对题图4-5的稀疏矩阵执行矩阵转置时数组num[]和k[]的值。
答:
第五章树
第2题,第141页,
对于三个结点A,B和C,可分别组成多少不同的无序树、有序树和二叉树?
(1)无序树:
9棵
(2)有序树:
12棵
(3)二叉树:
30棵
第3题,P141
n0=n2+2*n3+….+(m-1)nm+1
第5题,P142
(1)或者为空二叉树,或者所有结点的左子树都是空的单支树
(2)或者为空二叉树,或者只有根结点的二叉树
(3)或者为空二叉树,或者所有结点的右子树都是空的单支树
第7题,第142页,
给出对图6-31中的树的先序遍历和后序遍历的结果。
先序:
D,E,H,F,J,G,C,K,A,B
中序:
H,E,J,F,G,K,C,D,A,B
后序:
H,J,K,C,G,F,E,B,A,D
第6题第142页,
设对一棵二叉树进行中序遍历和后序遍历的结果分别为:
(1)中序遍历BDCEAFHG
(2)后序遍历DECBHGFA
画出该二叉树。
第8(3)题第142页,
intcount=0;
voidSizeOfLeaf(BTNode*t)
if(t){
if((!
(t->
RChild))&
&
(!
LChild)))
count=count+1;
SizeOfLeaf(t->
LChild);
RChild);
第13题第142页,
将图题6-32中的树转换成二叉树,
并将图6-31中的二叉树转换成森林。
第18题第1438页,
设S={A,B,C,D,E,F},W={2,3,5,7,9,12},对字符集合进行哈夫曼编码,W为各字符的频率。
(1)画出哈夫曼树
(2)计算带权路径长度
编码:
A:
1010
B:
1011
C:
100
D:
00
E:
01
F:
11
第六章集合
第4题,P155
对半搜索算法要求其必须针对顺序存储的有序表。
顺序搜索从头搜到尾,所以不影响。
补充:
已知(1,2,3,4,5,6,7,8,9,10,11)找到9比较几次?
M=(1+11)/2=6比较一次
6<
9,找[7,11]
M=(7+11)/2=9
9=9比较2次
成功
所以一共比较2次成功
第七章搜索树
1.第189页,第
(1),
建立37,45,91,25,14,76,56,65为输入时的二叉搜索树,再从该树上依此删除76,45,则树形分别如何?
第八章散列与跳表
第3题,第209页,
设散列表ht[11],散列函数h(key)=key%11。
采用线性探查法解决冲突,试用关键字值序
列:
70,25,80,35,60,45,50,55建立散列表。
线性探查法:
伪随机探查法:
P=13
1
2
3
4
5
6
7
8
9
10
55
45
35
25
70
80
50
60
对80:
(3+13)%11=5
对60:
(5+13)%11=7
二次探查法
(3+1*1)%11=4(3-1*1)%11=2
对35:
(2+1*1)%11=3(2-1*1)%11=1
对45:
(1+1*1)%11=2(12-1*1)%11=0
对55:
(0+1*1)%11=1(0-1*1)%11=10
第4题,第209页,
双散列法:
H1
H2
(3+1*9)%11=1
(1+1*1)%11=2(1+2*1)%11=3
(1+3*1)%11=4(1+4*1)%11=5
(1+5*1)%11=6
对50:
(6+1*6)%11=1(6+2*6)%11=7
第九章图
第
(1)题,第243页,
对下面的有向图求
(1)每个顶点的入度和出度;
(2)强连通分量
(3)邻接矩阵
第
(2)题,第243页,
当以边〈1,0〉,〈1,3〉,〈2,1〉,〈2,4〉,〈3,2〉,〈3,4〉,〈4,0〉,〈4,1〉,〈4,5〉,
〈5,0〉的次序从只有6个顶点没有边的图开始,通过依此插入这些边,建立邻接表结构。
画出该邻接表。
深度优先遍历:
0,1,3,4,5