关于数据结构中队列和栈的几个问题

1.intPalindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0{charc;InitStack(S);InitQueue(Q);wh... 1.int Palindrome_Test()//判别输入的字符串是否回文序列,是则返回1,否则返回0
{char c;
InitStack(S);InitQueue(Q);
while((c=getchar())!='@')
{
Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构 需不需要分配储存空间
}
while(!StackEmpty(S))
{
Pop(S,a);DeQueue(Q,b));
if(a!=b) return ERROR;
}
return OK;
}//Palindrome_Test

其中这句while((c=getchar())!='@')
{
Push(S,c);EnQueue(Q,c); //同时使用栈和队列两种结构 }
在Push和EnQueue的时候为什么不需要分配储存空间?

2.原题是:是利用循环队列编写求K阶斐波那契序列中的前n+1项的算法,要求满足:fn<=max而fn+1>max,其中max为某个约定的常数(本体所使用的循环队列的容量仅为k,则在算法执行结束时,留在循环队列中的元素应是所求k阶斐波那契序列中的最后k项fn-k+1,…,fn)
以下是原码:
void GetFib_CyQueue(int k,int n)//求k阶斐波那契序列的前n+1项
{
InitCyQueue(Q); //其MAXSIZE设置为k
for(i=0;i<k-1;i++) Q.base[i]=0;什么意思
Q.base[k-1]=1; //给前k项赋初值
for(i=0;i<k;i++) printf("%d",Q.base[i]);
for(i=k;i<=n;i++)
{
m=i%k;sum=0;
for(j=0;j<k;j++) sum+=Q.base[(m+j)%k];
Q.base[m]=sum; //求第i项的值存入队列中并取代已无用的第一项
printf("%d",sum);
}
}//GetFib_CyQueue

小弟不才,很多语句看不懂
请高手逐句解释~十分感谢~
展开
 我来答
百度网友07187306e
2008-04-15 · TA获得超过464个赞
知道小有建树答主
回答量:681
采纳率:0%
帮助的人:0
展开全部
1. 你在init之后就建立了一个空栈/队列, 然后进行压栈操作的时候, 在函数内部会自动为其分配空间. 由于实现方法的不同(数组模拟, 指针), 分配方法不同, 但是无论哪种都是Push和EnQueue函数内部的工作, 外面不需要分配什么.
2. 在initCyQueue的时候建立了一个队列Q, 由于没有对此函数的定义, 我猜Q.base[]就是这个队列的各项, 而从0到k-1对其各项置零就是把这个队列清空了. 即赋初值.
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式