程序运行出错
#include <iostream>
#include <stdio.h>
typedef struct {
int *elem ;
int front ;
int rear ;
int queuesize;
}Queue ;
void InitQueue(Queue &Q ,int maxsize)
{
Q.elem = new int[maxsize];
Q.queuesize = maxsize ;
Q.front = Q.rear =0;
}
bool GetHead(Queue &Q,int e)
{
if(Q.front==Q.rear)
return false;
e=Q.elem[Q.front];
return true;
}
bool DeQueue(Queue & Q, int e)
{
if (Q.front==Q.rear)
return false;
e= Q.elem[Q.front];
Q.front= (Q.front+1)%Q.queuesize;
return true;
}
bool EnQueue(Queue & Q,int e)
{
if((Q.rear+1)%Q.queuesize==Q.front)
return false;
Q.elem[Q.rear]=e;
Q.rear=(Q.rear+1)%Q.queuesize;
return true;
}
int main(int argc, char *argv[])
{ int n;
cout < < "please input n: " < <endl;
cin> > n;
Queue Q;
InitQueue(Q, 100);
for(int i=1;i <=n;i++)
cout < < " ";
cout < <1 < <endl;
EnQueue(Q,0);
EnQueue(Q,1);
EnQueue(Q,1);
int k=1,s,e;
while(k <n)
{
for(int i=1;i <=n-k;i++)
cout < < " ";
EnQueue(Q,0);
do{
DeQueue(Q,s);
GetHead(Q,e);
if(e)
cout < <e < < " ";
else cout < <endl;
EnQueue(Q,s+e);
}
while(e!=0);
k++;
}
DeQueue(Q,e);
while(Q.front!=Q.rear)
{
DeQueue(Q,e);
cout < <e < < " ";
}
}
[解决办法]
是函数头写错了,至少在以下两个函数中,参数e只是被赋值,没有被引用。
bool GetHead(Queue &Q,int e)
bool DeQueue(Queue & Q, int e)
所以,要让它们充分起作用,这里的int e应该用int& e才合理,从main中看,也是引用才合理,这样s,e没必要初始化,因为程序保证了在引用它之前一定在函数中被赋值了。
这里仅就语法角度说明矛盾的地方,没有仔细看这个程序是干什么的(语用角度)。所以也有可能有偏差,权当抛砖引玉吧。