2022年《数据结构》课后习题答案 .pdf
《2022年《数据结构》课后习题答案 .pdf》由会员分享,可在线阅读,更多相关《2022年《数据结构》课后习题答案 .pdf(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). (n) 1.3 名词解释如下:数据
2、: 数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。数据项: 数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。数据元素:数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。数据类型: 是指变量的取值范围和所能够进行的操作的总和。算法: 是对特定问题求解步骤的一种描述,是指令的有限序列。1.4 语句的时间复杂度为:(1) (n2) (2) (n2) (3) (n2)(
3、4) (n-1) (5) (n3) 1.5 参考程序:main() int X,Y,Z; scanf(%d, %d, %d,&X,&Y,&Z); if (X=Y) if(X=Z) if (Y=Z) printf(%d, %d, %d,X,Y,Z); else printf(%d, %d, %d,X,Z,Y); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 29 页 - - - - - - - - - else printf(%d, %d, %d,Z,X,Y); else
4、 if(Z=X) if (Y=Z) printf(%d, %d, %d,Y,Z,X); else printf(%d, %d, %d,Z,Y,X); else printf(%d, %d, %d,Y,X,Z); 1.6 参考程序:main() int i,n; float x,a,p; printf(nn=);scanf(%f,&n); printf(nx=);scanf(%f,&x); for(i=0;i=n;i+) scanf(%f,&ai); p=a0; for(i=1;inext=p-next; p-next=s ; (10). s-next 2.3. 解题思路:将顺序表A中的元素输入
5、数组a,若数组a 中元素个数为n, 将下标为0,1,2, , (n-1 )/2 的元素依次与下标为n,n-1, , (n-1 )/2 的元素交换,输出数组a 的元素。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 29 页 - - - - - - - - - 参考程序如下:main() int i,n; float t,a; printf(nn=);scanf(%f,&n); for(i=0;i=n-1;i+) scanf(%f,&ai); for(i=0;i=(n-1)
6、/2;i+) t=ai; ai =an-1-i; an-1-i=t; for(i=0;i=n-1;i+) printf(%f,ai); 2.4 算法与程序:main() int i,n; float t,a; printf(nn=);scanf(%f,&n); for(i=0;in;i+) scanf(%f,&ai); for(i=1;ia0 t=ai; ai =a0; a0=t; printf(%f,a0); for(i=2;ia1 t=ai; ai =a1; a1=t; printf(%f,a0); 2.5 算法与程序:main() int i,j,k,n; float x,t,a; pr
7、intf(nx=);scanf(%f,&x); printf(nn=);scanf(%f,&n); for(i=0;in;i+) scanf(%f,&ai); /* 输入线性表中的元素*/ for (i=0; in; i+) /* 对线性表中的元素递增排序 */ k=i; for (j=i+1; jn; j+) if (ajak) k=j; if (k!=j) t=ai;ai=ak;ak=t; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 29 页 - - - - -
8、- - - - for(i=0;ix) break; for(k=n-1;k=i;i-) /* 移动线性表中元素,然后插入元素x*/ ak+1=ak; ai=x; for(i=0;i=n;i+) /* 依次输出线性表中的元素 */ printf(%f,ai); 2.6 算法思路:依次扫描A和 B的元素,比较A、B当前的元素的值,将较小值的元素赋给C,如此直到一个线性表扫描完毕,最后将未扫描完顺序表中的余下部分赋给C 即可。 C 的容量要能够容纳A、B两个线性表相加的长度。有序表的合并算法:void merge (SeqList A, SeqList B, SeqList *C) int i,
9、j ,k; i=0;j=0 ;k=0; while ( i=A.last & j=B.last ) if (A.dataidatak+=A.datai+; else C-datak+=B.dataj+;while (idatak+= A.datai+;while (jdatak+=B.dataj+;C-last=k-1; 2.7 算法思路:依次将A中的元素和B的元素比较,将值相等的元素赋给C,如此直到线性表扫描完毕,线性表C就是所求递增有序线性表。算法:void merge (SeqList A, SeqList B, SeqList *C) int i, j ,k; i=0;j=0 ;k=0
10、; while ( i=A.last) while (jdatak+=A.datai+; C-last=k-1;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 29 页 - - - - - - - - - 习题 3 参考答案3.1. 选择题(1). D (2). C (3). D (4). C (5). B (6). C (7). C (8). C (9). B (10).AB (11). D (12). B (13). D (14). C (15). C (16). D
11、(17). D (18). C (19). C (20). C 3.2. 填空题(1)FILO, FIFO (2)-1, 3 4 X * + 2 Y * 3 / - (3)stack.top, stack.sstack.top=x (4)pllink-rlink=p-rlink, p-rlink-llink=p-rlink (5)(R-F+M)%M (6)top1+1=top2 (7)F=R (8)front=rear (9)front=(rear+1)%n (10) N-1 3.3 答:一般线性表使用数组来表示的线性表一般有插入、删除、读取等对于任意元素的操作而栈只是一种特殊的线性表栈只能在
12、线性表的一端插入(称为入栈,push )或者读取栈顶元素或者称为“弹出、出栈”(pop) 。3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top )删除,一端(rear)插入。3.5 答:可能序列有14 种: ABCD; ACBD; ACDB; ABDC; ADCB; BACD; BADC; BCAD; BCDA; BDCA; CBAD; CBDA; CDBA; DCBA 。3.6 答:不能得到4,3,5,6,1,2,最先出栈的是4, 则按 321 的方式出,不可能得到1在 2 前的序列,可以得到 1, 3
13、, 5, 4, 2, 6, 按如下方式进行push(1), pop(), push(2), push(3), pop(), push(4), push(5), pop(), pop(), pop(), push(6), pop()。 3.7 答: stack 3.8 非递归 : int vonvert (int no,int a) /将十进制数转换为2 进制存放在a ,并返回位数 int r; SeStack s,*p; P=&s; Init_stack(p); while(no) push(p,no%2); no/=10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
14、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 29 页 - - - - - - - - - r=0; while(!empty_stack(p) pop(p,a+r); r+; return r; 递归算法 : void convert(int no) if(no/20) Convert(no/2); Printf(“%d ”,no%2); else prin tf( “%d ”,no); 3.9 参考程序:void view(SeStack s) SeStack *p; /假设栈元素为字符型char c; p=&s; while(!e
15、mpty_stack(p) c=pop(p); printf(“%c ”,c); printf(”n”); 3.10 答: char 3.11 参考程序:void out(linkqueue q) int e; while(q.rear !=q.front ) dequeue(q,e); print(e); /打印 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 29 页 - - - - - - - - - 习题 4 参考答案4.1 选择题:(1). A (2). D (
16、3). C (4). C (5). B (6). B (7). D (8). A (9). B (10). D 4.2 填空题:(1)串长相等且对应位置字符相等(2)不含任何元素的串,0 (3)所含字符均是空格,所含空格数(4)10 (5)“hello boy ”(6)13 (7)1066 (8)模式匹配(9)串中所含不同字符的个数(10) 36 4.3 StrLength (s)=14, StrLength (t)=4, SubStr( s,8,7)=” STUDENT ”, SubStr(t,2,1)=”O ”,StrIndex(s,“A”)=3, StrIndex (s , t)=0,
17、StrRep(s , “STUDENT”,q)=” I AM A WORKER”,4.4 StrRep(s,”Y”, ”+”);StrRep(s,”+*”, ”*Y”);4.5 空串:不含任何字符;空格串:所含字符都是空格串变量和串常量: 串常量在程序的执行过程中只能引用不能改变;串变量的值在程序执行过程中是可以改变和重新赋值的主串与子串:子串是主串的一个子集串变量的名字与串变量的值: 串变量的名字表示串值的标识符 4.6 int EQUAl(S,T) char *p,*q; p=&S; q=&T; while(*p&*q) if(*p!=*q) return *p-*q; p+; q+; r
18、eturn *p-*q; 4.7 (1)6*8*6=288 (2)1000+47*6=1282 (3)1000+(8+4)*8=1096 (4)1000+(6*7+4)*8=1368 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 29 页 - - - - - - - - - 4.8 习题 5 参考答案5.1 选择(1)C(2) B(3)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
19、 5.2 填空(1)1 (2)1036; 1040 (3)2i (4) 1 ; n ; n-1 ; 2 (5)2k-1;2k-1 (6)ACDBGJKIHFE (7)p!=NULL (8)Huffman 树(9)其第一个孩子; 下一个兄弟(10)先序遍历;中序遍历5.3 叶子结点 :C、F、G、L、I 、M 、K ;非终端结点: A、B、D、E、J;各结点的度:结点: A B C D E F G L I J K M 度: 4 3 0 1 2 0 0 0 0 1 0 0 树深: 4 5.4 无序树形态如下:i j v 1 1 2 1 2 1 5 -1 3 2 1 4 4 3 4 7 5 4 2
20、6 6 5 1 8 7 5 3 9矩阵的三元组表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 29 页 - - - - - - - - - 二叉树形态如下:5.5 二叉链表如下 : 三叉链表如下 : A B C D E F G H I J A B C 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 29 页 - - - - - - - - - 5.
21、6 先序遍历序列 :ABDEHICFJG 中序遍历序列 :DBHEIAFJCG 后序遍历序列 :DHIEBJFGCA 5.7 (1) 先序序列和中序序列相同:空树或缺左子树的单支树;(2) 后序序列和中序序列相同:空树或缺右子树的单支树;(3) 先序序列和后序序列相同:空树或只有根结点的二叉树。5.8 这棵二叉树为 : 5.9 先根遍历序列 :ABFGLCDIEJMK 后根遍历序列 :FGLBCIDMJKEA 层次遍历序列 :ABCDEFGLIJKM 5.10 证明:设树中结点总数为n,叶子结点数为n0,则n=n0 + n1 + , + nm ( 1)再设树中分支数目为B,则B=n1 + 2n
22、2 + 3n3+ , + m nm ( 2)D E F G H I J 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 29 页 - - - - - - - - - 因为除根结点外,每个结点均对应一个进入它的分支,所以有n= B + 1 ( 3)将( 1)和( 2)代入( 3) ,得n0 + n1 + , + nm = n1 + 2n2 + 3n3+ , + m nm + 1 从而可得叶子结点数为:n0 = n2 + 2n3+ , + (m-1)nm + 1 5.11
23、由 5.10 结论得, n0 = (k-1)nk + 1 又由 n=n0 + nk,得 nk= n-n0,代入上式,得n0 = (k-1)( n-n0)+ 1 叶子结点数为:n0 = n (k-1) / k 5.12 int NodeCount(BiTree T) /计算结点总数if(T) if (T- lchild=NULL )&( T - rchild=NULL ) return 1; else return NodeCount(T- lchild ) +Node ( T - rchild )+1; else return 0; 5.13 void ExchangeLR(Bitree bt
24、) /* 将 bt 所指二叉树中所有结点的左、右子树相互交换 */ if (bt & (bt-lchild | bt-rchild) bt-lchildbt-rchild; Exchange-lr(bt-lchild); Exchange-lr(bt-rchild); /* ExchangeLR */ 5.14 int IsFullBitree(Bitree T) /* 是则返回 1,否则返回0。*/ Init_Queue(Q); /* 初始化队列 */ flag=0; In_Queue(Q ,T); /* 根指针入队列,按层次遍历*/ while(!Empty_Queue (Q) Out_Q
25、ueue(Q,p); if(!p) flag=1; /* 若本次出队列的是空指针时,则修改flag值为 1。若以后出队列名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 29 页 - - - - - - - - - 的指针存在非空,则可断定不是完全二叉树 */ else if (flag) return 0; /*断定不是完全二叉树 */ else In_Queue(Q,p-lchild); In_Queue(Q,p-rchild); /* 不管孩子是否为空,都入队列。*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 2022年数据结构课后习题答案 2022 课后 习题 答案
限制150内