1 / 23

Structuri de date fundamentale

Structuri de date fundamentale. Structuri de date şi algoritmi -laborator- s.l. dr. ing. Ciprian-Bogdan Chiril ă Universitatea Politehnica Timi ş oara 2014. Cuprins. TDA Tablou C ăutare liniară Căutare binară (logaritmic ă ) Căutare prin interpolare TDA Articol TDA Mul ţime

jadon
Download Presentation

Structuri de date fundamentale

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Structuri de date fundamentale Structuri de date şi algoritmi -laborator- s.l. dr. ing. Ciprian-Bogdan Chirilă Universitatea Politehnica Timişoara 2014

  2. Cuprins • TDA Tablou • Căutare liniară • Căutare binară (logaritmică) • Căutare prin interpolare • TDA Articol • TDA Mulţime • TDA Secvenţă • Concluzii

  3. TDA Tablou • Secvenţă de elemente de acelaşi tip numit tip de bază; • Accesul se realizează cu ajutorul unui index asociat de tip ordinal finit; • ex. int x=tab[7] • Indexul precizează poziţia unui element în cadrul tabloului; • in C primul index al unui tablou este 0 (zero)

  4. Exemplu - cod C #include <stdio.h> int tab[100]; int main() { tab[0]=12; tab[7]=34; printf("%d\n",tab[0]); printf("%d\n",tab[7]); return 0; }

  5. Căutarea liniară • Se compară pe rând elementele tabloului cu x (elementul căutat) până când fie: • se găseşte egalitatea tab[i]=x • s-a ajuns la sfârşitul tabloului.

  6. Căutarea liniară – demo 0 1 2 3 4 5 6 87 12 48 22 69 75 31 i=0 x=69 69=87 ? nu! 87 12 48 22 69 75 31 i=1 x=69 69=12 ? nu! 87 12 48 22 69 75 31 i=2 x=69 69=48 ? nu! 87 12 48 22 69 75 31 i=3 x=69 69=22 ? nu! 87 12 48 22 69 75 31 i=4 x=69 69=69 ? da! 87 12 48 22 69 75 31

  7. Căutarea liniară – cod C #include <stdio.h> int tab[8]={12,34,66,1,2,8,92,66}; int cautareLiniara(int *tab, int dim, int x) { int i=0; while(tab[i]!=x && i<dim) { i++; } if(tab[i]==x) { return i; } return -1; }

  8. Căutarea liniară – cod C int main() { int poz; poz=cautareLiniara(tab,8,92); //poz=cautareLiniara(tab,8,93); if(poz!=-1) { printf("Elementul s-a gasit pe pozitia %d\n",poz); } else { printf("Elementul nu s-a gasit\n"); } return 0; }

  9. Căutarea binară (logaritmică) • Se aplică numai pe tablouri ordonate • Se înjumătăţeşte repetat intervalul în care se face căutarea • Performanţa: O(log2n)

  10. Căutarea binară – demo 0 1 2 3 4 5 6 12 22 31 48 69 75 87 s=0 d=6 m=3 x=75 75 ? 48 > ! 12 22 31 48 69 75 87 s=3 d=6 m=4 x=75 75 ? 69 > ! 12 22 31 4869 75 87 s=4 d=6 m=5 x=75 75 ? 75 = ! 12 22 31 48 697587

  11. Căutarea binară – cod C #include <stdio.h> int tab[8]={1,2,8,12,34,66,87,92}; int cautareBinara(int *tab, int dim, int x) { int s,d,m; s=0; d=dim-1; do { m=(s+d)/2; if(x>tab[m]) { s=m+1; } else { d=m-1; } } while((tab[m]!=x) && (s<=d));

  12. Căutarea binară – cod C if(tab[m]==x) { return m; } return -1; } int main() { int poz; poz=cautareBinara(tab,8,66); //poz=cautareBinara(tab,8,33); if(poz!=-1) { printf("Elementul s-a gasit pe pozitia %d\n",poz); } else { printf("Elementul nu s-a gasit\n"); } return 0; }

  13. Căutarea prin interpolare • Similară cu căutarea binară • Foloseşte altă formulă pentru calculul lui m: • m=s+(x-tab[s])*(d-s)/(tab[d]-tab[s]) • Inspirată după procedeul căutării într-o carte de telefon

  14. Căutarea prin interpolare #include <stdio.h> int tab[8]={1,2,8,12,34,66,87,92}; int cautareInterpolare(int *tab, int dim, int x) { int s,d,m; s=0; d=dim-1; do { m=s+(x-tab[s])*(d-s)/(tab[d]-tab[s]); if(x>tab[m]) { s=m+1; } else { d=m-1; } } while((tab[m]!=x) && (s<d) && (tab[s]==tab[d]) && (x>=tab[s]) && (x<=tab[d]));

  15. Căutarea prin interpolare if(tab[m]==x) { return m; } return 0; } int main() { int poz; poz=cautareInterpolare(tab,8,66); //poz=cautareInterpolare(tab,8,33); if(poz!=-1) { printf("Elementul s-a gasit pe pozitia %d\n",poz); } else { printf("Elementul nu s-a gasit\n"); } return 0; }

  16. TDA Articol • Structură alcătuită dintr-o colecţie finită de elemente numite câmpuri; • Câmpurile pot aparţine unor tipuri diferite; • Accesul la câmpuri se face prin identificatori;

  17. Exemplu - cod C #include <stdio.h> #include <string.h> struct student { char nume[20]; char prenume[20]; int varsta; }; struct student s1,s2; int main() { strcpy(s1.nume,"Nedelcu"); strcpy(s1.prenume,"Nicoleta"); s1.varsta=21; strcpy(s2.nume,"Dragan"); strcpy(s2.prenume,"Cerasela"); s2.varsta=21; printf("%s %s %d\n",s1.nume,s1.prenume,s1.varsta); printf("%s %s %d\n",s2.nume,s2.prenume,s2.varsta); return 0; }

  18. TDA Mulţime • Structură alcătuită din elemente ce aparţin unui tip ordinal finit (tip de bază); • Sunt membre ale unei mulţimi matematice;

  19. TDA Mulţime – operaţii elementare • DepuneMultime(S,T) • EgalitateMultime(S,T) • ApartineMultime(S,e) • Submultime(S,T) • Reuniune(S,T) • Intersectie(S,T) • Diferenta(S,T) • MultimeVida(S) • CreazaMultime(e) Notaţii: S, T, V – mulţimi e – obiect (valoare) de tip de bază

  20. TDA Secvenţă • Structură formată din elemente de acelaşi tip (tipul de bază); • Accesul la elemente este secvenţial şi se efectuează cu ajutorul unui pointer; • La un moment dat este accesibil un singur element;

  21. TDA Secvenţă – operaţii elementare • Rescrie(f) • DepuneSecventa(f,e) • ResetSecventa(f) • EOF(f) • FurnizeazaSecventa(f,e) Notaţii: f – secvenţa e – obiect (valoare) de tip de bază

  22. Exemplu - cod C #include <stdio.h> FILE *f; char buf[20]; int main() { if((f=fopen("fisier.txt","wt"))==NULL) { printf("Eroare la creare fisier..."); return -1; } fprintf(f,"Buna_ziua_domnule_student!"); fclose(f); if((f=fopen("fisier.txt","rt"))==NULL) { printf("Eroare la deschidere fisier..."); return -2; } while(!feof(f)) { fscanf(f,"%s",buf); printf("%s",buf); } fclose(f); return 0; }

  23. Recapitulare Despre ce am discutat azi ? • 4 TDA: • tablou, articol, multime, secventa • 3 algoritmi de cautare pe tablouri: • liniara, binara, interpolare • ultimii 2 functioneaza numai pe tablouri sortate

More Related