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_ */
