Pagini recente » Cod sursa (job #2714887) | Cod sursa (job #691026) | Cod sursa (job #2450446) | Cod sursa (job #395832) | Cod sursa (job #976124)
Cod sursa(job #976124)
#include <iostream>
#include <fstream>
using namespace std;
struct nod
{
int inf;
nod *urm;
} *q,*prim,*primp,*p[10],*pp,*ultim,*ultimp;
int x,n,i,nr,c,b;
void create()
{
primp=new(nod);
ultimp=new(nod);
p[0]=new(nod);
p[1]=new(nod);
p[2]=new(nod);
p[3]=new(nod);
p[4]=new(nod);
p[5]=new(nod);
p[6]=new(nod);
p[7]=new(nod);
p[8]=new(nod);
p[9]=new(nod);
primp->inf=-10;
primp->urm=p[0];
p[0]->inf=-1;
p[0]->urm=p[1];
p[1]->inf=-1;
p[1]->urm=p[2];
p[2]->inf=-2;
p[2]->urm=p[3];
p[3]->inf=-3;
p[3]->urm=p[4];
p[4]->inf=-4;
p[4]->urm=p[5];
p[5]->inf=-5;
p[5]->urm=p[6];
p[6]->inf=-6;
p[6]->urm=p[7];
p[7]->inf=-7;
p[7]->urm=p[8];
p[8]->inf=-8;
p[8]->urm=p[9];
p[9]->inf=-9;
p[9]->urm=ultimp;
ultimp->urm=NULL;
ultimp->inf=-11;
}
int main(void)
{
FILE * f;
f=fopen("algsort.in","r");
ofstream g("algsort.out");
fscanf(f,"%d",&n);
create();
x=1;
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
c=nr%10;
pp=new(nod);
pp->inf=nr;
pp->urm=p[c]->urm;
p[c]->urm=pp;
p[c]=pp;
}
b=0;
while (b==0)
{
x=x*10;
b=1;
prim=primp;
ultim=ultimp;
create();
q=prim->urm;
delete(prim);
while (q!=ultim)
{
while ((q->inf<0)&&(q->inf>-10))
{
prim=q;
q=q->urm;
delete(prim);
}
if (q!=ultim)
{
nr=q->inf;
c=(nr/x)%10;
if ((b==1)&&(c!=0))
b=0;
pp=new(nod);
pp->inf=nr;
pp->urm=p[c]->urm;
p[c]->urm=pp;
p[c]=pp;
prim=q;
q=q->urm;
delete(prim);
}
}
delete(q);
}
prim=primp;
ultim=ultimp;
q=prim->urm;
delete(prim);
while (q!=ultim)
{
while ((q->inf<0)&&(q->inf>-10))
{
prim=q;
q=q->urm;
delete(prim);
}
if (q!=ultim)
{
g<<q->inf<<' ';
prim=q;
q=q->urm;
delete(prim);
}
}
delete(q);
g.close();
return 0;
}