Liste Simplu Inlantuite-Programe
Liste Simplu Inlantuite-Programe
h> typedef struct nod { int inf; nod *next; } tnod; void adau(tnod **cap,float a) { tnod *p,*q; p=(tnod*)malloc(sizeof(tnod)); p->inf=a; if((*cap)==NULL) { p->next=NULL; *cap=p; } else {q=*cap; while(q->next!=NULL) q=q->next; p->next=NULL; q->next=p; } } //parcurgerea listei void parc(tnod *cap) { tnod *p; p=cap; while(p!=NULL) { printf("%i\t", p->inf);
p=p->next; }
printf("\n");} void main() { int n, info,i,in,a; tnod *p,*r,*q; tnod *cap=NULL; printf("\nNr de noduri "); scanf("%i", &n); printf("\nintroduceti informatiile "); for(i=0;i<n;i++) { scanf("%i", &info); adau(&cap,info); } printf("\nlista rezultata "); if(cap==NULL) printf("\nlista vida"); else parc(cap); getch(); } INSERARI 1.//Sa se adauge informatia a dupa primul nod din lista cu inf b //Daca b nu exista nu se adauga nimik. int add(tnod *cap,float a, float b) {tnod *p,*q;
int er=0; if(cap!=NULL) { p=cap; while((p!=NULL)&&(p->inf!=b)) p=p->next; if(p!=NULL) { q=(tnod*)malloc(sizeof(tnod)); q->inf=a; q->next=p->next; p->next=q; er=1; } } return er; }
apel: er=add(cap,in,a); if(er==1) parc(cap); else printf("nu s-a adauf"); 2. //Sa se adauge informatia a dupa ultimul nod cu informatia b. Daca b nu exista, se adauga la sfarsitul listei
if(cap==NULL) { p->next=NULL; cap=p; } else {q=cap; t=NULL; while(q->next!=NULL) { if(q->inf==b) t=q; q=q->next; } if((t==NULL)||(q->inf==b)) { p->next=NULL; q->next=p; } else { p->next= t->next; t->next=p;
} } return cap; }
tnod* inser(tnod *cap, int a) { tnod *p,*q; q=cap; if(cap!=NULL) while(q->next!=NULL) { p=(tnod*)malloc(sizeof(tnod)); p->inf=a; p->next=q->next; q->next=p; q=q->next->next; } return cap; }
apelul: q=inser(cap,in); if(q!=NULL) parc(q); else printf("lista vida"); 4. //sa se adauge informatia a intr-o lista ordonata crescator.
p=(tnod*)malloc(sizeof(tnod)); p->inf=a; if(cap==NULL) { p->next=NULL; cap=p; } else if(p->inf<cap->inf) { p->next=cap; cap=p; } else {q=cap; t=NULL; while((q!=NULL)&&(q->inf<p->inf)) {t=q; q=q->next;} if(t->next==NULL) {p->next=NULL; t->next=p; } else { p->next=t->next; t->next=p; } } return cap; } 5. //inserare inainte de primul b //daca b nu exitsa, se insereaza la sfarsit.
tnod* inser_in_pr(tnod *cap, float a, float b) { tnod *p, *q; p=(tnod*)malloc(sizeof(tnod)); p->inf=a; //gasim locul unde se face adaugarea if((cap)==NULL) {p->next=NULL; cap=p;
} else { q=cap; while((q->next!=NULL)&&(q->next->inf!=b)) q=q->next; //daca b nu exista in lista,a se adauga la sfarsit. if(q->next==NULL) { q->next=p; p->next=NULL; } //informatia se afla in q->next else { p->next=q->next; q->next=p; } } return cap; }
apel: q=inser_in_pr(cap,in,a); parc(q); 6. //adaugare inainte de ultimul nod cu informatia b. Daca acest nod nu exista, inserarea se face la sfarsitul listei
p->inf=a; if(cap==NULL) { p->next=NULL; cap=p; } else if(cap->inf==b) { p->next=cap; cap=p; } else {q=cap; t=NULL; while(q->next!=NULL) { if(q->next->inf==b) t=q; q=q->next; } if(t==NULL) { q->next=p; p->next=NULL;
tnod *inserare(tnod *cap, int a) { tnod *p; p=(tnod*)malloc(sizeof(tnod)); p->inf=a; p->next=cap; cap=p; return cap; } 8. // Sa se adauge informatia a la sfarsitul listei.
void adau(tnod **cap,float a) { tnod *p,*q; p=(tnod*)malloc(sizeof(tnod)); p->inf=a; if((*cap)==NULL) { p->next=NULL; *cap=p; } else {q=*cap; while(q->next!=NULL) q=q->next; p->next=NULL; q->next=p; } } STERGERI
void sterg_ul(tnod **cap, int a) { tnod *q, *t; if((*cap)!=NULL) { q=*cap; t=NULL; while(q->next!=NULL) { if(q->next->inf==a) t=q; q=q->next; } if(t!=NULL) if(t->next->next!=NULL) { free(t->next); t->next=NULL; } else { q=t->next; t->next=q->next; free(q); } else if((*cap)->inf==a) { q=*cap; *cap=q->next; free(q);
} } else printf("nu exista niciun nod"); } 2. //sa se stearga toate aparitiile lui a din lista-->OK
void sterg(tnod **cap,int a) { tnod *p,*q; if(*cap) {p=*cap; while(p->next!=NULL) if(p->next->inf==a) { q=p->next; p->next=q->next; free(q); } else p=p->next; if((*cap)->inf==a) { p=*cap; (*cap)=p->next; free(p); } } } 3. //stergerea informatiilor pare-->OK
{ tnod *p, *q; if(*cap) { p=*cap; while(p->next!=NULL) if((p->next->inf)%2==0) { q=p->next; p->next=q->next; free(q); } else p=p->next; if(((*cap)->inf)%2==0) { p=*cap; (*cap)=p->next; free(p); } } } 4. //Sa se stearga informatia de pe pozitii pare.
void sterg(tnod **cap) { tnod *p, *q; if(((*cap)!=NULL)&&(*cap)->next!=NULL) { q=*cap; while(q->next!=NULL) if(q->next->next!=NULL)
{ p=q->next; q->next=p->next; q=p->next; free(p); } else if(q->next!=NULL) if(q->next->next==NULL) { p=q->next; q->next=NULL; free(p); } } } 5. //sa se extraga inf aflata dupa primul a-->OK
int extrag_dp(tnod **cap, int a) { tnod *p,*q; int cod; cod=0; if((*cap)!=NULL) { p=*cap; while((p->next!=NULL)&&(p->inf!=a)) p=p->next; if(p->inf==a) if(p->next!=NULL) if(p->next->next!=NULL) { q=p->next;
p->next=q->next; free(q); cod=1; } else { q=p->next; p->next=NULL; free(q); cod=1; } else cod=0; else cod=0; } else cod=0; return cod; }
void sterg(tnod *cap,int a) { tnod *p,*q; if((cap!=NULL)&&(cap->next!=NULL)) {q=cap; while((q!=NULL)&&(q->inf!=a)) q=q->next; if(q!=NULL)
if(q->next!=NULL) {p=q->next; q->next=p->next; free(p); } } } 6. //sa se extraga informatia aflata inaintea primului a
int extrag_in(tnod **cap,int a) { tnod *p,*t; int cod; cod=0; t=NULL; if((*cap)!=NULL) { if((*cap)->inf==a) cod=0; else if((*cap)->next->inf==a) {p=*cap; *cap=p->next; free(p); cod=1; } else { p=*cap; while((p->next!=NULL)&&(p->next->inf!=a)) { t=p;
//alta varianta
void sterg(tnod **cap,int a) { tnod *p, *q,*t; if((*cap)!=NULL) if((*cap)->next->inf==a) { p=*cap; *cap=p->next; free(p);} else { q=*cap; t=NULL; while((q->next!=NULL)&&(q->next->inf!=a)) { t=q; q=q->next; } if((q->next!=NULL)&&(q->next->inf==a)) { t->next=q->next; free(q); } else printf("\nnu\t");
int extrag_poz(tnod **cap, int n) { int cod=0; tnod *p, *t; int i=1; if((*cap)!=NULL) { p=*cap; t=NULL; if(n==1) { *cap=p->next; free(p); cod=1; } else { while((p->next!=NULL)&&(i<n)) { t=p; p=p->next; i++; } if(i==n) if(p->next!=NULL) { t->next=p->next; free(p); cod=1; } else