| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1354 人关注过本帖
标题:请教箱子排序问题!!!
取消只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:7 
请教箱子排序问题!!!
程序代码:
#include<stdio.h>
#include<malloc.h>
#define M 6
#define N 10
typedef struct node
{
    char data;
    int score;
    struct node *next;
}slink;
slink *create()//建立链表
{
    slink *L1,*u,*s;
    int i;
    L1=(slink *)malloc(sizeof(slink));
    scanf("%c%d",&L1->data,&L1->score);
    L1->next=NULL;
    u=L1;
    printf("请在输入%d个结点数据\n",N-1);
    for(i=2;i<=N;i++)
    {
        s=(slink *)malloc(sizeof(slink));
        scanf("%c%d",&s->data,&s->score);
        s->next=NULL;
        u->next=s;
        u=u->next;
    }
    return L1;
}
void output(slink *head)//输出链表数据
{
    slink *p=head;
    if(p==NULL)
        printf("链表为空\n");
    else
        while(p!=NULL)
        {
       
            printf("%3c%3d\n",p->data,p->score);
             p=p->next;
        }
        printf("\n");
}

slink *bin[M];
slink *binsort(slink *head)//对建立好的链表进行箱子排序
{
    slink *p,*q,*phead,*pointer;
    phead=head;
    int i;
    for(i=0;i<M;i++)//建立M个 空单链表作为M个空箱子
    {
        bin[i]=(slink *)malloc(sizeof(slink));
        bin[i]->next=NULL;
    }
    while(phead!=NULL)//扫描已建立的单链表,将各结点放入与他分数相对应的箱子中
    {
        q=phead->next;
        phead->next=bin[phead->score]->next;
        bin[phead->score]=phead;
        phead=q;
    }
    p=bin[0];
    pointer=p;
    for(i=1;i<M;i++)
    {
        while(p->next!=NULL)
            p=p->next;
        q=bin[i];
        if(q->next!=NULL)
        {
            p->next=q->next;
            p=p->next;
        }
        free(bin[i]);
       
    }
    pointer=pointer->next;
    return pointer;
}
void  main()
{
    slink *L,*head;
    printf("创建链表:\n");
    L=create();
    printf("所建链表为:\n");

    output(L);
   
    printf("一下将进入箱子排序函数");
    head=binsort(L);
    output(head);
}
代码如上!
出现问题如下:在输入数据这块我设置的是输入十组数据分别为f 3,a 4,b 0,c 5,g 3,h 2,m 3,d 4,j 3,k 1
但是当我输入到h 2时候就自动跳出了,还没够十个呢!而且在输入数据这块还有随机负数出现!不知为何!请前辈们指点迷津
搜索更多相关主题的帖子: 箱子 
2010-10-01 10:24
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用jack10141在2010-10-1 10:47:01的发言:

今天没时间看,先顶一个!
呵呵!假期愉快!同祝将来楼下的假期愉快
2010-10-01 11:00
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用vandychan在2010-10-1 19:14:19的发言:

大哥好
呃!折煞小弟了!假期愉快
我的问题还没解决呢哦
2010-10-01 21:41
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用vandychan在2010-10-1 22:15:21的发言:

我看的很晕
呃!呵呵!我写注释了啊!
2010-10-01 23:07
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用王玉雷在2010-10-3 10:52:47的发言:

“scanf("%c%d",&L1->data,&L1->score);scanf("%c%d",&s->data,&s->score);f 3,a 4,b 0,c 5,g 3,h 2,m 3,d 4,j 3,k 1”
问题就出在你的scanf(),和你的实际输入的数的格式不对应:%c和%d之间没有空格,那你输入的两个数之间也不能有空格,比如f和3之间不能有空格。
谢谢你的提议!不过我两种方法都试过了的。还是出现同样的错误
2010-10-03 16:34
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用以中在2010-10-3 12:09:50的发言:

没有创新,对着书链表那章看一下就是,竟然比书上代码还差,真是一代不如一代。
以后的路还长着呢!对吧?我总有一天会羽翼丰满的
2010-10-03 16:35
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用m21wo在2010-10-3 20:25:15的发言:

建单链表是错误的!!!怎么你没插入一个节点就喜欢使它的next域置为NULL,这样是错误的,只需要最后一个节点的next置为NULL
不会吧!应该没错啊!我总觉的我的这个是输入语句有问题!不过我真不知道错哪!谢谢你了
2010-10-03 22:56
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
程序代码:
slink *create()//建立链表
{
    slink *L1,*u,*s;
    int i;
    L1=(slink *)malloc(sizeof(slink));
    scanf("%c%d",&L1->data,&L1->score);
    L1->next=NULL;
    u=L1;
    printf("请在输入%d个结点数据\n",N-1);
    for(i=2;i<=N;i++)
    {
        fflush(stdin);//清除键盘缓存

        s=(slink *)malloc(sizeof(slink));
        scanf("%c%d",&s->data,&s->score);
        s->next=NULL;
        u->next=s;
        u=u->next;
    }
    return L1;
}
哈哈!问题解决了~今天写程序时突然用到了fflush(stdin);才知道当输入字符型数据时要加上fflush(stdin);!正好用到这个程序时输入这快就解决了!不过程序整体还有点缺陷!高兴ing
另外谢谢各位的指点
2010-10-04 16:24
快速回复:请教箱子排序问题!!!
数据加载中...
 
   



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

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