运行时提示可执行程序停止工作,这是为什么,求大神指点(这是用链队输出杨辉三角的程序)。
#include<stdio.h>#include<malloc.h>
typedef int ElemType;
typedef struct qnode
{
ElemType data;
struct qnode * next;
}QNode;
typedef struct
{
QNode * front;
QNode * rear;
}LiQueue;
void InitQueue(LiQueue *&q)
{
q=(LiQueue *)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
void DestroyQueue(LiQueue * q)
{
QNode * p=q->front, *r;
if(p!=NULL)
{
r=p->next;
while(r!=NULL)
{
free(p);
p=r;r=p->next;
}
free(p);free(q);
}
}
bool QueueEmpty(LiQueue * q)
{
return(q->rear==NULL);
}
void EnQueue(LiQueue *& q,ElemType e)
{
QNode * p;
p=(QNode *)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
if(q->rear==NULL)
q->front=q->rear=p;
else
{
q->rear->next=p;
q->rear=p;
}
}
bool DeQueue(LiQueue *&q,ElemType &e)
{
QNode * t;
if(q->rear=NULL)
return false;
t=q->front;
if(q->front==q->rear)
q->front=q->rear=NULL;
else
q->front=q->front->next;
e=t->data;
free(t);
return true;
}
void Yanghui(int n)
{
int i,j,s1,s2;
LiQueue * q;
ElemType e;
printf("1 \n");
EnQueue(q,1);
for(i=2;i<=n;i++)
{
s1=0;
for(j=1;j<i;j++)
{
s2=DeQueue(q,e);
printf("%d ",s1+s2);
EnQueue(q,s1+s2);
s1=s2;
}
printf("1 \n");
EnQueue(q,1);
}
}
int main()
{
int n;
scanf("%d",&n);
Yanghui(n);
return 0;
}