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

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:53:21
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;
fo

1. 你在init之后就建立了一个空栈/队列, 然后进行压栈操作的时候, 在函数内部会自动为其分配空间. 由于实现方法的不同(数组模拟, 指针), 分配方法不同, 但是无论哪种都是Push和EnQueue函数内部的工作, 外面不需要分配什么.
2. 在initCyQueue的时候建立了一个队列Q, 由于没有对此函数的定义, 我猜Q.base[]就是这个队列的各项, 而从0到k-1对其各项置零就是把这个队列清空了. 即赋初值.