Advertisement
Guest User

listacircular.h

a guest
Oct 20th, 2014
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.10 KB | None | 0 0
  1. #include <iostream>
  2. #include "Nodo.h"
  3. using namespace std;
  4.  
  5. template <class Tipo>
  6. class ListaCircular
  7. {
  8. public:
  9. //Precondicion: ninguna
  10. //Postcondicion: inicializa la lista a un estado vacio, inicio = NULL
  11. ListaCircular();
  12.  
  13. //Precondicion: la lista contiene elementos o ha sido inicializada
  14. //Postcondicion: imprime el contenido de la lista
  15. void imprimirLista() const;
  16.  
  17. //Precondicion: nuevoDato contiene datos, la lista contiene elementos o ha sido inicializada
  18. //Postcondicion: inicio apunta al nuevo elemento, nuevoDato es insertado al inicio de la lista
  19. void InsertaAlInicio(const Tipo& nuevoDato);
  20.  
  21. //Precondicion: nuevoDato contiene datos, la lista contiene elementos o ha sido inicializada
  22. //Postcondicion: recorre toda la lista, el nuevo elemento es insertado al final de la lista
  23. void InsertaAlFinal(const Tipo& nuevoDato);
  24.  
  25. //Precondicion: la lista contiene elementos o ha sido inicializada
  26. //Postcondicion: determina si la lista esta vacia, regresa true si la lista esta vacia, en otro caso regresa false
  27. bool ListaVacia() const;
  28.  
  29. //Precondicion: borraDato contiene datos, la lista contiene elementos o ha sido inicializada
  30. //Postcondicion: si lo encuentra lo elimina, si no, manda un mensaje
  31. bool EliminaNodo(int borrarPosicion);
  32.  
  33. int Buscar(const Tipo& buscaDato) const;
  34.  
  35. int cantidadNodos() const;
  36.  
  37. string Inicio() const;
  38.  
  39. private:
  40. Nodo<Tipo> *inicio;
  41. };
  42.  
  43. template <class Tipo>
  44. ListaCircular<Tipo>::ListaCircular()
  45. {
  46. inicio = NULL;
  47. }
  48.  
  49. template <class Tipo>
  50. int ListaCircular<Tipo>::Buscar(const Tipo& buscaDato) const
  51. {
  52. Nodo<Tipo> *temp;
  53. bool encontrado = false;
  54. int posicion = 0;
  55. temp = inicio;
  56.  
  57. if (inicio->siguiente() == inicio)
  58. {
  59. if (inicio->informacion() == buscaDato)
  60. {
  61. encontrado = true;
  62. posicion = 1;
  63. }
  64. }
  65. else
  66. {
  67. while (temp->siguiente() != inicio && !encontrado)
  68. {
  69. if (temp->informacion() == buscaDato)
  70. encontrado = true;
  71. else
  72. temp = temp->siguiente();
  73. posicion++;
  74. }
  75. }
  76. return posicion;
  77. }
  78.  
  79. template <class Tipo>
  80. bool ListaCircular<Tipo>::ListaVacia() const
  81. {
  82. return (inicio == NULL);
  83. }
  84.  
  85. template <class Tipo>
  86. void ListaCircular<Tipo>::InsertaAlInicio(const Tipo& nuevoDato)
  87. {
  88. Nodo<Tipo> *temp; temp = new Nodo<Tipo>(nuevoDato);
  89. if (inicio == NULL)
  90. {
  91. inicio = temp;
  92. inicio->siguiente() = inicio;
  93. }
  94. else
  95. {
  96. Nodo<Tipo> *temp2;
  97. temp2 = inicio;
  98. while (temp2->siguiente() != inicio)
  99. {
  100. temp2 = temp2->siguiente();
  101. }
  102. temp2->siguiente() = temp;
  103. temp->siguiente() = inicio;
  104. inicio = temp;
  105. }
  106. }
  107.  
  108. template <class Tipo>
  109. void ListaCircular<Tipo>::InsertaAlFinal(const Tipo& nuevoDato)
  110. {
  111. Nodo<Tipo> *temp;
  112. Nodo<Tipo> *introducir = new Nodo<Tipo>(nuevoDato);
  113. temp = inicio;
  114.  
  115. if (inicio == NULL)
  116. {
  117. inicio = introducir;
  118. inicio->siguiente() = inicio;
  119. }
  120. else
  121. {
  122. do
  123. {
  124. temp = temp->siguiente();
  125. } while (temp->siguiente() != inicio);
  126. temp->siguiente() = introducir;
  127. introducir->siguiente() = inicio;
  128. }
  129. }
  130.  
  131. template<class Tipo>
  132. bool ListaCircular<Tipo>::EliminaNodo(int borrarPosicion)
  133. {
  134. if (inicio == NULL)
  135. return false;
  136.  
  137. Nodo<Tipo> *anterior = inicio;
  138. Nodo<Tipo> *actual = inicio->siguiente();
  139. Nodo<Tipo> *temp = inicio;
  140.  
  141. for (int i = 1; i < borrarPosicion; i++)
  142. {
  143. anterior = actual;
  144. actual = actual->siguiente();
  145. }
  146.  
  147. while (temp->siguiente() != anterior)
  148. temp = temp->siguiente();
  149.  
  150. temp->siguiente() = actual;
  151. delete anterior;
  152. inicio = actual;
  153. return true;
  154. }
  155.  
  156. template <class Tipo>
  157. void ListaCircular<Tipo>::imprimirLista() const
  158. {
  159. Nodo<Tipo> *temp;
  160. temp = inicio;
  161.  
  162. if (temp != NULL)
  163. {
  164. do
  165. {
  166. cout << temp->informacion() << endl;
  167. temp = temp->siguiente();
  168. } while (temp != inicio);
  169. }
  170. }
  171.  
  172. template <class Tipo>
  173. int ListaCircular<Tipo>::cantidadNodos() const
  174. {
  175. Nodo<Tipo> *temp;
  176. temp = inicio;
  177. int contar = 0;
  178.  
  179. if (temp != NULL)
  180. {
  181. do
  182. {
  183. temp = temp->siguiente();
  184. contar++;
  185. } while (temp->siguiente() != inicio);
  186. }
  187.  
  188. return contar;
  189. }
  190.  
  191. template <class Tipo>
  192. string ListaCircular<Tipo>::Inicio() const
  193. {
  194. return inicio->informacion();
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement