mihaispr
Administrator
 Inregistrat: acum 18 ani
Postari: 2142
|
|
/*Se citesc mai multe nr.memorate intr-o lista circulara.Sfarsitul listei este marcat prin citirea unei valori=suma ultimelor 2 nr.introduse. Sa se realizeze un subprogram recursiv pt. afisare in ordinea inversa introducerii*/
#include <conio.h> #include <stdio.h> #include <alloc.h>
struct nod {int x; struct nod *next; }*l,*q,*linv,*qinv;
int i,n,start,stop;//daca este primul, ult element
struct nod* insert(int x){ struct nod*aux; aux= (struct nod*) malloc (sizeof(struct nod)); aux->x=x; aux->next=l; if (start) q=aux; l=aux; return l; }
struct nod* creare() { int v1,v2,v3; l=NULL;start=1; printf("Info.= " ); scanf("%d",&v1); l=insert(v1); start=0; stop=0; printf("Info.= " ; scanf("%d",&v2); l=insert(v2); printf("Info.= " ); scanf("%d",&v3); while(stop==0){ if(v3==v1+v2) stop=1; l=insert(v3); v1=v2; v2=v3; printf("Info.= " ); scanf("%d",&v3); } q->next=l; return l; }
void afisare(struct nod*l) {struct nod*c; c=l; printf("%d ",c->x); c=l->next; while (c!=l) { printf("%d ",c->x); c=c->next; } printf("\n" ); }
struct nod* inversa(struct nod* l) {struct nod*aux,*q,*c; int v; if(l==NULL) linv=NULL; else{ linv=insert(l->x); qinv=linv; for(c=l->next;c!=l;c=c->next) linv=insert(c->x); qinv->next=linv; } return linv; }
void main() { l=creare(); afisare(l); linv=inversa(l); afisare(linv); getch(); }
|
|