代码:
#include "iostream" #include "cmath" #define null 0 using namespace std; typedef struct node{ int data; struct node *next; }Link; //定义链表结点 Link *createLink(Link *head){ Link*tail; head=tail=(Link*)malloc(sizeof(Link)); head->next=null; int data; cin>>data; Link *p; while(data!=0){ p=(Link*)malloc(sizeof(Link)); p->data=data; p->next=null; tail->next=p; tail=tail->next; cin>>data; } return head; }//创建链表 void display(Link *head){ Link*p=head->next; while(p!=null){ cout<<p->data<<" "; p=p->next; } cout<<endl; }//显示链表 int number(int data,int n){ int temp; temp=data/(int)pow((double)10,n-1); return temp%10; }//返回一个数的某个位的数 void radix_sort(Link*h,Link*count[],Link*tail[]){ int i; int j; int x; Link *p; Link*temp; for(i=1;i<=3;i++){ p=h->next; while(p!=null){ x=number(p->data,i); temp=p->next; tail[x]->next=p; tail[x]=tail[x]->next; tail[x]->next=null; p=temp; } p=h; for(j=0;j<=9;j++){ if(count[j]!=tail[j]){ p->next=count[j]->next; p=tail[j]; tail[j]=count[j]; tail[j]->next=null; } } } } void main(){ Link *h=null; Link*count[10]; Link*tail[10]; Link*p; for(int i=0;i<10;i++){ p=(Link*)malloc(sizeof(Link)); p->next=null; count[i]=tail[i]=p; } h=createLink(h); display(h); cout<<number(h->next->data,3)<<endl; radix_sort(h,count,tail); display(h); getchar(); getchar(); }