Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:laboratoare:laborator-06 [2015/04/02 10:51]
cosmin.boaca [Listă circulară simplu înlănţuită]
sd-ca:laboratoare:laborator-06 [2015/04/07 10:24] (current)
dragos.dimitriu [Exerciții]
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++ stack.h> +<code c++ list.h>
-#ifndef LIST_H +
-#define LIST_H +
 template <​typename T> template <​typename T>
 struct Node { struct Node {
     T value;     T value;
-    Node<​T>​ *next;+    Node<​T>​ *next, *prev;
     Node (T value) {     Node (T value) {
  this->​value = value;  this->​value = value;
 +        next = prev = NULL;
     }     }
     Node() {     Node() {
 +        next = prev = NULL; 
     }     }
 }; };
Line 74: Line 72:
 private: private:
     Node<​T>​ *pFirst, *pLast;     Node<​T>​ *pFirst, *pLast;
-    Node<​T>​ *sentinel; 
 public: ​ public: ​
     // Constructor     // Constructor
Line 111: 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**] removeFirstremoveLast ​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 147: 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 157: 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 185: Line 239:
 #endif #endif
 </​code>​ </​code>​
-</​hidden>​ 
  
 3) [**2p**] Implementați o stivă folosind liste. 3) [**2p**] Implementați o stivă folosind liste.
Line 215: 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:​
  
sd-ca/laboratoare/laborator-06.1427961117.txt.gz · Last modified: 2015/04/02 10:51 by cosmin.boaca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0