Jump to content

Recommended Posts

Posted

Se da un sir de numere. Sa se sorteze crescator folosind principul de extragere al cifrelor, si liste.

Extragerea incepe cu ultima cifra a numarului. In functie de aceasta se va pune numarul intr.o lista. Deci vom avea 10liste. Daca pentru un numar nu mai avem de extras cifre, dar exista un altul, p acela il vom pune in lista L0.

ex: nr 153, 65211, la pasul 4 ptr numarul 153 nu avem de extras cifre(are doar 3), asadar il vom pune in L0.


#include<iostream>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

using namespace std;

struct nod

{int info;

nod *urm;};


void creare(nod **prim, nod **ultim,int x)

{ nod *p;

p= new nod;

p->info=x;

p->urm=NULL;

if(*prim==NULL)

{

*prim=*ultim=p;

}

else

{ (*ultim)->urm=p;

*ultim=p;

}

}


void afisare(nod *prim,nod *ultim)

{nod *p=prim;

if(p==NULL)

	cout<<"Lista este vida.";

else

{while(p!=ultim)

{printf("%d-->",p->info);

p=p->urm;}

printf("%d",p->info);}

}

int extragerecif (int x,int nr)

{int i;

 for (i=1;i<nr;i++)

 x=x/10;

 return x%10;

}


int maxim(nod *prim , nod *ultim)

{int max=0,x;

nod *p;

for(p=prim;p!=NULL;p=p->urm)

{x=p->info;

int nr=0;

while(x!=0)

{nr++;

x=x/10;}

if(nr>max)

	max=nr;

}

return max;

}

int nrcif(int x)

{int nr=0;

	while(x!=0)

{nr++;

x=x/10;}

return nr;

}

int main()

{nod *Lp=NULL,*Lu=NULL,*L0p,*L1p,*L2p,*L3p,*L4p,*L5p,*L6p,*L7p,*L8p,*L9p,*L0u,*L1u,*L2u,*L3u,*L4u,*L5u,*L6u,*L7u,*L8u,*L9u;

L0p=L0u=NULL;

L1p=L1u=NULL;

L2p=L2u=NULL;

L3p=L3u=NULL;

L4p=L4u=NULL;

L5p=L5u=NULL;

L6p=L6u=NULL;

L7p=L7u=NULL;

L8p=L8u=NULL;

L9p=L9u=NULL;

cout<<" Creaza lista principala:";

cout<<endl<<"Introduceti numarul de elemente al listei : n= "; cin>>n;

int n,i,x;

for(i=1;i<=n;i++)

{

cout<<"Introduceti elementul al - "<<i<<" -lea al listei";

cin>>x;

creare(&Lp,&Lu,x);}

nod *p;

int parc=maxim(Lp,Lu);

int pas=parc;

while(parc!=0)

{

	for(p=Lp;p!=NULL;p=p->urm)

		if(extragerecif(p->info, pas-parc+1)==0)

			creare(&L0p,&L0u,p->info);

		else

			if(extragerecif(p->info, pas-parc+1)==1)

				creare(&L1p,&L1u,p->info);

			else

				if(extragerecif(p->info, pas-parc+1)==2)

					creare(&L2p,&L2u,p->info);

				else

					if(extragerecif(p->info, pas-parc+1)==3)

						creare(&L3p,&L3u,p->info);

					else

						if(extragerecif(p->info, pas-parc+1)==4)

							creare(&L4p,&L4u,p->info);

						else

							if(extragerecif(p->info, pas-parc+1)==5)

								creare(&L5p,&L5u,p->info);

							else

								if(extragerecif(p->info, pas-parc+1)==6)

									creare(&L6p,&L6u,p->info);

								else

									if(extragerecif(p->info, pas-parc+1)==7)

										creare(&L7p,&L7u,p->info);

									else

										if(extragerecif(p->info, pas-parc+1)==8)

											creare(&L8p,&L8u,p->info);

										else

											if(extragerecif(p->info, pas-parc+1)==9)

												creare(&L9p,&L9u,p->info);

		nod *t=Lp,*u;

		if(L0p!=NULL)

		{u=L0p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L1p!=NULL)

		{u=L1p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L2p!=NULL)

		{u=L2p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L3p!=NULL)

		{u=L3p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L4p!=NULL)

		{u=L4p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L5p!=NULL)

		{u=L5p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L6p!=NULL)

		{u=L6p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L7p!=NULL)

		{u=L7p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L8p!=NULL)

		{u=L8p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		if(L9p!=NULL)

		{u=L9p;

		while(u!=NULL)

			{Lp->info=u->info;

			Lp=Lp->urm;

			u=u->urm;}}

		Lp=t;

		printf("\nLa pasul %d listele sunt:\n",pas-parc+1);

		cout<<"Lista L0: ";

		afisare(L0p,L0u);

		cout<<endl;

		cout<<"Lista L1: ";

		afisare(L1p,L1u);

		cout<<endl;

		cout<<"Lista L2: ";

		afisare(L2p,L2u);

		cout<<endl;

		cout<<"Lista L3: ";

		afisare(L3p,L3u);

		cout<<endl;

		cout<<"Lista L4: ";

		afisare(L4p,L4u);

		cout<<endl;

		cout<<"Lista L5: ";

		afisare(L5p,L5u);

		cout<<endl;

		cout<<"Lista L6: ";

		afisare(L6p,L6u);

	        cout<<endl;

		cout<<"Lista L7: ";

		afisare(L7p,L7u);

		cout<<endl;

		cout<<"Lista L8: ";

		afisare(L8p,L8u);

		cout<<endl;

		cout<<"Lista L9: ";

		afisare(L9p,L9u);

		cout<<endl;

		parc--;

		if(parc!=0)

		{L0p=L0u=NULL;

		L1p=L1u=NULL;

		L2p=L2u=NULL;

		L3p=L3u=NULL;

		L4p=L4u=NULL;

		L5p=L5u=NULL;

		L6p=L6u=NULL;

		L7p=L7u=NULL;

		L8p=L8u=NULL;

		L9p=L9u=NULL;}

}

cout<<endl;

cout<<"Lista finala sortata este: ";

afisare(Lp,Lu);

return 0;

//getch();

}


Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.