广工AnyView数据结构第15章答案解析Word格式.docx
- 文档编号:19058659
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:52
- 大小:27.25KB
广工AnyView数据结构第15章答案解析Word格式.docx
《广工AnyView数据结构第15章答案解析Word格式.docx》由会员分享,可在线阅读,更多相关《广工AnyView数据结构第15章答案解析Word格式.docx(52页珍藏版)》请在冰豆网上搜索。
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分别指示循环队列中队尾元素的位置和内
含元素的个数。
试给
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AnyView 数据结构 15 答案 解析