Universitatea "Babes-Bolyai" Cluj-Napoca
Facultatea de Matematica si Informatica
FISA DISCIPLINEI

Structuri de date
Cod
Semes-
trul
Ore: C+S+L
Credite
Tipul
Sectia
MI011
2
2+1+0
5
obligatorie
Informatică
MI011
2
2+1+0
5
obligatorie
Matematică-Informatică
Cadre didactice indrumatoare
Lect. SERBAN Gabriela, gabis@cs.ubbcluj.ro
Conf. Dr. POP Horia Florin, hfpop@cs.ubbcluj.ro
Lect. IONESCU Clara, clara@cs.ubbcluj.ro
Obiective
- studierea conceptului de tip abstract de date si a celor mai frecvent utilizate tipuri abstracte de date, folosite în dezvoltarea aplicatiilor (stive, cozi, liste, multimi si tabele [map]);
- studierea structurilor de date cu care se pot implementa aceste tipuri abstracte de date (tablouri, liste înlantuite, arbori binari, tabele de dispersie);
- formarea deprinderilor de a proiecta si realiza aplicatii pornind de la utilizarea tipurilor abstracte de date (de exemplu: se declara variabile de tip Multime care se prelucreaza cu ajutorul operatiilor definite pentru acest tip abstract de date, fara sa se tina cont de modul în care multimea se reprezinta);formarea deprinderilor de a prelucra date stocate în diverse structuri de date: tablouri, articole, string-uri, liste înlantuite, stive, cozi, tabele de dispersie, arbori si grafuri;
- formarea deprinderilor de a compara costul alocarii statice si celei dinamice în cazul diverselor structuri de date;
- formarea priceperilor si capacitatilor de a alege structura adecvata unei aplicatii;
- cunoasterea unor structuri de date utile în diverse domenii ale matematicii si informaticii (de exemplu teoria grafurilor, baze de date, sisteme de operare etc.);
- formarea abilitatilor în proiectarea si implementarea algoritmilor care prelucreaza aceste structuri de date;
- consolidarea deprinderilor de a evalua complexitatea algoritmilor.
Continut
I. Structuri de date. Structuri statice, semistatice si dinamice (S1)
1.1 Notiuni introductive
- Algoritmi. Complexitate (sume,recurente)
- Abstractizarea si incapsularea datelor
- Multimi dinamice
- Tehnici de analiza a algoritmilor
1.2. Tabloul (array)
- Descriere, proprietati
- Siruri, subsiruri, subsecvente, matrice
- Operatii: inserare/stergere element, cautare secventiala si binara
- Interclasare
- Ordonare: prin selectie, prin inserare, bubblesort, mergesort, quicksort, heapsort, ordonare numerica, radixsort, bucketsort etc.
1.3. Lista înlantuita (linked list)
- Descriere, proprietati
- Liste simplu si dublu înlantuitealocate dinamic
- Operatii: inserare/stergere element, cautare, traversare
1.4. Tabela de dispersie (hash-tabel)
- Descriere, proprietati
- Tabele de dispersie închise si deschise (closed- and open-bucket)
- Operatii: cautare, inserare/stergere element
1.5. Arborele binar (binary tree)
- Descriere, proprietati
- Arbori binari si arbori binari de cautare
- Operatii: cautare, inserare/stergere element, traversare
II. Tipuri abstracte de date (TAD)
- Tipuri de date: valori, operatii si reprezentarea datelor
- Tipuri abstracte de date: numai valori si operatii
- Cerinte, contract, implementare(implementari)
- Proiectarea tipurilor abstracte de date
- Tipul abstract de date string
- Aplicatii
2.1. TAD-ul lista (list)
- Concepte legate de liste
- Aplicatii ale listelor
- Tipul abstract de date lista: cerinte, contract
- Implementari ale listelor folosind tablouri si folosind liste înlantuite
- Aplicatii
2.2. TAD-ul stiva (stack)
- Concepte legate de stiva
- Aplicatii ale stivelor
- Tipul abstract de date stiva: cerinte, contract
- Implementari ale stivelor folosind tablouri si folosind liste înlantuite
- Aplicatii
2.3. TAD-ul coada (queue)
- Concepte legate de coada
- Aplicatii ale cozilor
- Tipul abstract de date coada: cerinte, contract
- Implementari ale cozilor folosind tablouri si folosind liste înlantuite
- Aplicatii
2.4. TAD-ul multime (set)
- Concepte legate de multimi
- Aplicatii ale multimilor
- Tipul abstract de date multime: cerinte, contract
- Implementari ale multimilor folosind tablouri sau vectori booleeni (de biti), folosind liste înlantuite, folosind tabele de dispersie, folosind arbori binari
- Aplicatii
2.5. TAD-ul dictionar (map)
- Concepte legate de dictionare
- Aplicatii ale dictionarelor
- Tipul abstract de date dictionar: cerinte, contract
- Implementari ale dictionarelor folosind tablouri booleene, folosind liste înlantuite sau arbori binari, folosind tabele de dispersie
- Aplicatii
2.6. TAD-ul coada de prioritati (priority queue)
- Concepte legate de coada de prioritati
- Aplicatii cu cozi de prioritati
- Tipul abstract de date coada de prioritati: cerinte, contract
- Implementari ale cozilor de prioritati folosind liste înlantuite
- Structura de date heap
- Implementari ale cozilor de prioritati folosind heap-uri
- Aplicatii
2.7. TAD-ul arbore (tree)
- Concepte legate de arbori
- Aplicatii cu arbori
- Tipul abstract de date arbore: cerinte, contract
- Implementari înlantuite ai arborilor
- Tipuri abstracte de date arbore cu diferite proprietati
- Aplicatii
2.8. TAD-ul graf (graph)
- Concepte legate de grafuri
- Aplicatii cu grafuri
- Tipul abstract de date arbore: cerinte, contract
- Reprezentari statice (prin multimea muchiilor, prin multimea adiacentelor, cu matrice de adiacenta)
- Traversari ale grafurilor
- Sortarea topologica
- Aplicatii
III. Structuri de date specializate
3.1. Arbori binari de cautare echilibrati
- Arbori AVL
- Arbori rosu si negru
- B-arbori
- Arbori binari splay
3.2. Arbori oarecare. Aplicatii
3.3. Heap-uri
- Leftist Heap
- Heap-ul binomial
- Heap-uri Fibonacci (facultativ)
3.4. Structuri de date spatiale
- Quad-arbori
- Oct-arbori
Bibliografie
1. T. Cormen, C. Leiserson, R. Rivest - Introducere în algoritmi, Editura Computer Libris Agora, Cluj, 2000
2. E. Horowitz - Fundamentals of Data Structures in C++, Computer Science Press, 1995
3. David M. Mount - Data Structures, University of Maryland, 1993
4. wayne Ambsbury - Data Structures - From Arrays to Priority Queues, 1993
3. N. Wirth, Algorithms + Data Structures = Programs, Prentice- Hall Inc., 1976

Evaluare
Activitatea se va finaliza cu: realizarea unui proiect (N1 - 30% din nota finala) si un examen scris (N2 - 70% din nota finala). Nota finala se va calcula ca (3*N1+7*N2)/10. Pentru promovare este necesar ca ambele note sa fie >=5.