Pagini recente » Cod sursa (job #2367369) | Cod sursa (job #1943483) | Cod sursa (job #1328234) | Cod sursa (job #3161334) | Cod sursa (job #1256466)
#include<fstream>
using namespace std;
ifstream f ("radixsort.in");
ofstream g ("radixsort.out");
struct nod
{
int nr;
nod *adr;
};
int N,A,B,C;
nod *prim, *ultim, *primu, *Ci[10], *Cf[10];
void push(int x, int cif)
{
nod *nou, *u;
if(Ci[cif]==NULL)
{
Ci[cif] = new nod;
Ci[cif]->nr=x;
Ci[cif]->adr = NULL;
Cf[cif]= Ci[cif];
}
else
{
nou = new nod;
nou->nr= x;
Cf[cif]->adr=nou;
Cf[cif]=nou;
Cf[cif]->adr= NULL;
}
}
void pop(int cif)
{
nod *p, *nou;
while(Ci[cif] != NULL)
{
if(prim==NULL)
{
prim =new nod;
prim->nr=Ci[cif]->nr;
prim->adr=NULL;
ultim=prim;
}
else
{
nou =new nod;
nou->nr=Ci[cif]->nr;
ultim->adr=nou;
ultim=nou;
nou->adr=NULL;
}
p=Ci[cif];
Ci[cif]=Ci[cif]->adr;
delete p;
}
}
void citire()
{
int x;
nod *nou;
f>>N>>A>>B>>C;
while(N)
{
if(prim==NULL)
{
prim =new nod;
prim->nr=B;
prim->adr=NULL;
ultim=prim;
}
else
{
nou =new nod;
nou->nr=(A*x+B)%C;
ultim->adr=nou;
ultim=nou;
nou->adr=NULL;
}
N--;
x=ultim->nr;
}
}
void copie()
{
nod *nou, *p, *ultimu;
p=prim;
primu=NULL;
while(p)
{
if(primu==NULL)
{
primu =new nod;
primu->nr=p->nr;
primu->adr=NULL;
ultimu=primu;
}
else
{
nou =new nod;
nou->nr=p->nr;
ultimu->adr=nou;
ultimu=nou;
nou->adr=NULL;
}
p=p->adr;
}
}
void afis_provizoriu()
{
nod *p;
p=primu;
while(p)
{
g<<p->nr<<" ";
for(int i=1;i<=10;i++)
p = p ->adr;
}
}
void rezolva()
{
int cif, pu=1, ok;
nod *p, *nou, *k;
citire();
do
{
ok=0;
copie();
while(prim != NULL)
{
cif=((prim->nr)/pu)%10;
if(prim->nr/pu !=0)
ok=1;
push(prim->nr, cif);
p=prim;
prim = prim ->adr;
delete p;
}
if(pu==1000)
{
pu++;
pu--;
}
if(ok)
{
for(cif =0; cif<=9;cif++)
pop(cif);
}
pu=pu*10;
}
while(ok);
}
int main ()
{
rezolva();
afis_provizoriu();
return 0;
}