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