队列链的一个问题
数据结构教程上的一道题目输入N(由用户输入)个10以内的数,每输入i(0<=i<=9),就把它插入第i号队列中,最后把10个队列中非空队列,按队列号从小到大的顺序串接成一条链,并输出该链的所有原素
我的思路是:先建立10个空队列,然后由用户输入i,把i入队到第i号队列,再扫描队列链,只果是空队则把它从链中删除,如果不空则打印出该队列从队头到队尾的元素
编出来后运行却发现不正确 麻烦各位帮我看看
代码:
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 1000
struct queue
{
int data[MAXSIZE];
int front,rear;
queue *next; //队列中指向下一个队列的指针
}*q[10]; //建立10个队列型指针
int main()
{
queue *qhead,*r,*pelem,*qelem;
qhead=(queue *)malloc(sizeof(queue));
qhead->next=NULL; //建立队列链头结点qhead
r=qhead;
for(int j=0;j<10;j++)
{
q[j]=(queue *)malloc(sizeof(queue));
q[j]->front=q[j]->rear=0;
r->next=q[j];
r=q[j]; //尾插法建立队列链
}
r->next=NULL;
int i;
while(scanf("%d",&i)!=EOF) //由用户输入i
{
q[i]->rear=(q[i]->rear+1)%MAXSIZE; //将i入队到第i号队列中
q[i]->data[q[i]->rear]=i;
}
int k=0;
pelem=qhead;qelem=pelem->next; //扫描队列链
while(qelem!=NULL)
{
if(qelem->front==pelem->rear) //判断队空
{
pelem->next=qelem->next; //队空则删除队列,即从队列链中删除一个结点
free(qelem);
qelem=pelem->next;
}
else //如果不空则打印出队中元素
{ while((qelem->front+k)%MAXSIZE!=qelem->rear)
{
k++;
printf("%d ",qelem->data[(qelem->front+k)%MAXSIZE]);
}
printf("\n");
pelem=pelem->next;
qelem=pelem->next;
}
}
return 0;
}
随便输入0-9的一些数,打印出许多无效数字 估计打印的是空队中没初始化的数据 找半天找不到原因 麻烦各位大虾帮我
看看,指出问题所在 谢谢了!!!
[[italic] 本帖最后由 nofarewell 于 2007-11-25 13:25 编辑 [/italic]]