请教箱子排序问题!!!
程序代码:#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时候就自动跳出了,还没够十个呢!而且在输入数据这块还有随机负数出现!不知为何!请前辈们指点迷津










