| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1104 人关注过本帖
标题:队列链的一个问题
只看楼主 加入收藏
nofarewell
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-5-14
收藏
 问题点数:0 回复次数:1 
队列链的一个问题
数据结构教程上的一道题目
输入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]]
搜索更多相关主题的帖子: 队列 
2007-11-25 13:24
nofarewell
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-5-14
收藏
得分:0 
不用麻烦大家了  在CSDN找到答案了
2007-11-25 20:15
快速回复:队列链的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016341 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved