0% found this document useful (0 votes)
49 views18 pages

Liste Simplu Inlantuite-Programe

1. The document provides code for creating and manipulating simply linked lists in C. It includes functions for adding, inserting, deleting and extracting nodes from linked lists. 2. Various functions are presented for different insertion operations like adding a node after the first node with a given value, adding after the last node with a given value, adding between two consecutive nodes, and adding into an ordered list. 3. Deletion functions include removing the last instance of a value, removing all instances of a value, removing even values, and extracting nodes before, after or at a given position.

Uploaded by

Adriana Scarlat
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views18 pages

Liste Simplu Inlantuite-Programe

1. The document provides code for creating and manipulating simply linked lists in C. It includes functions for adding, inserting, deleting and extracting nodes from linked lists. 2. Various functions are presented for different insertion operations like adding a node after the first node with a given value, adding after the last node with a given value, adding between two consecutive nodes, and adding into an ordered list. 3. Deletion functions include removing the last instance of a value, removing all instances of a value, removing even values, and extracting nodes before, after or at a given position.

Uploaded by

Adriana Scarlat
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 18

LISTE SIMPLU INLANTUITE CREARE LISTA #include<stdlib.h> #include<malloc.

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

tnod* adaug(tnod *cap,int a, int b) { tnod *p,*q,*t; p=(tnod*)malloc(sizeof(tnod)); p->inf=a;

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; }

apel: q=adaug(cap,in,a); parc(q);

3. /adaugare intre 2 noduri consecutive

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.

tnod* cred(tnod *cap,float a) {tnod *p,*q,*t;

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

tnod *ins_in_ul(tnod *cap,int a, int b) { tnod *p,*q,*t; p=(tnod*)malloc(sizeof(tnod));

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;

} else { p->next=t->next; t->next=p; } } return cap; }

7. //Sa se adauge informatia a la inceputul unei liste.

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

1. //Sa se stearga ultima aparitie a inf a-->OK

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

void sterg_par(tnod **cap)

{ 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; }

//alta varianta mai scurta

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;

p=p->next; } if(p->next->inf==a) { t->next=p->next; free(p); cod=1; } } } else cod=0; return cod; }

//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");

}} 7. //sa se extraga inf de pe poz n-->OK

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

{ t->next=NULL; free(p); cod=1; } else cod=0; }

} else cod=0; return cod; }

You might also like