猿问

我觉得问题应该还是在遍历那个函数上,前面的定义和结构体都没有问题啊,该怎么办?

status intiQueue(LinkQueue &Q)
{

int i;
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) return (OVERFLOW);
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
printf("enter 5 numbers:\n");

for(i=0;i<5;i++)
{
scanf("%d",&p->data);
}
Q.front->next=NULL;
return OK;
}
status EnQueue(LinkQueue & Q,QElemType e)
{

QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit (OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}

void Queuetraverse(LinkQueue &Q){QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
//printf("Queue:\n");
p=Q.front->next;
while(p)
{
p=p->next;
printf("%d\t",p->data);
}
}
void main()
{
LinkQueue s;
intiQueue (s);

EnQueue(s,2);
Queuetraverse(s);

}
不知道怎么修改了,菜鸟求大神解答!

郎朗坤
浏览 147回答 1
1回答

子衿沉夜

第一个问题:初始化函数里,循环输入5个数,你都用同一个内存空间来保存,这是不对的哦。你要想建个初始有5个元素的队列,就得一次malloc 5个结点的空间,或者5次malloc 1个结点的空间。第二个问题:删除队头元素的函数里,删除完要记得free(p),不然会造成内存泄露的哦。第三个问题:循环遍历里,把p定义成一个QNode指针变量就行了QNode *p,不用给p申请内存空间。而且while循环里,要先打印p->data的值,再p=p->next,不然会少打一个元素的哦(也可以将while之前的那句p=Q.front->next改成p=Q.front,这样就不用改while循环了)
随时随地看视频慕课网APP
我要回答