广工AnyView数据结构第15章答案解析Word格式.docx

上传人:b****5 文档编号:19058659 上传时间:2023-01-03 格式:DOCX 页数:52 大小:27.25KB
下载 相关 举报
广工AnyView数据结构第15章答案解析Word格式.docx_第1页
第1页 / 共52页
广工AnyView数据结构第15章答案解析Word格式.docx_第2页
第2页 / 共52页
广工AnyView数据结构第15章答案解析Word格式.docx_第3页
第3页 / 共52页
广工AnyView数据结构第15章答案解析Word格式.docx_第4页
第4页 / 共52页
广工AnyView数据结构第15章答案解析Word格式.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

广工AnyView数据结构第15章答案解析Word格式.docx

《广工AnyView数据结构第15章答案解析Word格式.docx》由会员分享,可在线阅读,更多相关《广工AnyView数据结构第15章答案解析Word格式.docx(52页珍藏版)》请在冰豆网上搜索。

广工AnyView数据结构第15章答案解析Word格式.docx

P(x)=a0+a1x+a2x^2+...+anx^n

的值P(x0),并确定算法中每一语句的执行次数和整个算法

的时间复杂度。

**********/

floatPolynomial(intn,inta[],floatx)

/*求一元多项式的值P(x)。

*/

/*数组a的元素a[i]为i次项的系数,i=0,...,n*/

floatanswer=a[0];

floattemp=1.0;

for(inti=1;

i<

=n;

i++)

{

temp*=x;

answer+=a[i]*temp;

}

returnanswer;

【题目】已知k阶裴波那契序列的定义为

f(0)=0,f

(1)=0,...,f(k-2)=0,f(k-1)=1;

f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,...

试编写求k阶裴波那契序列的第m项值的函数算法,

k和m均以值调用的形式在函数参数表中出现。

StatusFibonacci(intk,intm,int&

f)

/*求k阶斐波那契序列的第m项的值f*/

if(k<

=1||m<

0)

returnERROR;

elseif(m==k-1)

f=1;

elseif(m==0)

f=0;

else

inti,j,sum;

int*t;

t=(int*)malloc(m*sizeof(int));

for(i=0;

=k-2;

i++)

t[i]=0;

t[k-1]=1;

for(i=k;

=m;

{sum=0;

for(j=i-k;

j<

=i;

j++)

sum+=t[j];

t[i]=sum;

f=t[m];

returnOK;

【题目】试编写算法,计算i!

×

2^i的值并存入数组

a[0..n-1]的第i-1个分量中(i=1,2,…,n)。

假设计

算机中允许的整数最大值为MAXINT,则当对某个k

(1≤k≤n)使k!

2^k>

MAXINT时,应按出错处理。

注意

选择你认为较好的出错处理方法。

StatusSeries(inta[],intn)

/*求i!

*2^i序列的值并依次存入长度为n的数组a;

/*若所有值均不超过MAXINT,则返回OK,否则OVERFLOW*/

intt=1,p=1;

t*=i;

p*=2;

a[i-1]=t*p;

if(a[i-1]>

MAXINT)

【题目】假设有A、B、C、D、E五个高等院校进行田径对抗赛,

各院校的单项成绩均以存入计算机并构成一张表,表中每一行

的形式为:

项目名称性别校名成绩得分

编写算法,处理上述表格,以统计各院校的男、女总分和团体

总分,并输出。

voidScores(ResultType*result,ScoreType*score)

/*求各校的男、女总分和团体总分,并依次存入数组score*/

/*假设比赛结果已经储存在result[]数组中,*/

/*并以特殊记录{"

"

male,'

'

"

0}(域scorce=0)*/

/*表示结束*/

inti=0;

while(result[i].sport!

=NULL)

{

switch(result[i].schoolname)

case'

A'

:

score[0].totalscore+=result[i].score;

if(result[i].gender==male)

score[0].malescore+=result[i].score;

score[0].femalescore+=result[i].score;

break;

B'

score[1].totalscore+=result[i].score;

score[1].malescore+=result[i].score;

score[1].femalescore+=result[i].score;

C'

score[2].totalscore+=result[i].score;

score[2].malescore+=result[i].score;

score[2].femalescore+=result[i].score;

D'

score[3].totalscore+=result[i].score;

score[3].malescore+=result[i].score;

score[3].femalescore+=result[i].score;

E'

score[4].totalscore+=result[i].score;

score[4].malescore+=result[i].score;

score[4].femalescore+=result[i].score;

i++;

【题目】试写一算法,对序列S的第i个元素赋以值e。

序列的类型定义为:

typedefstruct{

ElemType*elem;

intlength;

}Sequence;

StatusAssign(Sequence&

S,inti,ElemTypee)

/*对序列S的第i个元素赋以值e,并返回OK。

/*若S或i不合法,则赋值失败,返回ERROR*/

if(S.length<

1||i>

S.length)

S.elem[i]=e;

【题目】试写一算法,由长度为n的一维数组a构建一个序列S。

StatusCreateSequence(Sequence&

S,intn,ElemType*a)

/*由长度为n的一维数组a构建一个序列S,并返回OK。

/*若构建失败,则返回ERROR*/

if(n<

1)

S.elem=(ElemType*)malloc(n*sizeof(ElemType));

S.elem[0]=a[0];

n;

S.elem[i]=a[i];

S.length=n;

【题目】链表的结点和指针类型定义如下

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LNode,*LinkList;

试写一函数,构建一个值为x的结点。

LinkListMakeNode(ElemTypex)

/*构建一个值为x的结点,并返回其指针。

*/

/*若构建失败,则返回NULL。

LNode*p;

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

if(p==NULL)

returnNULL;

p->

data=x;

returnp;

试写一函数,构建长度为2且两个结点的值依次为x和y的链表。

LinkListCreateLinkList(ElemTypex,ElemTypey)

/*构建其两个结点的值依次为x和y的链表。

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

if(p->

next==NULL)

next->

data=y;

next=NULL;

试写一函数,构建长度为2的升序链表,两个结点的值

分别为x和y,但应小的在前,大的在后。

LinkListCreateOrdLList(ElemTypex,ElemTypey)

/*构建长度为2的升序链表。

data=(x<

y)?

x:

y;

data=(x>

【题目】试写一算法,实现顺序栈的判空操作

StackEmpty_Sq(SqStackS)。

顺序栈的类型定义为:

//存储空间的基址

inttop;

//栈顶元素的下一个位置,简称栈顶位标

intsize;

//当前分配的存储容量

intincrement;

//扩容时,增加的存储容量

}SqStack;

//顺序栈

StatusStackEmpty_Sq(SqStackS)

/*对顺序栈S判空。

*/

/*若S是空栈,则返回TRUE;

否则返回FALSE*/

if(S.top==0)

returnTRUE;

returnFALSE;

【题目】试写一算法,实现顺序栈的取栈顶元素操作

GetTop_Sq(SqStackS,ElemType&

e)。

StatusGetTop_Sq(SqStackS,ElemType&

e)

/*取顺序栈S的栈顶元素到e,并返回OK;

/*若失败,则返回ERROR。

if(S.top==0)

e=S.elem[S.top-1];

【题目】试写一算法,实现顺序栈的出栈操作

Pop_Sq(SqStack&

S,ElemType&

StatusPop_Sq(SqStack&

/*顺序栈S的栈顶元素出栈到e,并返回OK;

*/

e=S.elem[--S.top];

【题目】若顺序栈的类型重新定义如下。

试编写算法,

构建初始容量和扩容增量分别为size和inc的空顺序栈S。

ElemType*top;

//栈顶元素的下一个位置

}SqStack2;

StatusInitStack_Sq2(SqStack2&

S,intsize,intinc)

/*构建初始容量和扩容增量分别为size和inc的空顺序栈S。

/*若成功,则返回OK;

否则返回ERROR。

S.elem=(ElemType*)malloc(sizeof(ElemType));

if(S.elem==NULL||size<

=0||inc<

=0)

S.top=S.elem;

S.size=size;

S.increment=inc;

实现顺序栈的判空操作。

StatusStackEmpty_Sq2(SqStack2S)

if(S.top==S.elem)

实现顺序栈的入栈操作。

StatusPush_Sq2(SqStack2&

S,ElemTypee)

/*若顺序栈S是满的,则扩容,若失败则返回ERROR。

/*将e压入S,返回OK。

ElemType*p;

if(S.top-S.elem>

S.size)

p=(ElemType*)realloc(S.elem,(S.size+S.increment)*sizeof(ElemType));

S.elem=p;

S.size+=S.increment;

*(S.top++)=e;

实现顺序栈的出栈操作。

StatusPop_Sq2(SqStack2&

/*若顺序栈S是空的,则返回ERROR;

/*否则将S的栈顶元素出栈到e,返回OK。

if(S.elem==S.top)

e=*(--S.top);

【题目】试写一算法,借助辅助栈,复制顺序栈S1得到S2。

可调用顺序栈接口中下列函数:

StatusInitStack_Sq(SqStack&

S,intsize,intinc);

//初始化顺序栈S

StatusDestroyStack_Sq(SqStack&

S);

//销毁顺序栈S

StatusStackEmpty_Sq(SqStackS);

//栈S判空,若空则返回TRUE,否则FALSE

StatusPush_Sq(SqStack&

S,ElemTypee);

//将元素e压入栈S

e);

//栈S的栈顶元素出栈到e

StatusCopyStack_Sq(SqStackS1,SqStack&

S2)

/*借助辅助栈,复制顺序栈S1得到S2。

/*若复制成功,则返回TRUE;

否则FALSE。

if(StackEmpty_Sq(S1))

S2.top=0;

S2.elem=S1.elem;

S2.top=S1.top;

【题目】试写一算法,求循环队列的长度。

循环队列的类型定义为:

ElemType*base;

intfront;

//队头位标

intrear;

//队尾位标,指示队尾元素的下一位置

intmaxSize;

//最大长度

}SqQueue;

intQueueLength_Sq(SqQueueQ)

/*返回队列Q中元素个数,即队列的长度。

if(Q.rear-Q.front<

returnQ.maxSize-Q.front+Q.rear;

returnQ.rear-Q.front;

【题目】如果希望循环队列中的元素都能得到利用,

则可设置一个标志域tag,并以tag值为0或1来区分尾

指针和头指针值相同时的队列状态是"

空"

还是"

满"

试编写与此结构相应的入队列和出队列的算法。

本题的循环队列CTagQueue的类型定义如下:

ElemTypeelem[MAXQSIZE];

inttag;

}CTagQueue;

StatusEnCQueue(CTagQueue&

Q,ElemTypex)

/*将元素x加入队列Q,并返回OK;

if(Q.front==Q.rear&

Q.tag==1)

if(Q.rear==0)

Q.elem[0]=x;

Q.rear+=1;

Q.elem[Q.rear]=x;

Q.rear=(Q.rear+1)%MAXQSIZE;

Q.tag=1;

StatusDeCQueue(CTagQueue&

Q,ElemType&

x)

/*将队列Q的队头元素退队到x,并返回OK;

Q.tag==0)

x=Q.elem[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

Q.tag=0;

【题目】假设将循环队列定义为:

以域变量rear

和length分别指示循环队列中队尾元素的位置和内

含元素的个数。

试给

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

当前位置:首页 > 工程科技 > 城乡园林规划

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

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