云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 耿国华数据结构习题答案完整

耿国华数据结构习题答案完整

  • 62 次阅读
  • 3 次下载
  • 2025/6/14 16:33:36

.

第一章答案

1.3计算下列程序中x=x+1的语句频度 for(i=1;i<=n;i++)

for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1;

【解答】x=x+1的语句频度为:

T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6

2n

1. 4试编写算法,求pn(x)=a0+a1x+a2x+…….+anx的值pn(x0),并确定算法中每一语句的执

行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为ai(i=0,1,…n)、x和n,输出为Pn(x0)。 算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。 【解答】

(1)通过参数表中的参数显式传递

优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通

用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。 (2)通过全局变量隐式传递

优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗 缺点:函数通用性降低,移植性差 算法如下:通过全局变量隐式传递参数 PolyValue() { int i,n;

float x,a[],p; printf(“\\nn=”); scanf(“%f”,&n); printf(“\\nx=”); scanf(“%f”,&x); for(i=0;i

scanf(“%f ”,&a[i]); /*执行次数:n次 */ p=a[0];

for(i=1;i<=n;i++)

{ p=p+a[i]*x; /*执行次数:n次*/ x=x*x;}

printf(“%f”,p); }

算法的时间复杂度:T(n)=O(n)

通过参数表中的参数显式传递

float PolyValue(float a[ ], float x, int n) {

float p,s; int i; p=x; s=a[0];

for(i=1;i<=n;i++)

{s=s+a[i]*p; /*执行次数:n次*/ p=p*x;} return(p);

.

.

}

算法的时间复杂度:T(n)=O(n)

第二章答案

2.7试分别以不同的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,an)逆置为(an,an-1,…,a1)。 【解答】(1)用一维数组作为存储结构 void invert(SeqList *L, int *num)

{

int j;

ElemType tmp;

for(j=0;j<=(*num-1)/2;j++) { tmp=L[j];

L[j]=L[*num-j-1]; L[*num-j-1]=tmp;} }

(2)用单链表作为存储结构 void invert(LinkList L) {

Node *p, *q, *r;

if(L->next ==NULL) return; /*链表为空*/ p=L->next;

q=p->next;

p->next=NULL; /* 摘下第一个结点,生成初始逆置表 */

while(q!=NULL) /* 从第二个结点起依次头插入当前逆置表 */ {

r=q->next;

q->next=L->next; L->next=q; q=r; } }

2.11将线性表A=(a1,a2,……am), B=(b1,b2,……bn)合并成线性表C, C=(a1,b1,……am,bm,bm+1,…….bn) 当m<=n时,或 C=(a1,b1, ……an,bn,an+1,……am)当m>n时,线性表A、B、C以单链表作为存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。 【解答】算法如下:

LinkList merge(LinkList A, LinkList B, LinkList C) { Node *pa, *qa, *pb, *qb, *p;

pa=A->next; /*pa表示A的当前结点*/ pb=B->next;

p=A; / *利用p来指向新连接的表的表尾,初始值指向表A的头结点*/

while(pa!=NULL && pb!=NULL) /*利用尾插法建立连接之后的链表*/ { qa=pa->next;

qb=qb->next;

p->next=pa; /*交替选择表A和表B中的结点连接到新链表中;*/ p=pa;

.

.

p->next=pb;

p=pb; pa=qa; pb=qb;

}

if(pa!=NULL) p->next=pa; /*A的长度大于B的长度*/ if(pb!=NULL) p->next=pb; /*B的长度大于A的长度*/ C=A; Return(C); }

第三章答案

3.1按3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车厢调度,回答:

(1) 如进站的车厢序列为123,则可能得到的出站车厢序列是什么?

(2) 如进站的车厢序列为123456,能否得到435612和135426的出站序列,并说明

原因(即写出以“S”表示进栈、“X”表示出栈的栈序列操作)。

【解答】

(1)可能得到的出站车厢序列是:123、132、213、231、321。 (2)不能得到435612的出站序列。

因为有S(1)S(2)S(3)S(4)X(4)X(3)S(5)X(5)S(6)S(6),此时按照“后进先出”的原则,出栈的顺序必须为X(2)X(1)。 能得到135426的出站序列。

因为有S(1)X(1)S(2)S(3)X(3)S(4)S(5)X(5)X(4)X(2)X(1)。

3.3给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满? 【解答】(1)顺序栈 (top用来存放栈顶元素的下标)

判断栈S空:如果S->top==-1表示栈空。

判断栈S满:如果S->top==Stack_Size-1表示栈满。

(2) 链栈(top为栈顶指针,指向当前栈顶元素前面的头结点) 判断栈空:如果top->next==NULL表示栈空。

判断栈满:当系统没有可用空间时,申请不到空间存放要进栈的元素,此时栈满。

3. 4照四则运算加、减、乘、除和幂运算的优先惯例,画出对下列表达式求值时操作数栈

和运算符栈的变化过程:A-B*C/D+E↑F 【解答】

.

.

3. 5写一个算法,判断依次读入的一个以@为结束符的字母序列,是否形如‘序列1&序列

2’的字符序列。序列1和序列2中都不含‘&’,且序列2是序列1 的逆序列。例如,’a+b&b+a’是属于该模式的字符序列,而’1+3&3-1’则不是。 【解答】算法如下: int IsHuiWen() {

Stack *S; Char ch,temp; InitStack(&S);

Printf(“\\n请输入字符序列:”); Ch=getchar();

While( ch!=&) /*序列1入栈*/ { Push(&S,ch); ch=getchar(); }

do /*判断序列2是否是序列1的逆序列

*/

{ ch=getchar(); Pop(&S,&temp);

if(ch!= temp) /*序列2不是序列1的逆序列*/

{ return(FALSE); printf(“\\nNO”);} } while(ch!=@ && !IsEmpty(&S)) if(ch = = @ && IsEmpty(&S))

{ return(TRUE); printf(“\\nYES”);} /*序列2是序列1的逆序列*/

else

{return(FALSE); printf(“\\nNO”);} }/*IsHuiWen()*/

3.8 要求循环队列不损失一个空间全部都能得到利用,设置一个标志tag,以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此相应的入队与出队算法。

.

搜索更多关于: 耿国华数据结构习题答案完整 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

. 第一章答案 1.3计算下列程序中x=x+1的语句频度 for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) x=x+1; 【解答】x=x+1的语句频度为: T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6 2n1. 4试编写算法,求pn(x)=a0+a1x+a2x+…….+anx的值pn(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为ai(i=0,1,…n)、x和n,输出为Pn(x0)。 算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com