用链表队列实现基数排序;

代码:

#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<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<next->data,3)<<endl;
    radix_sort(h,count,tail);
    display(h);
    getchar();
    getchar();
}

 

转载于:https://www.cnblogs.com/593213556wuyubao/archive/2013/01/16/2863398.html

你可能感兴趣的:(用链表队列实现基数排序;)