广工数据结构Anyview答案文档格式.docx
- 文档编号:20660028
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:73
- 大小:33.77KB
广工数据结构Anyview答案文档格式.docx
《广工数据结构Anyview答案文档格式.docx》由会员分享,可在线阅读,更多相关《广工数据结构Anyview答案文档格式.docx(73页珍藏版)》请在冰豆网上搜索。
/*求一元多项式的值P(x)。
*/
/*数组a的元素a[i]为i次项的系数,i=0,...,n*/
floatjieguo=a[n];
//1次
for(inti=n-1;
i>
=0;
i--)//n次
{
jieguo=a[i]+x*jieguo;
}
returnjieguo;
//整体时间复杂度T(n)=O(n)
1.11【题目】已知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(m<
0)returnERROR;
k-1)
f=0;
return1;
if(m=k-1)
f=1;
if(k>
=2&
&
m>
=k)
intTemp[100];
for(intj=k;
j>
1;
j--)
Temp[k-j]=0;
}
Temp[k-1]=1;
for(inti=0;
(k+i)<
=m;
i++)
{
inttemp=0;
for(ints=1;
s<
=k;
s++)
temp=temp+Temp[k+i-s];
Temp[k+i]=temp;
f=Temp[m];
1.18【题目】试编写算法,计算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*/
longm=1;
for(inti=1;
i<
=n;
m=m*i*2;
=MAXINT)
a[i-1]=m;
elsereturnOVERFLOW;
returnOK;
1.23【题目】假设有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;
elsescore[0].femalescore+=result[i].score;
break;
B'
score[1].totalscore+=result[i].score;
if(result[i].gender==male)score[1].malescore+=result[i].score;
elsescore[1].femalescore+=result[i].score;
C'
score[2].totalscore+=result[i].score;
if(result[i].gender==male)score[2].malescore+=result[i].score;
elsescore[2].femalescore+=result[i].score;
D'
score[3].totalscore+=result[i].score;
if(result[i].gender==male)score[3].malescore+=result[i].score;
elsescore[3].femalescore+=result[i].score;
E'
score[4].totalscore+=result[i].score;
if(result[i].gender==male)score[4].malescore+=result[i].score;
elsescore[4].femalescore+=result[i].score;
i++;
for(i=0;
5;
printf("
theschool%s:
"
result[i].schoolname);
Totalscoreofmale:
%d\n"
score[i].malescore);
Totalscoreoffemale:
score[i].femalescore);
Totalscoreofall:
%d\n\n"
score[i].totalscore);
2.06【题目】试写一算法,对序列S的第i个元素赋以值e。
序列的类型定义为:
intlength;
}Sequence;
StatusAssign(Sequence&
S,inti,ElemTypee)
/*对序列S的第i个元素赋以值e,并返回OK。
/*若S或i不合法,则赋值失败,返回ERROR*/
{for(intj;
j<
S.length;
j++)
if(!
S.elem[j])returnERROR;
if(S.length==0||i>
S.length)returnERROR;
S.elem[i]=e;
2.09【题目】试写一算法,由长度为n的一维数组a构建一个序列S。
StatusCreateSequence(Sequence&
S,intn,ElemType*a)
/*由长度为n的一维数组a构建一个序列S,并返回OK。
/*若构建失败,则返回ERROR*/
if(n<
=0)returnERROR;
S.elem=(ElemType*)malloc(n*sizeof(ElemType));
S.elem=a;
S.length=n;
2.21【题目】链表的结点和指针类型定义如下
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
试写一函数,构建一个值为x的结点。
LinkListMakeNode(ElemTypex)
/*构建一个值为x的结点,并返回其指针。
*/
/*若构建失败,则返回NULL。
LNodenew;
new.data=x;
new.next=NULL;
return&
new;
2.23【题目】链表的结点和指针类型定义如下
试写一函数,构建长度为2且两个结点的值依次为x和y的链表。
LinkListMakeNode(ElemTypeM)
{LNode*k;
k=(LNode*)malloc(sizeof(LNode));
k->
data=M;
next=NULL;
returnk;
LinkListCreateLinkList(ElemTypex,ElemTypey)
/*构建其两个结点的值依次为x和y的链表。
LNode*p;
p=MakeNode(x);
p->
next=MakeNode(y);
returnp;
【题目】链表的结点和指针类型定义如下
试写一函数,构建长度为2的升序链表,两个结点的值
分别为x和y,但应小的在前,大的在后。
LinkListCreateOrdLList(ElemTypex,ElemTypey)
/*构建长度为2的升序链表。
if(x>
=y)
p=MakeNode(y);
next=MakeNode(x);
else
3.03【题目】试写一算法,实现顺序栈的判空操作
3.05【题目】试写一算法,实现顺序栈的取栈顶元素操作
GetTop_Sq(SqStackS,ElemType&
e)。
StatusGetTop_Sq(SqStackS,ElemType&
e)
/*取顺序栈S的栈顶元素到e,并返回OK;
/*若失败,则返回ERROR。
if(S.top<
=0)
returnERROR;
e=S.elem[S.top-1];
3.07【题目】试写一算法,实现顺序栈的出栈操作
Pop_Sq(SqStack&
S,ElemType&
StatusPop_Sq(SqStack&
/*顺序栈S的栈顶元素出栈到e,并返回OK;
*/
e=S.elem[--S.top];
3.11【题目】若顺序栈的类型重新定义如下。
试编写算法,
构建初始容量和扩容增量分别为size和inc的空顺序栈S。
ElemType*top;
//栈顶元素的下一个位置
}SqStack2;
StatusInitStack_Sq2(SqStack2&
S,intsize,intinc)
/*构建初始容量和扩容增量分别为size和inc的空顺序栈S。
/*若成功,则返回OK;
否则返回ERROR。
if(size<
=0||inc<
S.elem=(ElemType*)malloc(size*sizeof(ElemType));
if(S.elem==null)returnERROR;
S.top=S.elem;
S.size=size;
S.increment=inc;
3.13【题目】若顺序栈的类型重新定义如下。
实现顺序栈的判空操作。
StatusStackEmpty_Sq2(SqStack2S)
if(S.top==S.elem)returnTRUE;
elsereturnFALSE;
3.15【题目】若顺序栈的类型重新定义如下。
实现顺序栈的入栈操作。
StatusPush_Sq2(SqStack2&
S,ElemTypee)
/*若顺序栈S是满的,则扩容,若失败则返回ERROR。
/*将e压入S,返回OK。
{ElemType*newbase;
if(&
S.elem[S.size]==S.top)
newbase=(ElemType*)realloc(S.elem,(S.increment+S.size)*sizeof(ElemType));
if(newbase==null)returnERROR;
S.top=&
newbase[S.size];
S.elem=newbase;
S.size=S.size+S.increment;
*S.top++=e;
3.17【题目】若顺序栈的类型重新定义如下。
实现顺序栈的出栈操作。
StatusPop_Sq2(SqStack2&
/*若顺序栈S是空的,则返回ERROR;
/*否则将S的栈顶元素出栈到e,返回OK。
if(S.top<
=S.elem)returnERROR;
e=*--S.top;
3.22【题目】试写一算法,借助辅助栈,复制顺序栈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(S1.elem==null)returnFALSE;
InitStack_Sq(S2,S1.size,S1.increment);
if(S2.elem==null)returnFALSE;
if(StackEmpty_Sq(S1))returnOK;
S1.top;
Push_Sq(S2,S1.elem[i]);
3.33【题目】试写一算法,求循环队列的长度。
循环队列的类型定义为:
ElemType*base;
intfront;
//队头位标
intrear;
//队尾位标,指示队尾元素的下一位置
intmaxSize;
//最大长度
}SqQueue;
intQueueLength_Sq(SqQueueQ)
/*返回队列Q中元素个数,即队列的长度。
if(Q.front==Q.rear)return0;
if(Q.front==(Q.rear%Q.maxSize))returnQ.maxSize;
if(Q.front<
Q.rear)return(Q.rear-Q.front);
if(Q.rear<
Q.front)returnQ.rear+Q.maxSize-Q.front;
3.35【题目】如果希望循环队列中的元素都能得到利用,
则可设置一个标志域tag,并以tag值为0或1来区分尾
指针和头指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 Anyview 答案