Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.
Ambele părți revizuirea anterioară Versiuni anterioare Urmatoarea versiune | Versiuni anterioare Urmatoarea versiune Ambele părți următoarea reviziune | ||
laboratoare:laborator-02 [2017/02/14 17:25] sebastian.cancel |
laboratoare:laborator-02 [2017/03/02 20:51] iulian.matesica |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ====== Laborator 02: Liste & Hashtable | + | ====== Laborator 02: Liste ====== |
\\ | \\ | ||
=====1 Obiectivele laboratorului===== | =====1 Obiectivele laboratorului===== | ||
Linia 12: | Linia 12: | ||
micșora după nevoie, din orice punct al mulțimii sale de elemente. | micșora după nevoie, din orice punct al mulțimii sale de elemente. | ||
- | #POZA 1# | + | {{ : |
Avantaje ale utilizării listelor: | Avantaje ale utilizării listelor: | ||
Linia 19: | Linia 19: | ||
Definirea nodului unei liste: | Definirea nodului unei liste: | ||
- | <code> | + | <file cpp> |
- | typedef struct | + | typedef struct { |
int val; | int val; | ||
- | struct | + | node *next; |
- | }node t; | + | } node_t; |
- | </code> | + | </file> |
====2.2 Clasificare==== | ====2.2 Clasificare==== | ||
Linia 30: | Linia 30: | ||
element pointează către NULL. | element pointează către NULL. | ||
- | #Poza liste simplu | + | {{ : |
* **Liste dublu înlănțuite** - Elementele au dublă legătură către precedentul și antecedentul, | * **Liste dublu înlănțuite** - Elementele au dublă legătură către precedentul și antecedentul, | ||
spre NULL și ultimul element de asemenea | spre NULL și ultimul element de asemenea | ||
- | #Poza lista dublu inlantuite# | + | {{ : |
* **Liste circulare** - Pot fi simplu sau dublu înlănțuite cu proprietatea că ultimul element pointează spre primul. | * **Liste circulare** - Pot fi simplu sau dublu înlănțuite cu proprietatea că ultimul element pointează spre primul. | ||
- | #Poza lista circulare# | + | {{ : |
====2.3 Operații cu liste:==== | ====2.3 Operații cu liste:==== | ||
Linia 49: | Linia 50: | ||
+ | =====3.Exerciții propuse pentru laborator===== | ||
+ | 1. Creați o listă circulară, | ||
+ | * Scrieți funcțiile care să scrie urmatoarele: | ||
+ | * Să introducă un nou angajat după al treilea.\\ | ||
+ | * Să introducă un nou angajat inainte de cel care e " | ||
+ | * Să steargă angajatul cu un anumit număr de telefon introdus.\\ | ||
+ | |||
+ | 2. Să se creeze o listă liniara simplu inlantuita care contine elemente intregi citite dintr-ul fisier text. | ||
+ | Se citeste apoi o valoare intreaga x. Sa se stearga primul nod care contine valoarea x. | ||
+ | Fișierul se va da ca parametru în linia de comandă. | ||
+ | |||
+ | 3.Sa se construiasca o lista liniara simplu inlantuita cu elemente numere intregi. Să se afișeze și apoi să se stearga din lista elementele pare. | ||
+ | |||
+ | =====4. Exercitii Liste ===== | ||
+ | Pentru laboratorul de liste inlantuite vom porni de la o arhiva cu un schelet de laborator. Nu veti scrie codul de la zero ci veti implementa cateva functii in fisierul '' | ||
+ | |||
+ | Descarcati arhiva de aici si dezarhivati-o. Puteti folosi utilitarul '' | ||
+ | <code bash> | ||
+ | student@sda-ab-vm: | ||
+ | --2017-03-02 20: | ||
+ | Resolving elf.cs.pub.ro (elf.cs.pub.ro)... 141.85.227.116 | ||
+ | Connecting to elf.cs.pub.ro (elf.cs.pub.ro)|141.85.227.116|: | ||
+ | HTTP request sent, awaiting response... 200 OK | ||
+ | Length: 2368 (2,3K) [application/ | ||
+ | Saving to: ‘lab1-skel.zip’ | ||
+ | |||
+ | lab1-skel.zip | ||
+ | |||
+ | 2017-03-02 20:45:56 (4,78 MB/s) - ‘lab1-skel.zip’ saved [2368/2368] | ||
+ | |||
+ | student@sda-ab-vm: | ||
+ | lab1-skel.zip | ||
+ | student@sda-ab-vm: | ||
+ | Archive: | ||
+ | inflating: list.c | ||
+ | inflating: list.h | ||
+ | inflating: Makefile | ||
+ | student@sda-ab-vm: | ||
+ | gcc list.c -o list -std=gnu99 | ||
+ | student@sda-ab-vm: | ||
+ | </ | ||
+ | |||
+ | Pentru compilare folositi comanda '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====Probleme opţionale - de interviu==== | ||
+ | |||
+ | 1. Se dă o listă simplu înlănţuită(primiţi doar un pointer către primul element). Verificaţi dacă lista conţine o buclă. (o listă simplu înlănţuită conţine o buclă => niciun element nu are legătura NULL) | ||
+ | |||
+ | 2. Se dau două liste(pentru fiecare listă - pointer către primul element) în formă de Y(listele se intersectează, | ||
+ | |||
+ | 3. Se dă o listă | ||
+ | |||
+ | ====== Extra: Hashtable(tabela de dispersie)====== | ||
+ | |||
+ | =====1 Introducere===== | ||
+ | |||
+ | (De urmărit ideea din introducere şi funcţia de indexare) | ||
+ | |||
+ | ====1.1 Poveste==== | ||
+ | ===Să presupunem urmatoarele detalii dintr-un caz real:=== | ||
+ | | ||
+ | |