数据结构马睿 孙丽云习题答案.docx
- 文档编号:1699946
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:26
- 大小:142.42KB
数据结构马睿 孙丽云习题答案.docx
《数据结构马睿 孙丽云习题答案.docx》由会员分享,可在线阅读,更多相关《数据结构马睿 孙丽云习题答案.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构马睿孙丽云习题答案
Thefollowingtextisamendedon12November2020.
数据结构马睿孙丽云习题答案
第1章绪论
一、选择题
1、C2、C3、C4、D5、B6、C
二、判断题
1.×2.×3.×4.×5.√6.×
三、简答题(略)
四、算法分析题:
1.分析下列程序段中带标号“#”语句的执行频度(n为正整数)。
(1)频度:
n,时间复杂度:
O(n)
(2)频度:
1,时间复杂度:
O
(1)
(3)频度:
n2,时间复杂度:
O(n2)
(4)频度:
n/2-1,时间复杂度:
O(n)
(5)频度:
1100
2.写出下列各程序段关于n的时间复杂度。
(1)O(log3n)
(2)O(n2)
(3)O(n2)
第2章线性表
一、选择题
1、A4.D5.C7.A
二、填空题
1.、线性表
2、前驱,后继
3、p->next;s->data;t
4、q->next
5、head->next=NULL
6、p->next,s
7、p->next!
=p
8、O
(1),O(n)
第3章栈和队列
一、选择题
1、C10.D
二、填空题
1.、n-1
2、O(n)
3、13542
4、2xy+1x-/*
5、3
6、a2,a4,a1,a2,2
7、先进后出,加1,减1
8、满,空,n
9、线性结构
10、4
三、判断题
1.、错
2、错
3、对
4、错
5、对
6、错
7、错
四、解答题
4、列车进入一个栈式结构的车站,开出车站有14可能的顺序:
abcd;abdc
adcb
acdb,acbd
bdca,
bcda,bcad
bacd,badc
cdba,
cbda,cbad,
dcba
列车进入一个队列式结构的车站,开出车站有1可能的顺序:
abcd
5、6,24
7、staxy
8、char
9、第一个循环:
队列Q中的元素依次出队,出队后即进栈S
第二个循环:
栈S中的元素依次出栈,出栈后即进入队列Q
第4章串
一、选择题
1、A2、D3、C4、C5、D
二、简答题
1、含零个字符的串称为空串,用Φ表示,串的长度为0。
而空格串是由一个或多个空格组成的串,串的长度为所含空格的个数。
由串中任意连续字符组成的子序列称为该串的子串。
包含子串的串相应地被称为主串。
假如一个串S=“a0a1a2…an-1”(n≥0),其中:
S为串名,用双引号括起来的内容为串的值,双引号本身不是串的值。
2、当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,两个串才相等。
3、19,7,good,e,0,3,”Iamagoodteacher”,”agoodyestea”
4、
j
0
1
2
3
4
5
6
模式串
a
b
c
a
b
a
a
next[j]
-1
0
0
0
1
2
1
三、算法题
1、
voidAssign(string*s,stringt)∴n=(676-2-644)/2=15
∴Loc(3,3)=Loc(0,0)+3*15+3=644+45+3=692.
2、
(1)数组B共有1+2+3++n=(n+1)*n/2个元素。
(2)只存下三角部分时,若ij,则数组元素A[i][j]前面有i-1行(1i-1,第0行第0列不算),第1行有1个元素,第2行有2个元素,,第i-1行有i-1个元素。
在第i行中,第j号元素排在第j个元素位置,因此,数组元素A[i][j]在数组B中的存放位置为:
1+2++(i-1)+j=(i-1)*i/2+j
若i 在数组B的第(j-1)*j/2+i位置中找到。 如果第0行第0列也计入,数组B从0号位置开始存放,则数组元素A[i][j]在数组B中的存放位置可以改为: 当ij时,=i*(i+1)/2+j 当i 3、 (1)Head(Tail(Tail(L1))) (2)Head(Head(Tail(L2))) (3)Head(Head(Tail(Tail(Head(L3))))) (4)Head(Head(Tail(Tail(L4)))) (5)Head(Tail(Head(L5))) (6)Head(Head(Tail(Head(Tail(L6))))) 4、由于线性表中的每个结点对应稀疏矩阵的一个非零元素,其中包括3个字段,分别为该元素的行下标、列下标和值,结点间的次序按矩阵的行优先顺序排列,这个线性表用顺序的方法存储在连续的存储区,则对应的三元组为 其十字链表形式为: 5、 6、L=(a,(b,c),(d,(e))) 四、算法题 1、【算法分析】从前向后找零元素A[i],从后向前找非零元素A[j],将A[i]与A[j]交换。 【算法源代码】 voidmove(intA[],intn) {inti=0,j=n-1; inttemp; while(i { while(A[i]! =0)i++; while(A[j]==0)j--; if(i {temp=A[i];A[i]=A[j];A[j]=temp;} } } 2、【算法分析】为保证算法的时间复杂度为O(m+n),即需要对数组A和B的数据元素仅扫描一次就能生成C数组,我们可采用设三个下标指针i,j,k初始时分别指向A数组的最后一个元素(A数组的最大值)、B数组的第一个元素(B数组的最大值)、C数组将存放最大值的位置,然后比较A与B数组的最大值大者放C数组k所指单元;在上述比较中若A数组i所指单元数大,则送完后i前移,否则j所指单元数送完后j后移,同时k前移,直到把A与B数组的所有元素扫描完。 【算法源代码】 #definem3 #definen4 voidMerge(intA[],intB[],intC[]) {inti,j,k; i=m-1;j=0;k=m+n-1; while((i>=0)&&(j<=n-1)) {if(A[i]>B[j]) {C[k]=A[i];i--;} else {C[k]=B[j];j++;} k--;} while(i>=0){C[k]=A[i];i--;k--;} while(j<=n-1){C[k]=B[j];j++;k--;} } 3、【算法分析】三元组表示中要求按行的顺序存放,所有转置过程不能直接将行下标和列下标转换,还必须使得列按顺序存放。 因此在A中首先找出第一列中的所有元素,它们是转置矩阵中第一行非0元素,并把它们依次放在转置矩阵三元组数组B中;然后依次找出第二列中的所有元素,把它们依次放在数组B中;按照同样的方法逐列进行,直到找出第n列的所有元素,并把它们依次放在数组B中。 【算法源代码】 voidtranspose(TSMatrixA,TSMatrix*B) /*A是稀疏矩阵的三元组形式,B是存放A的转置矩阵的三元组数组*/ {inti,j,k; B->mu=; B->nu=; B->tu=; if(B->tu>0) {j=1; for(k=1;k<=;k++) for(i=1;i<=;i++) if[i].col==k) {B->data[j].row=[i].col; B->data[j].col=[i].row; B->data[j].e=[i].e; j++; } } } 4、【算法分析】在求广义表深度的递归算法中,若结点为原子则深度为0,若是空表深度为1,否则返回头指针与尾指针所指广义表的深度最大值。 【算法源代码】 intGlist_Getdeph(GlistL) {intm,n; if(! L->tag)return0; elseif(! L)return1; m=Glist_Getdeph(L->+1; n=Glist_Getdeph(L->; returnm>nn: n; } 第6章树 一.选择题 1、B2、A3、B4、A5、C6、CA7、B8、B9、D10、B 11、B12、B13、B14、A15、C16、D17、A18、A19、C20、D 二.填空题 1.[1]前驱[2]一个前驱结点[3]后继[4]后继 2.n-1 3.n0=n2+1 4.[1]2[2]10[3]11 5.[1]A[2]DGF[3]BE[4]AC[5]B [6]ACE[7]右[8]左[9]2[10]4 6.250 7.1 8.2n0-1 9.[1]D[2]F 10.[1]GEACBDF[2]1 11.[1]InOrderTraverse(T->left)[2]printf(T->data)[3]InOrderTraverse(T->right) 12.。 三.判断题 1.×2.×3.√4.×5.× 6.√7.×8.√9.×10.√ 四.操作题 1. (1) (2)GCABFED (3) (4)(5) (6) 2. 3. (1)所有结点均没有左孩子的二叉树。 (2)所有结点均没有右孩子的二叉树 (3)只有一个根结点的二叉树 4.证明: 当n=1时,前序序列和中序序列均只有一个元素且相同,即为根,由此唯一地确定了这颗二叉树。 假设n 设前序序列为: a1,a2,…,am,中序序列为: b1,b2,…,bm。 因为前序序列由前序遍历得到,则a1为根结点元素;又中序序列由中序遍历得到,则在中序序列中必能找到和a1相同的元素并设为bj(1≤j≤m),由此可得{b1,…,bj-1}为左子树的中序序列,{bj+1,…,bm}为右子树的中序序列。 (1)若j=1即b1为根,此时二叉树的左子树为空,{a2,…,am}即为右子树的前序序列,{b2,…,bm}即为右子树的中序序列,右子树的结点数为m-1,由此,这两个序列唯一确定了右子树,也唯一确定了二叉树。 (2)若j=m即bm为根,此时二叉树的右子树为空,{a2,…,am}即为左子树的前序序列,{b2,…,bm}即为左子树的中序序列,同 (1),这两个序列唯一确定了左子树,也唯一确定了二叉树。 (3)2≤j≤m-1,则子序列{a2,…,aj}和{b1,…,bj-1}分别为左子树的前序序列和中序序列,这两个序列唯一确定了左子树;子序列{aj+1,…,am}和{bj+1,…,bm}分别为右子树的前序序列和中序序列,这两个序列唯一确定了右子树; 由此,证明了知道一棵二叉树的前序序列和中序序列,就能唯一地确定一棵二叉树。 5. 6. 7. 8. 五.算法设计题 =p; p=p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构马睿 孙丽云习题答案 数据结构 孙丽云 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)