#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int a[60]; struct linkque { int data; linkque* link; }; void main() { linkque *first=new linkque; linkque *que; linkque *current=first; srand((unsigned)time(NULL)); first->data=rand()%1000; first->link=NULL; for (int i=0;i<99;i++) { que=new linkque; que->data=rand()%1000; que->link=NULL; current->link=que; current=que; } linkque**top=new linkque*[10]; linkque**bottom=new linkque*[10]; for (int i=0;i<10;i++) { top[i]=NULL; bottom[i]=NULL; } int count=1,b; while(count<=3) { while(first!=NULL) { switch(count) { case 1:b=first->data%10;break; case 2:b=(first->data/10)%10;break; case 3:b=first->data/100;break; } if (bottom[b]==NULL) { bottom[b]=top[b]=first; } else { top[b]->link=first; top[b]=first; } first=first->link; top[b]->link=NULL; } for (int i=0;i<10;i++) { if (first==NULL&&bottom[i]!=NULL) { first=bottom[i]; current=top[i]; } else if (first!=NULL&&bottom[i]!=NULL) { current->link=bottom[i]; current=top[i]; } bottom[i]=NULL; } count++; } while(first!=NULL) { std::cout<<first->data<<std::endl; first=first->link; } system("pause"); }