| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1354 人关注过本帖
标题:请教箱子排序问题!!!
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:50 回复次数:22 
请教箱子排序问题!!!
程序代码:
#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
jack10141
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:陕西西安
等 级:小飞侠
威 望:6
帖 子:706
专家分:2271
注 册:2010-8-10
收藏
得分:4 
今天没时间看,先顶一个!

Coding就像一盒巧克力,你永远不会知道你会遇到什么BUG
别跟我说你是不能的,这让我愤怒,因为这侮辱了你的智慧
2010-10-01 10:47
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用jack10141在2010-10-1 10:47:01的发言:

今天没时间看,先顶一个!
呵呵!假期愉快!同祝将来楼下的假期愉快
2010-10-01 11:00
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:4 
以下是引用遮天云在2010-10-1 11:00:34的发言:

呵呵!假期愉快!同祝将来楼下的假期愉快
大哥好

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-01 19:14
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用vandychan在2010-10-1 19:14:19的发言:

大哥好
呃!折煞小弟了!假期愉快
我的问题还没解决呢哦
2010-10-01 21:41
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
我看的很晕

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-01 22:15
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用vandychan在2010-10-1 22:15:21的发言:

我看的很晕
呃!呵呵!我写注释了啊!
2010-10-01 23:07
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
以下是引用遮天云在2010-10-1 23:07:47的发言:

呃!呵呵!我写注释了啊!
加油吧

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-10-01 23:10
王玉雷
Rank: 2
等 级:论坛游民
帖 子:14
专家分:26
注 册:2010-9-19
收藏
得分:10 
“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 10:52
以中
Rank: 3Rank: 3
来 自:长沙
等 级:论坛游侠
帖 子:108
专家分:129
注 册:2010-4-13
收藏
得分:4 
没有创新,对着书链表那章看一下就是,竟然比书上代码还差,真是一代不如一代。

道之所存,师之所存。
2010-10-03 12:09
快速回复:请教箱子排序问题!!!
数据加载中...
 
   



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

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