数据结构(C语言版)第三版--清华大学出版社-习题参考答案.docx
《数据结构(C语言版)第三版--清华大学出版社-习题参考答案.docx》由会员分享,可在线阅读,更多相关《数据结构(C语言版)第三版--清华大学出版社-习题参考答案.docx(29页珍藏版)》请在课桌文档上搜索。
1、附录习题参考答案习题1参考答案1.1.选择题(1).A.(2).A.(3).A.(4).B.,C.(5).A.(6).A.(7).C.(8).A.(9).B.(10.)A.1.2.填空题(1) .数据关系(2) .逻辑结构物理结构(3) .线性数据结构树型结构图结构(4) .顺序存储链式存储索引存储散列表(Hash)存储(5) .变量的取值范围操作的类别(6) .数据元素间的逻辑关系数据元素存储方式或者数据元素的物理关系(7) .关系网状结构树结构(8) .空间复杂度和时间复杂度(9) .空间时间(10) .O(n)1.3 名词解释如下:数据:数据是信息的载体,是计算机程序加工和处理的对象,包
2、括数值数据和非数值数据。数据项:数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。数据元素:数据元素是数据的根本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由假设千个数据项组成。数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。数据类型:是指变量的取值范围和所能够进行的操作的总和。算法:是对特定问题求解步骤的一种描述,是指令的有限序列。1.4 语句的时间复杂度为:7 1 )/ - 7 2 2 2 3 n n n n z(x z( z( z(x Zfx Ooooo J 7 J
3、 )/ / I 2 3 4 5 f zrf1.5 参考程序:main()(intX,Y,Z;scanf(w%d,%d,%d”,&X,&Y,Z);if(X=Y)if(X=Z)if(Y=Z)printf(rt%d,%d,%dw,X,Y,Z)Jelseprintf(tt%df%d,%dw,X,Z,Y);)elseprintf(u%d,%d,%dw,Z,X,Y)Jelseif(Z=X)if(Y=Z)printf(w%d,%d,%dw,Y,Z,X)Jelseprintf(ii%dt%d,%d”,Z,Y,X);elseprintf(%(1,%d,%dw,Y,X,Z);)1.6 参考程序:main()int
4、i,n;floatx,a,p;printf(unn=w);scanf(%f,&n);printf(unx=w)jscanf(%fw,&x);for(i=0;i=n;i+)scanf(ii%fn,&ai);P=a0;for(i=l;inext=p-next;p-next=s;(10) .s-next2. 3.解题思路:将顺序表A中的元素输入数组a,假设数组a中元素个数为n,将下标为0,1,2,,(nT)/2的元素依次与下标为n,nT,,InT)/2的元素交换,输出数组a的元素。参考程序如下:main()inti,n;floatt,a;Printf(nn=);SCanf(%f,&n);for(i=
5、0;i=n-l;i+)scanf(w%fn,&ai);for(i=0;i=(n-l)/2;i+)t=ai;ai=a11-l-i;an-l-i=t;for(i=0;i=n-l;i+)printf(%f,ai);2.4 算法与程序:main()inti,n;floatt,a;printf(unn=w);scanf(%fw,&n);for(i=0;in;i+)scanf(ii%fn,&ai);for(i=l;ia0)t=ai;ai=a0;a0=t;)printf(%fw,a0);for(i=2;ial)t=ai;ai=al;al=t;printf(u%fn,a0);2.5 算法与程序:main()i
6、nti,j,k,n;floatx,t,a;Printf(nx=);SCanf(%f,&x);printf(wnn=,);scanf(ii%fff,&n);for(i=0;in;i+)scanf(%f,&ai);/输入线性表中的元素for(i=0;in;i+)/对线性表中的元素递增排序k=i;for(j=i+l;jn;j+)if(ajak)k=j;if(kj)t=ai;ai=ak;ak=t;for(i=0;ix)break;for(k=n-l;k=i;i-)/移动线性表中元素,然后插入元素Xak+l=ak;ai=x;for(i=0;i=n;i+)/依次输出线性表中的元素Printf(%f,ai)
7、;2.6 算法思路:依次扫描A和B的元素,比拟A、B当前的元素的值,将较小值的元素赋给C,如此直到一个线性表扫描完毕,最后将未扫描完顺序表中的余下局部赋给C即可。C的容量要能够容纳A、B两个线性表相加的长度。有序表的合并算法:voidmerge(SeqListA,SeqListB,SeqList*C)inti,j,k;i=0:j=0;k=0;while(i=A.last&j=B.last)if(A.dataidatak+=A.datai+;elseC-datak+=B.dataj+;while(idatak+三A.datai+;while(jdatak+=B.dataj+;C-last=k-l
8、;2.7 算法思路:依次将A中的元素和B的元素比拟,将值相等的元素赋给3如此直到线性表扫描完毕,线性表C就是所求递增有序线性表。算法:voidmerge(SeqListA,SeqListB,SeqList*C)inti,j,k;i=0:j=0;k=0;while(i=A.last)while(jdatak+=A.datai+;C-last=k-l;习题3参考答案3. 1.选择题(I) .D(2).C(3).D(4).C(5).B(6).C(7).C(8).C(9).B(10).AB(II) .D(12).B(13).D(14).C(15).C(16).D(17).D(18).C(19).C(2
9、0).C3. 2.填空题(1) FILO,FIFO(2) -1,34X*+2Y*3-(3) stack,top,stack,sstack,top=x(4) pllink-rlink=p-rlink,p-rlink-l1ink=p-r1ink(5) (R-F+M)%M(6) topl+l=top2(7) F=R(8) front=rear(9) front=(rear+l)%n(10) N-I(11) :一般线性表使用数组来表示的线性表一般有插入、删除、读取等对于任意元素的操作而栈只是一种特殊的线性表栈只能在线性表的一端插入(称为入栈,push)或者读取栈顶元素或者称为“弹出、出栈(pop)。(
10、12) :相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top)删除,一端(rear)插入。(13) 答:可能序列有14种:ABCD;ACBD;ACDB;ABDC;ADCB;BACD;BADC;BCAD;BCDA;BDCA;CBAD;CBDA;CDBA;DCBA0(14) :不能得到4,3,5,6,1,2,最先出栈的是4,那么按321的方式出,不可能得到1在2前的序列,可以得到L3,5,4,2,6,按如下方式进行PUSh(I),pop(),push(2),push(3),pop(),push(4),push(5),po
11、p(),pop(),popO,push(6),pop()o(15) 答:stack(16) 递归:intvonvert(intno,inta)/将十进制数转换为2进制存放在a,并返回位数intr;SeStacks,*p;P=&s;Init_stack(p);while(no)push(p,no%2);no=10;r=0;while(!empty_stack(p)pop(p,a+r);r+;returnr;递归算法:voidconvert(intno)if(no20)Convert(no2);Printf(u%dn,no%2);)elsePrintf(%d”,no);(17) 考程序:voidv
12、iew(SeStacks)SeStack*p;假设栈元素为字符型charc;P=&s;while(!empty_stack(p)c=pop(p);Printf(%c,c);)Printf(n);3. 10答:char3.11参考程序:voidout(linkqueueq)inte;while(q.rear!=q.front)dequeue(q,e);print(e);打印习题4参考答案4. 1选择题:(1) .A(2).D(3).C(4).C(5).B(6).B(7).D(8).A(9).B(10).D4.2填空题:(I)串长相等且对应位置字符相等(2) 不含任何元素的串,O(3) 所含字符均
13、是空格,所含空格数(4) 10(5) “helloboy”(6) 13(7) 1066(8) 模式匹配(9)串中所含不同字符的个数(10) 36(11) StrLength(s)=14,StrLength(t)=4,SubStr(s,8,7)=STUDENTw,SubStr(t,2,1)二0”,StrIndeX(S,A”)=3,StrIndex(s,t)=0,StrRep(s,“STUDENT,q)=IAMAWORKER,4.4StrReP(s,“Y”,+);StrReP(s,+*,*Y);(12) 串:不含任何字符;空格串:所含字符都是空格串变量和串常量:串常量在程序的执行过程中只能引用不能
14、改变;串变量的值在程序执行过程中是可以改变和重新赋值的主串与子串:子串是主串的一个子集串变量的名字与串变量的值:串变量的名字表示串值的标识符(13)intEQUAl(S,T)char*p,*q;P=&S;q=&T;while(*p&*q)if(*p!=*q)return*p-*q;p+;q+;return*p-*q;(14)(1)6*8*6=288(2)1000+47*6=1282(3)1000+(8+4)*8=1096(4)1000+(6*7+4)*8=1368ijv4.81I21215-132144347542665187539矩阵的三元组表习题5参考答案5. 1选择(1) C(2)B(3
15、)C(4)B(5)C(6)D(7)C(8)C(9)B(10)C(11) B(12)C(13)C(14)C(15)C(16)B(12) 空(1)11036;1040(3) 2i;n;11T;2(5)对;2j1(6) ACDBGJKlHFE(7) p!:NULL(8) HUffman树(9)其第一个孩子;下一个兄弟(10)先序遍历;中序遍历5.3叶子结点:C、F、G、L、I、M、K;非终端结点:A、B、D、E、J;各结点的度:结点:Abcdefglijkm度:430120000100树深:45.4无序树形态如下:9o二叉树形态如下:5.5二叉链表如下:ADA/IEIFIGA5.6先序遍历序列:Ab
16、dehicfjg中序遍历序列:Dbheiafjcg后序遍历序列:Dhiebjfgca5.7(1)先序序列和中序序列相同:空树或缺左子树的单支树;(2)后序序列和中序序列相同:空树或缺右子树的单支树;(3)先序序列和后序序列相同:空树或只有根结点的二叉树。5.8这棵二叉树为:5.9先根遍历序列:Abfglcdiejmk后根遍历序列:FGLBCIDMJKEA层次遍历序列:Abcdefglijkm5.10证明:设树中结点总数为n,叶子结点数为n。,那么n=no+11+nl(1)再设树中分支数目为B,那么B=n+2112+3m+mn1(2)因为除根结点外,每个结点均对应一个进入它的分支,所以有n=B+
17、1(3)将(1)和(2)代入(3),得no+ni+nll=11+2m+3ru+mnn+1从而可得叶子结点数为:no=n2+2n3+(m-l)n1+15.11由5.10结论得,no=(k-l)nk+1又由n=no+m,得Iik=n-11o,代入上式,得no=(k-l)(n-11o)+1叶子结点数为:11o=n(k-l)/k5.12intNodeCount(BiTreeT)计算结点总数ifC)if(T-Ichild=NULL)&(TrchiId=NULL)return1;elsereturnNocIeCount(T-Ichild)+Node(T-rchild)+1;elsereturnO;5.13
18、voidExchangeLR(Bitreebt)*将bt所指二叉树中所有结点的左、右子树相互交换*/if(bt&(bt-lchild|bt-rchild)bt-lchildbt-rchild;Exchange-Ir(bt-lchiId);Exchange-Ir(bt-rchiId);*ExchangeLR*/5. 14intIsFullBitree(BitreeT)/*是那么返回1,否那么返回0。*/Init_Queue(Q);/*初始化队列*/fIag=O;In_Queue(Q,T);/*根指针入队列,按层次遍历*/while(!Empty_Queue(Q)(OutQueue(Q,p);if
19、(!p)flag=l;/*假设本次出队列的是空指针时,那么修改flag值为1。假设以后出队列的指针存在非空,那么可断定不是完全二叉树*/elseif(flag)returnO;*断定不是完全二叉树*/elseIn_Queue(Q,p-lchild);In,Queue(Q,p-rchild);/*不管孩子是否为空,都入队列。*/)*while*/return1;/*只有从某个孩子指针开始,之后所有孩子指针都为空,才可断定为完全二叉树*/*IsFullBitree*/5. 155.16对应的森林分别为:O O OB(d)5. 17(e)typedefcharelemtype;typedefstru
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 第三 清华大学出版社 习题 参考答案
链接地址:https://www.desk33.com/p-1114551.html