mihaispr
Administrator
 Inregistrat: acum 17 ani
Postari: 2142
|
|
//Stergerea el.pare pt. o lista dublu inlantuita
#include<stdio.h> #include<conio.h> #include<alloc.h>
struct nod { int x; struct nod* pred,* next; }*l;
int i,n,x,a,b;
int vida() { if ((l->pred==NULL)&&(l->next==NULL)) return 1; else return 0; }
struct nod* creare(struct nod* l) {struct nod *aux;int a; l=NULL; for(i=n;i>=1;i--) { printf("inform.nodului %d=",i); scanf("%d",&a); aux= (struct nod* )malloc(sizeof(struct nod)); aux->x=a; aux->pred=NULL; aux->next=l; l->pred=aux; l=aux; } return l; }
void afisare_SD(struct nod *l) {struct nod *c; printf("\nLista este " ); if (!l) printf("vida:" ); else {for(c=l;c;c=c->next) printf("%d ",c->x); } }
struct nod *stergere_pare(struct nod *l) {struct nod *c,*aux;int s=1; if (vida()) printf("\n Lista este vida:" ); else { do{ //sterg primul element daca este par, in mod repetat, pana primul element este gasit impar c=l; if(c->x%2==0){//daca primul elem este par printf("\nsterg elem %d",c->x); aux=l; l=l->next; if(l) l->pred=NULL; free(aux); } }while((l)&&(l->x%2==0)); if(l) while(s==1) { s=0; c=l; while((s==0)&&(c->next)){// de la primul la penultimul if((c->next->x)%2==0) { printf("\nsterg elem %d",c->next->x); aux=c->next; c->next=c->next->next; if(c->next) c->next->pred=c; free(aux); s=1;//s-a facut o stergere } c=c->next; } } } return l; }
void main(void) {clrscr(); printf("nr.de noduri" ); scanf("%d",&n); l=creare(l); afisare_SD(l); l=stergere_pare(l); afisare_SD(l); getch(); }
|
|