adrianisv Posted June 15, 2014 Report Posted June 15, 2014 Va salut,Avem o lista cu n numere naturale. Lista trebuie impartita in doua liste, una cu numere pare si cealalta cu numere impare.Ce am facut pana acum:#include <iostream>#include <fstream>using namespace std;fstream f("nr.in");struct nod { int info; nod *urm;};nod *p, *u, *pare, *impare;void adaug(nod *&p, nod *&u, int &val) { nod *nou; if(p==NULL) { p=new nod; p->info=val; p->urm=NULL; u=p; } else { nou=new nod; nou->info=val; nou->urm=NULL; u->urm=nou; u=nou; }}void creare(nod *&p, nod *&u, int n) { int i, val; cin>>n; for(i=0;i<n;i++) { cin>>val; adaug(p, u, val); }}void adaugp(nod *&p, int val) { nod *nou; nou=new nod; nou->info=val; nou->urm=p; p=nou;}void separ(nod *p, nod *&pare, nod *&impare) { nod *c=p; while(c) { if(c->info%2==0) adaugp(pare,p->info); else adaugp(impare,p->info); p=p->urm; }}void afisare(nod *p) { nod *c=p; while(c!=NULL){ cout<<c->info<<" "; c=c->urm; } cout<<endl;}int main() { adaug(p,u,val); creare(p,u,n); separ(p,pare,impare); afisare(pare); afisare(impare); return 0;}Idei? Quote
Active Members MrGrj Posted June 15, 2014 Active Members Report Posted June 15, 2014 Asta ar fi o varianta:void split(ListNode *head,ListNode **ptrOddList,ListNode **ptrEvenList){int remainder;int countO=0;int countE=0;ListNode *tempO,*tempE;if (head==NULL) return;else{ (*ptrOddList)=(struct node*)malloc(sizeof(ListNode)); (*ptrEvenList)=(struct node*)malloc(sizeof(ListNode)); while(head!=NULL){ remainder=head->item%2; if(remainder==0){ if(countE>0){ tempE->next=head; tempE=tempE->next; } else tempE=*ptrOddList; tempE->item=head->item; countE++; } else{ if(countO>0){ tempO->next=head; tempO=tempO->next; } else tempO=*ptrOddList; tempO->item=head->item; countO++; } head=head->next; } tempE->next=NULL; tempO->next=NULL; printf("Lista para:"); printNode((*ptrEvenList)); printf("Lista impara:"); printNode((*ptrOddList));}}In loc de printf, pui tu acolo cout<<"Lista para:"; si la fel si pentru cea impara Quote
adrianisv Posted June 16, 2014 Author Report Posted June 16, 2014 Mersi fain, mi-a iesit.#include <iostream>using namespace std;struct nod { int info; nod *urm;};nod *p, *u, *pare, *impare, *pareu, *impareu;void adaug(nod *&p, nod *&u, int &val) { nod *nou; if(p==NULL) { p=new nod; p->info=val; p->urm=NULL; u=p; } else { nou=new nod; nou->info=val; nou->urm=NULL; u->urm=nou; u=nou; }}void creare(nod *&p, nod *&u, int n) { int i, val; cin>>n; for(i=0;i<n;i++) { cin>>val; adaug(p, u, val); }}void adaugp(nod *&p, nod *&u, int val) { nod *nou; nou=new nod; nou->info=val; nou->urm=p; p=nou;}void separ(nod *p, nod *&pare, nod *&impare) { nod *c=p; while(c!=NULL) { // pana cand c != NULL (adica pana la sfarasitul listei) if(c->info%2==0) //daca elementul este par adaugp(pare,pareu,p->info); // il adaugi in lista para else adaugp(impare,impareu,p->info); //daca nu in lista impara c=c->urm;//merga la urmatorul elemnt }}void afisare(nod *p) { nod *c=p; while(c!=NULL){ cout<<c->info<<" "; c=c->urm; } cout<<endl;}int main() { nod *p, *u, *pare, *impare; int val, n; adaug(p,u,val); creare(p,u,n); separ(p,pare,impare); afisare(pare); afisare(impare); return 0;} Quote
Active Members MrGrj Posted June 16, 2014 Active Members Report Posted June 16, 2014 Nu ai pentru ce Quote