数据结构马睿 孙丽云习题答案Word格式文档下载.docx

上传人:b****2 文档编号:14622172 上传时间:2022-10-23 格式:DOCX 页数:26 大小:142.42KB
下载 相关 举报
数据结构马睿 孙丽云习题答案Word格式文档下载.docx_第1页
第1页 / 共26页
数据结构马睿 孙丽云习题答案Word格式文档下载.docx_第2页
第2页 / 共26页
数据结构马睿 孙丽云习题答案Word格式文档下载.docx_第3页
第3页 / 共26页
数据结构马睿 孙丽云习题答案Word格式文档下载.docx_第4页
第4页 / 共26页
数据结构马睿 孙丽云习题答案Word格式文档下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数据结构马睿 孙丽云习题答案Word格式文档下载.docx

《数据结构马睿 孙丽云习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构马睿 孙丽云习题答案Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。

数据结构马睿 孙丽云习题答案Word格式文档下载.docx

(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

1

2

3

4

5

6

模式串

a

b

c

next[j]

-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<

j,数组元素A[i][j]在数组B中没有存放,可以找它的对称元素A[j][i]。

在数组B的第(j-1)*j/2+i位置中找到。

如果第0行第0列也计入,数组B从0号位置开始存放,则数组元素A[i][j]在数组B中的存放位置可以改为:

当ij时,=i*(i+1)/2+j

当i<

j时,=j*(j+1)/2+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<

j)

{

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++;

}

3、【算法分析】三元组表示中要求按行的顺序存放,所有转置过程不能直接将行下标和列下标转换,还必须使得列按顺序存放。

因此在A中首先找出第一列中的所有元素,它们是转置矩阵中第一行非0元素,并把它们依次放在转置矩阵三元组数组B中;

然后依次找出第二列中的所有元素,把它们依次放在数组B中;

按照同样的方法逐列进行,直到找出第n列的所有元素,并把它们依次放在数组B中。

voidtranspose(TSMatrixA,TSMatrix*B)

/*A是稀疏矩阵的三元组形式,B是存放A的转置矩阵的三元组数组*/

{inti,j,k;

B->

mu=;

nu=;

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;

data[j].e=[i].e;

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.。

三.判断题

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<

m-1时,结论成立,现证明当n=m时也成立。

设前序序列为:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1