This shows you the differences between two versions of the page.
sd-ca:laboratoare:laborator-06 [2015/04/02 12:08] cosmin.boaca |
sd-ca:laboratoare:laborator-06 [2015/04/07 10:24] (current) dragos.dimitriu [Exerciții] |
||
---|---|---|---|
Line 45: | Line 45: | ||
{{sd-ca:playground:lista_dublu.png?direct& |}} | {{sd-ca:playground:lista_dublu.png?direct& |}} | ||
- | ==== Listă circulară dublu-înlănţuită ==== | + | ==== Listă circulară simplu-înlănţuită ==== |
Primul şi ultimul nod sunt legate împreună. Pentru a parcurge o listă circular înlănţuită se începe de la oricare nod şi se urmăreşte lista prin aceasta direcţie aleasă până când se ajunge la nodul de unde s-a pornit parcurgerea (lucru valabil şi pentru listele circulare dublu-înlănţuite). | Primul şi ultimul nod sunt legate împreună. Pentru a parcurge o listă circular înlănţuită se începe de la oricare nod şi se urmăreşte lista prin aceasta direcţie aleasă până când se ajunge la nodul de unde s-a pornit parcurgerea (lucru valabil şi pentru listele circulare dublu-înlănţuite). | ||
Line 53: | Line 53: | ||
{{sd-ca:playground:lista_circ_simplu.png?direct& |}} | {{sd-ca:playground:lista_circ_simplu.png?direct& |}} | ||
- | ==== Listă circulară simplu înlănţuită ==== | + | ==== Listă circulară dublu înlănţuită ==== |
<code c++ list.h> | <code c++ list.h> | ||
template <typename T> | template <typename T> | ||
Line 108: | Line 108: | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
- | 1) [**4p**] Implementați în header-ul definit anterior funcțiile pentru o listă liniară dublu înlănțuită. | + | 1) [**5p**] Implementați în header-ul definit anterior funcțiile pentru o listă liniară dublu înlănțuită. |
- | * [**2p**] constructor, destructor(eliberați memoria folosită) și isEmpty. | + | * [**3p**] constructor, destructor(eliberați memoria folosită) și isEmpty. |
* [**1p**] addFirst și addLast. | * [**1p**] addFirst și addLast. | ||
- | * [**1p**] removeFirst si removeLast. | + | * [**1p**] removeFirst, removeLast si removeFirstOccurence. |
+ | 2) [**2p**] Implementați o stivă folosind liste. | ||
- | 2) [**2p**] Implementați functia removeFirstOccurrence și demonstrați funcționarea acesteia printr-un cod simplist. | + | <code cpp stack.h> |
+ | #ifndef __STACK__H | ||
+ | #define __STACK__H | ||
+ | |||
+ | template<typename T> | ||
+ | class Stack { | ||
+ | public: | ||
+ | // Constructor | ||
+ | Stack(); | ||
+ | |||
+ | // Destructor | ||
+ | ~Stack(); | ||
+ | |||
+ | void push(T x); | ||
+ | T pop(); | ||
+ | T peek(); | ||
+ | int isEmpty(); | ||
+ | |||
+ | private: | ||
+ | // Vectorul de stocare. | ||
+ | LinkedList<T> stackList; | ||
+ | // De ce nu mai este nevoie sa retinem topLevel? | ||
+ | }; | ||
+ | #endif | ||
+ | </code> | ||
3) [**2p**] Implementați o coadă folosind liste. | 3) [**2p**] Implementați o coadă folosind liste. | ||
Line 144: | Line 169: | ||
#endif | #endif | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | BONUS [**bragging rights**] Implementati inversarea unei liste simplu inlantuite, fara memorie auxiliara. | ||
+ | |||
<hidden> | <hidden> | ||
- | 2) [**2p**] Implementați functia removeLastOccurrence și demonstrați funcționarea acesteia printr-un cod simplist. | + | 3) [**2p**] Implementați o coadă folosind liste. |
+ | |||
+ | <code cpp queue.h> | ||
+ | |||
+ | #ifndef __QUEUE_H | ||
+ | #define __QUEUE_H | ||
+ | |||
+ | template <typename T> | ||
+ | class Queue { | ||
+ | private: | ||
+ | // De ce nu mai este nevoie sa retinem head, tail si size? | ||
+ | LinkedList<T> queueList; | ||
+ | |||
+ | public: | ||
+ | // Constructor. | ||
+ | Queue(); | ||
+ | |||
+ | // Destructor. | ||
+ | ~Queue(); | ||
+ | |||
+ | void enqueue(T e); | ||
+ | T dequeue(); | ||
+ | T front(); | ||
+ | int isEmpty(); | ||
+ | }; | ||
+ | |||
+ | #endif | ||
+ | </code> | ||
+ | |||
2) [**3p**] Implementaţi o funcţie removeDuplicates şi demonstraţi funcţionarea acesteia printr-un cod simplist. Funcţia va trebui să elimine toate elementele duplicate din lista dublu înlănţuită. | 2) [**3p**] Implementaţi o funcţie removeDuplicates şi demonstraţi funcţionarea acesteia printr-un cod simplist. Funcţia va trebui să elimine toate elementele duplicate din lista dublu înlănţuită. | ||
Line 154: | Line 212: | ||
3) [**4p**] Implementati inversarea unei liste simplu inlantuite, fara memorie auxiliara. | 3) [**4p**] Implementati inversarea unei liste simplu inlantuite, fara memorie auxiliara. | ||
- | 3) [**2p**] Implementați o coadă folosind liste. | ||
<code cpp queue.h> | <code cpp queue.h> | ||
Line 182: | Line 239: | ||
#endif | #endif | ||
</code> | </code> | ||
- | </hidden> | ||
3) [**2p**] Implementați o stivă folosind liste. | 3) [**2p**] Implementați o stivă folosind liste. | ||
Line 212: | Line 268: | ||
</code> | </code> | ||
- | <hidden> | ||
4) [**1p bonus**] Considerăm o listă simplu înlănțuită, iar structura unui nod următoarea: | 4) [**1p bonus**] Considerăm o listă simplu înlănțuită, iar structura unui nod următoarea: | ||