Guest User

Untitled

a guest
Nov 18th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1. package listasdoblecircular;
  2.  
  3. import javax.swing.DefaultListModel;
  4. import javax.swing.JOptionPane;
  5. /**
  6. * @author Diego Fernando Echeverry
  7. * @author Carlos Augusto Barrera
  8. */
  9. public class ListaCircularDoble {
  10. private int contador;
  11. class Nodo {
  12.  
  13. Object dato;
  14. ListaCircularDoble.Nodo anterior, siguiente;
  15. }
  16. ListaCircularDoble.Nodo inicio;
  17.  
  18. public void insertarInicio(Object v) {
  19. if (inicio == null) { // cuando no se ha creado ningun nodo
  20. inicio = new ListaCircularDoble.Nodo();//Se crea un espacio en memoria para el nodo inicio
  21. inicio.dato = v; // se inserta el dato
  22. inicio.siguiente = inicio;
  23. inicio.anterior = inicio;
  24. contador++;
  25. } else {
  26. //ingresar al final
  27. ListaCircularDoble.Nodo nuevo = new ListaCircularDoble.Nodo();//Se crea un espacio en memoria para el nodo inicio
  28. nuevo.dato = v;// se inserta el dato
  29. nuevo.siguiente = inicio; //nuevo en su .next apunta hacia nuestro nodo inicio
  30. nuevo.anterior = inicio.anterior; // nuevo en su .ant apunta al nodo que es el final
  31. inicio.anterior = nuevo; //nuevo en su .ant apunta hacia nuestro nodo nuevo
  32. nuevo.anterior.siguiente = nuevo; //nuevo en su nodo anterioir en su .next apunta hacia nuestro nodo nuevo
  33. inicio = nuevo; //ahora inicio apunta a nuestro nodo Nuevo
  34. contador++;
  35. }
  36. }
  37.  
  38. public void insertarDatoInicio(Object v) {
  39. if (inicio != null) {
  40. ListaCircularDoble.Nodo nuevo = new ListaCircularDoble.Nodo();//Se crea un espacio en memoria para el nodo inicio
  41. nuevo.dato = v;// se inserta el dato
  42. ListaCircularDoble.Nodo aux = inicio.anterior;// creamos temportal para reposicionar la direccion de los nodos
  43. nuevo.anterior = aux;// enlazo el nuevo nodo con el ultimo nodo de la lista
  44. aux.siguiente = nuevo; //el ultimo nodo lo apunto en su siguiente al nuevo nodo
  45. inicio.anterior=nuevo;// el primer nodo lo enlazon en su anterio con el nuevo nodo
  46. nuevo.siguiente = inicio;//el nuevo nodo en su siguiente lo enlazo con el primero
  47. inicio = nuevo;//ahora el nuevo nodo apunta al inicio
  48. contador++;
  49. }
  50. }
  51.  
  52. public void insertarEnmedio(Object v) {
  53.  
  54. int cont = 1;
  55. ListaCircularDoble.Nodo auxiliar = inicio;
  56. while (auxiliar.siguiente != inicio) {
  57. int medio = (int) (contador / 2);
  58. if (cont == medio) {
  59. ListaCircularDoble.Nodo nuevo = new ListaCircularDoble.Nodo();//Se crea un espacio en memoria para el nodo inicio
  60. nuevo.dato = v;// se inserta el dato
  61. ListaCircularDoble.Nodo auxiliar2 = auxiliar.siguiente;
  62. auxiliar.siguiente = nuevo;
  63. nuevo.anterior = auxiliar;
  64. nuevo.siguiente = auxiliar2;
  65. auxiliar2.anterior = nuevo;
  66. contador++;
  67. break;
  68. }
  69.  
  70. cont++;
  71. auxiliar = auxiliar.siguiente;
  72. }
  73. }
  74. public void insertarEnPosicion(Object v,int pos) {
  75.  
  76. int cont = 1;
  77. ListaCircularDoble.Nodo auxiliar = inicio;
  78. while (auxiliar.siguiente != inicio) {
  79. if (cont == pos -1) {
  80. ListaCircularDoble.Nodo nuevo = new ListaCircularDoble.Nodo();//Se crea un espacio en memoria para el nodo inicio
  81. nuevo.dato = v;// se inserta el dato
  82. ListaCircularDoble.Nodo auxiliar2 = auxiliar.siguiente;
  83. auxiliar.siguiente = nuevo;
  84. nuevo.anterior = auxiliar;
  85. nuevo.siguiente = auxiliar2;
  86. auxiliar2.anterior = nuevo;
  87. contador++;
  88. break;
  89. }
  90.  
  91. cont++;
  92. auxiliar = auxiliar.siguiente;
  93. }
  94. }
  95.  
  96. public Object extraerInicio() {
  97. if (inicio != null) {
  98. Object v;
  99. if (inicio.siguiente != inicio) {
  100. v = inicio.dato; // se inserta el dato
  101. inicio.siguiente.anterior = inicio.anterior; // inicio en su nodo siguiente, en su .ant apunta al nodo anterior de inicio
  102. inicio.anterior.siguiente = inicio.siguiente; // inicio en su nodo anterior, en su .next apunta al nodo siguiente de inicio
  103. inicio = inicio.siguiente;
  104. contador--;
  105. } else {
  106. v = inicio.dato;
  107. inicio = null;
  108. }
  109. return v;
  110. }
  111. return -1;
  112. }
  113.  
  114. public Object extraerFinal() {
  115. if (inicio != null) {
  116. Object v;
  117. if (inicio.siguiente != inicio) {
  118. v = inicio.anterior.dato;
  119. inicio.anterior.anterior.siguiente = inicio;//inicio en su nodo anterior, anterior, en su .next apunta a inicio
  120. inicio.anterior = inicio.anterior.anterior; //inicio en su .next apunta a inicio en su nodo anterior en su .ant
  121. contador--;
  122. return v;//se retorna el valo
  123. } else {
  124. return extraerInicio();//se llama a este metodo para extraer inicio, ya que solo tenemos un nodo
  125. //el cual es inicio y final a la vez, y a traves de exte metodo se extrae :D
  126. }
  127. }
  128. return -1;
  129. }
  130.  
  131. public void buscar(String palabra) {
  132. boolean estado = false;
  133. ListaCircularDoble.Nodo aux = inicio;
  134. if (aux != null) {
  135. while (aux.siguiente != inicio) {
  136. if (aux.dato.equals(palabra)) {
  137. estado = true;
  138. break;
  139. }
  140. aux = aux.siguiente;
  141. }
  142. if (estado) {
  143. JOptionPane.showMessageDialog(null, "si esta!");
  144. } else {
  145. JOptionPane.showMessageDialog(null, "No esta!", "Erorr", JOptionPane.ERROR_MESSAGE);
  146. }
  147.  
  148. }
  149. }
  150.  
  151. public void eliminar(String palabra) {
  152. boolean estado = false;
  153. ListaCircularDoble.Nodo aux = inicio;
  154. if (aux != null) {
  155. while (aux.siguiente != inicio) {
  156. if (aux.dato.equals(palabra)) {
  157. inicio.siguiente.anterior = aux.anterior; // inicio en su nodo siguiente, en su .ant apunta al nodo anterior de inicio
  158. inicio.anterior.siguiente = aux.siguiente; // inicio en su nodo anterior, en su .next apunta al nodo siguiente de inicio
  159. inicio = inicio.siguiente;
  160. estado = true;
  161. }
  162. aux = aux.siguiente;
  163. }
  164. }
  165. }
  166. /**
  167. * metodo para imprimir en jlist
  168. * @return
  169. */
  170. public DefaultListModel<String> mostrarL() {
  171. DefaultListModel<String> l1 = new DefaultListModel<>();
  172.  
  173. ListaCircularDoble.Nodo aux = inicio;
  174. if (aux != null) {
  175. l1.addElement(" dato | siguiente | anterior");
  176. while (aux.siguiente != inicio) {
  177. l1.addElement(
  178. aux.dato + " | "
  179. + aux.anterior.dato + " | "
  180. + aux.siguiente.dato);
  181. aux = aux.siguiente;
  182. }
  183. l1.addElement(
  184. aux.dato + " | "
  185. + aux.anterior.dato + " | "
  186. + aux.siguiente.dato);
  187. }
  188. return l1;
  189. }
  190. }
Add Comment
Please, Sign In to add comment