CB100

Notas, resueltos y tps de la materia Algoritmos y Estructuras de Datos
Index Commits Files Refs README
tps/2/list.h (2420B)
   1 #ifndef LIST_H_
   2 #define LIST_H_
   3 
   4 #include "node.h"
   5 
   6 template <typename Type>
   7 class List {
   8 private:
   9     Node<Type> *first;
  10     Node<Type> *cursor;
  11     unsigned int size;
  12 
  13 public:
  14     /*
  15      * pos: crea una lista vacia
  16      */
  17     List();
  18 
  19     /*
  20      * pos: elimina la memoria de la lista, no de los datos
  21      */
  22     virtual ~List();
  23 
  24     /*
  25      * pos: indica si la Lista tiene algún elemento
  26      */
  27     bool isEmpty();
  28 
  29     /*
  30      * pos: devuelve la cantidad de elementos que tiene la Lista
  31      */
  32     unsigned int getSize();
  33 
  34     /*
  35      * pos: inserta el dato `element` al comienzo de la lista
  36      */
  37     void insert(Type element);
  38 
  39     /*
  40      * pos: inicializa el cursor
  41      */
  42     void startCursor();
  43 
  44     /* pre: el cursor ha sido inicializado
  45      * pos: avanza el cursor al siguiente elemento de la lista, devuelviendo
  46      *      falso si no quedan nodos por recorrer
  47      *      recorre la lista en desde el ultimo ingresado al primero
  48      */
  49     bool forwardCursor();
  50 
  51     /*
  52      * pre: el cursor ha sido inicializado y está posicionado sobre une
  53      *      elemento de la lista
  54      * pos: devuelve una referencia al nodo en el cual se encuentra el cursor
  55      */
  56     Node<Type> *getCursor();
  57 
  58     /*
  59      * pre: el cursor ha sido inicializado y está posicionado sobre une
  60      *      elemento de la lista
  61      * pos: devuelve el dato del nodo en el cual se encuentra el cursor
  62      */
  63     Type getCursorData();
  64 };
  65 
  66 template <typename Type>
  67 List<Type>::List() {
  68     this->first = NULL;
  69     this->size = 0;
  70     this->cursor = NULL;
  71 }
  72 
  73 template <typename Type>
  74 List<Type>::~List() {
  75     while (this->first != NULL) {
  76         Node<Type> *delNode = this->first;
  77         this->first = delNode->getNext();
  78         delete delNode;
  79         this->size--;
  80     }
  81 }
  82 
  83 template <typename Type>
  84 bool List<Type>::isEmpty() {
  85     return (this->size == 0);
  86 }
  87 
  88 template <typename Type>
  89 unsigned int List<Type>::getSize() {
  90     return this->size;
  91 }
  92 
  93 template <typename Type>
  94 void List<Type>::insert(Type element) {
  95     Node<Type> *newNode = new Node<Type>(element);
  96     newNode->setNext(this->first);
  97     this->first = newNode;
  98     this->size++;
  99 }
 100 
 101 template<typename Type>
 102 void List<Type>::startCursor() {
 103     this->cursor = NULL;
 104 }
 105 
 106 template<typename Type>
 107 bool List<Type>::forwardCursor() {
 108     this->cursor = this->cursor == NULL ? this->first : this->cursor->getNext();
 109 
 110     return (this->cursor != NULL);
 111 }
 112 
 113 template<typename Type>
 114 Node<Type> *List<Type>::getCursor() {
 115     return this->cursor;
 116 }
 117 
 118 template<typename Type>
 119 Type List<Type>::getCursorData() {
 120     return this->cursor->getData();
 121 }
 122 #endif /* LIST_H_ */