mihaispr
Administrator
 Inregistrat: acum 17 ani
Postari: 2142
|
|
//Afisati el.pare dintr-o lista dublu inlantuita din intervalul [a,b]
#include<stdio.h> #include<conio.h> #include<process.h> #include<alloc.h>
struct nod { int x; struct nod* pred,* next; }*l;
int i,n,opt,x,a,b;
int vida() { if (l==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; if (l) l->pred=aux; l=aux; } return l; }
void afisare_SD(struct nod *l) {struct nod *c; if (!l) printf("\n Lista este vida:" ); else {for(c=l;c;c=c->next) printf("%d ",c->x); } printf("\n" ); }
struct nod* stergere(int p) {struct nod* aux,* c; if(!l) printf("Lista vida:" ); else if(p==1) {aux=l; l->next->pred=NULL; l=l->next; } else {for(c=l,i=1;i<=p-2;i++,c=c->next) aux=c->next; c->next=c->next->next; if(c->next) c->next->pred=c; } free(aux); return l; }
struct nod *stergere_div5(struct nod *l) {struct nod *c,*aux;int s=1; if (!l) printf("\n Lista este vida:" ); else { do{ //sterg primul element daca este divizibil cu 5, in mod repetat, pana primul element este gasit impar c=l; if((c->x%5==0)&&(c->x>=a)&&(c->x<=b)){//daca primul elem este divizibil cu 5 printf("\nsterg elem %d",c->x); aux=l; l=l->next; if(l) l->pred=NULL; free(aux); } }while((l)&&(l->x%5==0)&&(c->x>=a)&&(c->x<=b)); if(l) while(s==1) { s=0; c=l; while((s==0)&&(c->next)){// de la primul la penultimul if(((c->next->x)%5==0)&&(c->next->x>=a)&&(c->next->x<=b)) { printf("\nsterg elem %d\n",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) { printf("nr.de noduri" ); scanf("%d",&n); printf("a=" ); scanf("%d",&a); do{ printf("b=" ); scanf("%d",&b); }while(a>b); l=creare(l); afisare_SD(l); l=stergere(p); l=stergere_div5(l); afisare_SD(l); getch(); }
|
|