数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx

上传人:b****1 文档编号:13637125 上传时间:2022-10-12 格式:DOCX 页数:64 大小:220.87KB
下载 相关 举报
数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx_第1页
第1页 / 共64页
数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx_第2页
第2页 / 共64页
数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx_第3页
第3页 / 共64页
数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx_第4页
第4页 / 共64页
数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx

《数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx(64页珍藏版)》请在冰豆网上搜索。

数据结构第二版课后答案陈雁著高等教育出版社Word下载.docx

%d,%d,%d"

&

x,&

y,&

z);

if(x>

y)

if(y>

z)

printf("

x,y,z);

else

if(x>

printf("

x,z,y);

else

z,x,y);

else

if(x>

y,x,z);

if(z>

z,y,x);

y,z,x);

}

3、举出一个数据结构的例子,叙述其逻辑结构、存储结构、运算等三方面的内容

4、分析下列算法的时间复杂度:

(1)

intprime(intn)

for(i=2;

i<

sqrt(n);

i++)

if(n%i==0)

return0;

return1;

O(n1/2)

(2)

longsun(intn)

s=0;

for(i=1;

=n;

{

for(p=1,j=1;

j<

i;

j++)

p=p*j;

s+=p;

}

returns;

O(n2)

第二章

习题

1、描述以下三个概念的区别:

头指针、头结点、首元结点(第一个元素结点)。

头指针:

指针,指向头节点的指针

头结点:

结点,其指针域指向首元节点

首元结点:

结点,第一个元素的表示形式

2、试比较顺序存储结构和链式存储结构的优缺点。

优点

缺点

顺序存储

可随机存储

内存存储密度高

实现插入、删除时的效率低

要求连续存储空间

链式存储

实现插入、删除时的效率高

不要求连续存储空间

不能随机存储

存储数据时需实用额外内存空间(如地址域)

3、设计算法,删除顺序表中值为x的所有结点。

intDelete_Sq(SqList*L,ELEMTPx)

intn=0,i=1;

if(L->

len==0)return-1;

/*表已空*/

while(i<

=L->

len)

if(L->

elem[i]=x)

{

for(j=i;

len-1;

L->

elem[j]=L->

elem[j+1];

/*被删除元素之后的元素左移*/

--L->

len;

}

i++;

4、设线性表(a1,a2,…,an)存储在带表头结点的单链表中,试设计算法,求出该线性表中值为x的元素的序号。

如果x不存在,则序号为0。

intIndex_Linkst(LNode*H,ELEMTPx)

p=H->

next;

j=1;

f=0;

/*P指向第一个结点,j为计数器,f为标志*/

while(p)

if(p->

data!

=x)

j++;

p=p->

f=1;

if(f=1)

returnj;

return0;

5、在一个非递减有序线性表中,插入一个值为x的元素,使插入后的线性表仍为非递减有序。

分别写出用顺序表和单链表表示时的算法。

顺序表:

intInsert_Sq(SqList*L,ELEMTPx)

if(L->

len==MAXSIZE-1)return-1;

/*表已满*/

elem[L->

len])

L->

len+1]=x;

len+=1;

i=1;

while(x>

elem[i])

for(j=L->

j>

=i;

j--)

L->

elem[j+1]=L->

elem[j];

elem[i]=x;

单链表:

intInsert_Linkst(LNode*H,ELEMTPx)

p=H;

s=(LNode*)malloc(sizeof(LNode));

if(s)

s->

data=x;

next=NULL;

while(p->

next)

next->

data<

x)

s->

next=p->

p->

next=s;

/*插入*/

return1;

}/*Insert_Linkst*/

p->

6、设一个线性表L=(a1,a2,…,an),编写算法将其逆置,即成为(an,an-1,…a2,a1)。

要求逆置后的线性表仍占用原来的存储空间,并且用顺序和单链表两种方法表示,写出不同的处理过程。

voidinverse_Sq(SqList*L)

inti;

ELEMTPx;

len/2;

x=L->

elem[i];

elem[i]=L->

len-i+1];

len-i+1]=x;

voidinverse_Linkst(LNode*H)

d=h->

if(d!

=NULL)

p=d->

while(p)

t=p->

next=d;

d=p;

p=t;

h=d;

7、设两个单链表A和B,它们的数据元素分别为(x1,x2,…,xm)和(y1,y2,…,yn)。

设计一个算法将它们合并为一个单链表C,使得:

当m≥n时,C=(x1,y1,x2,y2,...,xn,yn,...,xm)

当n>m时,C=(y1,x1,y2,x2,...,ym,xm,...,yn)。

LNode*Link_Linkst(LNode*A,LNode*B)

p=A->

q=B->

m=0;

n=0;

while(p)

m++;

p=p->

while(q)

n++;

q=q->

if(m>

=n)

p=A->

q=B->

C=A;

p=B->

q=A->

C=B;

t=p->

p->

next=q;

next=t;

p=t;

returnC;

8、试写一算法,在无表头结点的单链表中值为a的结点前插入一个值为b的结点,如果a不存在,则把b插在表尾。

将该算法与第2.3.2节中的算法2.7进行比较。

voidInsertx_Linkst(LNode*H,Elemtpa,Elemtpb)

s=(LNode*)malloc(sizeof(LNode));

s->

data=b;

if(H==NULL)

H=s;

p=H;

q=p->

data==a)/*对首元节点处理*/

next=p;

H=s;

while(q&

&

q->

=a)

{

p=q;

q=q->

}

9、假设有一个单向循环链表,其结点包含三个域:

data,pre和next,其中data为数据域,next为指针域,其值为后继结点的地址,pre也为指针域,其初值为空(NULL),试设计算法将此单向循环链表改为双向循环链表。

voidChange_Linkst(LNode*H)

q=H;

pre=q;

q=p;

H->

q->

next=H;

10、已知二维数组A[5][7],其每个元素占四个存储单元,且A[0][0]的存储地址为1100,试求出元素A[3][5]的存储地址(分别讨论以行为序和以列为序方式存储时的结论)。

行为序

1100+4*(3*7+5)=1204

列为序

1100+4*(5*5+3)=1212

11、设有一个二维数组A[M][N],对以下三种情况分别编写算法:

(1)求数组A的最外围元素之和;

(2)求从A[0][0]开始的互不相邻的各元素之和;

(3)当M=N时,分别求两条对角线上的元素之和,否则输出M≠N的信息。

intA1(intA[M][N])/*求数组A的最外围元素之和*/

for(i=0;

M;

if(i==0||i==M-1)

for(j=0;

N;

s+=A[i][j];

s+=A[i][0]+A[i][N-1];

intA2(ELEMTPA[M][N])/*求从A[0][0]开始的互不相邻的各元素之和*/

if(i%2==0)

j=0;

j=1;

for(;

j+=2)

s+=A[i][j];

voidA3(intA[M][N],int*s1,int*s2)/*分别求

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

当前位置:首页 > 职业教育 > 中职中专

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

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