回 帖 发 新 帖 刷新版面

主题:基数排序(桶排序)

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define MAX 5
typedef struct node
{
int k;
struct node  *next;
} *lnode;

lnode my_input(int *d)
{
lnode head,temp,terminal;
char s[MAX+1];
printf("Input the records:\n");
scanf("%s",s);
head=NULL;
*d=0;
terminal=NULL;
while(s[0]!='0')
{
  temp=(lnode)malloc(sizeof(struct node));
  if (strlen(s)>*d) *d=strlen(s);
  temp->k=atoi(s);
  if (head==NULL)
  {
   head=temp;
   terminal=temp;
   }
   else
   {
    terminal->next=temp;
    terminal=temp;
    }
    scanf("%s",s);
}
    terminal->next=NULL;
    return head;
}

void my_output(lnode h)
{
printf("\n");
while (h!=NULL)
{
  printf("%d ",h->k);
  h=h->next;
  }
getch();
}


lnode bs(lnode head,int d)
{
lnode p,q,h,t;
int i,j,x,radix=1;
  h=(lnode)malloc(10*sizeof(struct node));
  t=(lnode)malloc(10*sizeof(struct node));
for (i=d;i>=1;i--)
{
  for (j=0;j<=9;j++)
  {
   h[j].next=NULL;
   t[j].next=NULL;
  }
   p=head;
   while (p!=NULL)
   {
    x=((p->k)/radix)%10;
    if (h[x].next==NULL)
     {
      h[x].next=p;
      t[x].next=p;
      }
     else
     {
      q=t[x].next;
      q->next=p;
      t[x].next=p;
      }
     p=p->next;
   }
   j=0;
   while (h[j].next==NULL)
    j++;
   head=h[j].next;
   q=t[j].next;
   for (x=j+1;x<=9;x++)
    if (h[x].next!=NULL)
     {
      q->next=h[x].next;
      q=t[x].next;
      }
  q->next=NULL;
  radix*=10;
  printf("\n---------------------\n");
}
return head;
}

void my_free(lnode h)
{
lnode temp=h;
while (temp)
{
  h=temp->next;
  free(temp);
  temp=h;
  }
}

void main()
{
lnode h;
int d;
h=my_input(&d);
h=bs(h,d);
my_output(h);
my_free(h);
}


回复列表 (共2个回复)

沙发

编译通不过,请大侠修改一下

板凳

些不了那么长的

我来回复

您尚未登录,请登录后再回复。点此登录或注册