Proble.ma c++

Discutii despre tot ce nu se incadreaza in celelalte categorii.

Moderators: Moderatori ajutatori, Moderatori

Post Reply
User avatar
bogdhy
Membru, skill +1
Membru, skill +1
Posts: 361
Joined: 29 Dec 2010, 16:50
Detinator Steam: Da
Has thanked: 27 times
Been thanked: 19 times

14 Jun 2012, 00:48

Buna seara extreamcs,

Am o problema de informatica care imi da ceva batai de cap, este vorba de doua liste simplu inlantuite:

1. Prima lista se citeste de la tastatura si va avea n nod-uri .
2. A doua lista va fi formata din nod-urile primei liste dar in ordine crescatoare .

Si eu m-am gandit sa o rezolv in felul urmator:
1. Creez prima lista.
2. Aflu minimul din prima lista.
3. Adauga minimul din prima lista in a doua lista.
4. Elimin nod-ul care contine minim-ul din prima lista si revin la pasul 2 cat timp lista nu este vida .

Precizez ca nu ma pot folosi decat de prima lista, nu pot utiliza vectori . Si mai jos se afla rezolvarea scrisa de mine la aceasta problema si as vrea daca se poate sa va uitati peste ea si sa imi spuneti unde am gresit ca eu nu vad .

Code: Select all

#include<iostream.h>
struct nod
{int inf;
nod* adr;};
nod* cap; nod* cap2;
int n;

void creare(nod* &cap , int n)
{nod* a= new nod;int i;
nod* ultim=new nod;
cout<<"Dati informatia: "; cin>>a->inf;
a->adr=0;
ultim=a;
cap=a;
for(i=2;i<=n;i++)
{nod* a=new nod;
cout<<"Dati informatia: "; cin>>a->inf;
a->adr=0;
ultim->adr=a;
ultim=a;}}

void afisare(nod* cap)
{nod* a = cap;
while(a)
{cout<<a->inf<<" "; a=a->adr;}}

void adaugaresf(nod* &cap,int val)
{nod* a=new nod;
a->inf=val;
a->adr=0;
if(cap)
	cap=a;
else
{	nod* c=cap;
while(c->adr)
	c=c->adr;
c->adr=a;}}


int minim(nod* cap)
{nod* a=cap; int min=a->inf;
a=a->adr;
while(a)
	if(min>a->inf)
	{min=a->inf;
	a=a->adr;}
	else
	a=a->adr;
return min;	
}

void elimina(nod* p)
{nod* a=p->adr;
p->adr=p->adr->adr;
delete a;
}

void eliminamin(nod* &cap,int min)
{nod* a=cap;
while((a->adr)&&(a->adr->inf!=min))
	a=a->adr;
if(a->adr)
	elimina(a);
}

int main()
{cout<<"n="; cin>>n; int i, min;
creare(cap,n);
afisare(cap); cout<<endl;
for(i=1;i<=n;i++)
{min=minim(cap);
adaugaresf(cap2,min);
eliminamin(cap,min);}
afisare(cap2);
}
Cine ma ajuta are un multumesc .
Image
Post Reply

Return to “Discutii generale”

  • Information