1) Să se scrie un tip structură pentru reprezentarea unei liste înlănţuite, prin intermediul căreia se vor reţine valori textuale pentru afişarea unui mesaj. Lista va conţine 3 elemente (rezolvare...)
2) Să se scrie un tip structură pentru reprezentarea unei liste înlănţuite, prin intermediul căreia se vor reţine valori textuale pentru afişarea unui mesaj. Toata referirea listei sa se faca folosind un singur element (rezolvare...)
3) Se va scrie un program pentru determinarea principalelor operaţii pe o listă înlănţuită (asimetrică) ce conţine numere întregi.
Se vor dezvolta următoarele operaţii: (rezolvare...)
- generarea (initializarea) unei liste
- lungimea (numarul de elemente) dintr-o lista
- adaugarea unui element intr-o lista: prin fata listei, prin spatele listei, dupa un element dat
- modificarea valorii unui anumit element al listei
- stergerea unui element din lista
- stergerea primului element
- stergerea ultimului element
- stergerea unui anumit element
- afisarea listei
- distrugerea (dealocarea) listei.
C: Lista - stiva si coada - aplicatii rezolvate
Rezolvari
#include<stdio.h> #include<conio.h> #include<stdlib.h> //scriem o structura pentru reprezentarea unul nod (element) al listei struct nod_lista{ char* inf; nod_lista* next; }; //construim un tip propiu pentru reprezentarea unui nod de lista pe baza structurii definite anterior typedef struct nod_lista nod; //functia principala in rulare void main() { nod* a; //primul element al listei a=(nod*)malloc(sizeof(nod)); a->inf="Salut"; //continutul primului element nod* b; //al doilea element al listei b=(nod*)malloc(sizeof(nod)); a->next=b; //urmatorul element al primului element b->inf="limbajul"; nod* c; //al treilea element al listei c=(nod*)malloc(sizeof(nod)); b->next=c; c->inf="C/C++!"; c->next=NULL; //sau c->next=0; while(a) //a!=NULL sau a!=0 { printf("%s ",a->inf); a=a->next; } getch(); }
#include<stdio.h> #include<conio.h> #include<stdlib.h> //scriem o structura pentru reprezentarea unul nod (element) al listei struct nod_lista{ char* inf; nod_lista* next; }; //construim un tip propiu pentru reprezentarea unui nod de lista pe baza structurii definite anterior typedef struct nod_lista nod; //functia principala in rulare void main() { nod* a; //primul element al listei a=(nod*)malloc(sizeof(nod)); a->inf="Salut"; //continutul primului element a->next=(nod*)malloc(sizeof(nod)); a->next->inf="limbajul"; //urmatorul element al primului element a->next->next=(nod*)malloc(sizeof(nod)); a->next->next->inf="C/C++!"; a->next->next->next=NULL; while(a) //a!=NULL sau a!=0 { printf("%s ",a->inf); a=a->next; } getch(); }
#include<stdio.h> #include<conio.h> #include<stdlib.h> //definirea unui tip structura pentru reprezentarea unui nod al listei typedef struct nod{ int val; nod *next; }nod; //initializarea (generarea) unei liste nod* init(nod *cap); //lungimea - nr. de elemente din lista int lung(nod *cap); //adaugarea unui element prin fata listei nod* adFata(nod *cap, int inf); //adaugarea unui element prin spatele listei nod* adSpate(nod *cap, int inf); //adaugarea unui element pe o anumita pozitie in lista nod* adInterior(nod *cap,int valpoz, int valnou); //modificarea unei anumite valori din lista (daca valoarea ce se doreste //a se modifica apare de mai multe ori, se va modifica prima intalnita) nod* modify(nod *cap, int valvechi, int valnou); //stergerea unui element prin fata listei nod* stergeFata(nod *cap); //stergerea unui anumit element din lista nod* stergeVal(nod *cap, int inf); //stergerea unui element prin spatele listei nod* stergeSpate(nod *cap); //afisarea componentelor listei void afisList(nod *cap); //distrugerea (dealocarea) listei void destroy(nod *cap); //initializarea (generarea) unei liste nod* init(nod *cap) { cap=NULL; return cap; } //lungimea - nr. de elemente din lista int lung(nod *cap) { nod *aux; //element de parcurgere a listei int nr=0; aux=cap; while(aux!=NULL) { nr++; aux=aux->next; } return nr; } //adaugarea unui element prin fata listei nod* adFata(nod *cap, int inf) //inf - o valoare numerica dorita ce va fi introdusa la utilizare { nod *temp; //elementul auxiliar in care se va face initial adaugarea temp=(nod*)malloc(sizeof(nod)); temp->val=inf; //se populeaza elementul de valoare in cadrul listei, ramanand a se popula si cel de legatura //se face testarea daca mai sunt elemente in lista if (cap==NULL) //situatia in care lista este vida { temp->next=NULL; cap=temp; } else //situatia in care mai sunt elemente in lista { temp->next=cap; cap=temp; } return cap; } //adaugarea unui element prin spatele listei nod* adSpate(nod *cap, int inf) { nod *temp, *aux; //aux - folosit pentru parcurgerea pe lista temp=(nod*)malloc(sizeof(nod)); temp->val=inf; //se face testarea daca mai sunt elemente in lista if (cap==NULL) //situatia in care lista este vida { temp->next=NULL; cap=temp; } else //situatia in care mai sunt elemente in lista { aux=cap; while(aux->next!=NULL) aux=aux->next; aux->next=temp; temp->next=NULL; } return cap; } //adaugarea unui element pe o animita pozitie in lista nod* adInterior(nod *cap, int valpoz, int valnou) { nod *temp, *aux; temp=(nod*)malloc(sizeof(nod)); temp->val=valnou; if (cap==NULL) { temp->next=NULL; cap=temp; } else { aux=cap; while((aux->next!=NULL)&&(aux->val!=valpoz)) aux=aux->next; if(aux->val==valpoz) { temp->next=aux->next; aux->next=temp; } else printf("\nValoarea %d nu se afla in lista\n", valpoz); } return cap; } /*modificarea unei anumite valori din lista (daca valoarea ce se doreste a se modifica apare de mai multe ori, se va modifica prima intalnita)*/ nod* modify(nod *cap, int valvechi, int valnou) { nod *aux; aux=cap; while((aux!=NULL)&&(aux->val!=valvechi)) aux=aux->next; if(aux!=NULL) aux->val=valnou; return cap; } //stergerea unui element prin fata listei nod* stergeFata(nod *cap) { nod *temp; if (cap==NULL) printf("\nLista este vida\n"); else { temp=cap; cap=cap->next; free(temp); } return cap; } //stergerea unui element prin spatele listei nod* stergeSpate(nod *cap) { nod *temp,*aux; if (cap==NULL) printf("\nLista este vida\n"); else if (cap->next==NULL) { free(cap); } else { temp=cap; aux=temp->next; while(aux->next!=NULL) { aux=aux->next; temp=temp->next; } temp->next=NULL; free(aux); } return cap; } //stergerea unui anumit element din lista nod* stergeVal(nod *cap, int inf) { nod *temp, *aux; if (cap==NULL) printf("\nLista este vida\n"); else if(cap->val==inf) { temp=cap; cap=cap->next; free(temp); } else if(cap->next==NULL) printf("\nValoarea de sters nu se afla in lista\n"); else { temp=cap; aux=temp->next; while((aux!=NULL)&&(aux->val!=inf)) { aux=aux->next; temp=temp->next; } if(aux!=NULL) { temp->next=aux->next; free(aux); } } return cap; } //afisarea componentelor din lista void afisList(nod *cap) { nod *aux; aux=cap; printf("Elementele listei sunt: "); while (aux!=NULL) { printf("%d ", aux->val); aux=aux->next; } } //distrugerea (dealocarea) listei void destroy(nod *cap) { nod *temp; printf("\nSe distruge lista\n"); while(cap!=NULL) { temp=cap; cap=cap->next; free(temp); } } //functia principala in rulare void main() { nod *cap=NULL; int inf,poz; cap=init(cap); //initializarea listei //introducerea elementelor in lista printf("Introduceti noduri in lista. Terminati cu zero: "); scanf("%d",&inf); while(inf!=0) //introducerea se va incheia cu elementul "0" { cap=adSpate(cap,inf); //am ales adaugarea prin spate scanf("%d",&inf); } afisList(cap); //afisarea componentelor listei //adaugare de elemente prin folosirea optiunii de adaugare prin fata printf("\nIntroduceti un element pt a-l adauga pe prima pozitie: "); scanf("%d",&inf); cap=adFata(cap,inf); afisList(cap); //afisarea componentelor listei //exemplificarea adaugarii prin interior printf("\nIntroduceti valoarea dupa care doriti sa inserati: "); scanf("%d",&poz); printf("Introduceti un element pt a-l adauga dupa valoarea %d: ",poz); scanf("%d",&inf); cap=adInterior(cap,poz,inf); afisList(cap); //afisarea componentelor listei //exemplificarea optiunii de modificare a unei valori din lista printf("\nIntroduceti valoarea pe care doriti sa o modificati: "); scanf("%d",&poz); printf("Introduceti noua valoare: "); scanf("%d",&inf); cap=modify(cap,poz,inf); afisList(cap); //afisarea componentelor listei //stergerea primului element din lista printf("\n\nVom sterge primul element din lista - "); cap=stergeFata(cap); afisList(cap); //afisarea componentelor listei //stergerea prin spatele listei printf("\nVom sterge ultimul element din lista - "); cap=stergeSpate(cap); afisList(cap); //stergerea unei anumite valori din lista printf("\nIntroduceti valoarea pe care doriti sa o stergeti: "); scanf("%d",&inf); cap=stergeVal(cap,inf); afisList(cap); //distrugerea (dealocarea) listei printf("\n\nVom distruge lista"); destroy(cap); getch(); }