Advertisement
gonzalob

Untitled

Sep 8th, 2021
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. #include "listas_dobles.h"
  2.  
  3. nodoDoble * inicListaDoble()
  4. {
  5. return NULL;
  6. }
  7.  
  8. nodoDoble * crearNodoDoble(empleado unEmpleado)
  9. {
  10. nodoDoble * nuevoNodoDoble = (nodoDoble *)malloc(sizeof(nodoDoble));
  11.  
  12. nuevoNodoDoble->anterior = NULL;
  13. nuevoNodoDoble->siguiente = NULL;
  14.  
  15. nuevoNodoDoble->unEmpleado = unEmpleado;
  16.  
  17. return nuevoNodoDoble;
  18. }
  19.  
  20. nodoDoble * cargarNodoDoble()
  21. {
  22. empleado unEmpleado;
  23.  
  24. printf("Ingrese el nombre del empleado\n");
  25. fflush(stdin);
  26. scanf("%s",&unEmpleado.NyA);
  27.  
  28. printf("Ingrese el sueldo del empleado\n");
  29. fflush(stdin);
  30. scanf("%f",&unEmpleado.sueldo);
  31.  
  32. nodoDoble * nuevoNodoDoble = crearNodoDoble(unEmpleado);
  33. return nuevoNodoDoble;
  34. }
  35.  
  36. void mostrarEmpleado(empleado unEmpleado)
  37. {
  38. printf("Sueldo del empleado -> %f.2\n",unEmpleado.sueldo);
  39. printf("Nombre del empleado -> %s\n",unEmpleado.NyA);
  40. printf("*********************\n");
  41. }
  42.  
  43. nodoDoble *agregarAlPpioNodoDoble( nodoDoble * listaDoble, nodoDoble * nuevoNodoDoble)
  44. {
  45. if (listaDoble == NULL)
  46. {
  47. listaDoble = nuevoNodoDoble;
  48. }
  49. else
  50. {
  51. listaDoble->anterior = nuevoNodoDoble; //viejo primero apunta ahora al nuevo primero
  52. nuevoNodoDoble->siguiente = listaDoble; //nuevo primero apunta ahora al nuevo segundo
  53. listaDoble = nuevoNodoDoble;
  54. }
  55.  
  56. return listaDoble;
  57. }
  58.  
  59. nodoDoble *agregarAlPpio2NodoDoble( nodoDoble * listaDoble, nodoDoble * nuevoNodoDoble)
  60. {
  61. nuevoNodoDoble->siguiente = listaDoble; //puede ser o no null pero no nos importa xq? xq no accedemos a un atributo
  62. if (listaDoble!=NULL)
  63. {
  64. listaDoble->anterior = nuevoNodoDoble;
  65. }
  66. return nuevoNodoDoble;
  67. }
  68.  
  69. void mostrarListaDoble(nodoDoble * listaDoble)
  70. {
  71. nodoDoble * seguidora = listaDoble;
  72. while (seguidora!=NULL)
  73. {
  74. mostrarEmpleado(seguidora->unEmpleado);
  75. seguidora = seguidora->siguiente;
  76. }
  77. }
  78.  
  79. void mostrarListaDobleFin(nodoDoble * listaDoble)
  80. {
  81. nodoDoble * ultimo = buscarUltimoListaDoble(listaDoble);
  82. if (ultimo!=NULL)
  83. {
  84. while (ultimo!=NULL)
  85. {
  86. mostrarEmpleado(ultimo->unEmpleado);
  87. ultimo = ultimo->anterior;
  88. }
  89. }
  90. }
  91.  
  92. nodoDoble * buscarUltimoListaDoble(nodoDoble * listaDoble)
  93. {
  94. nodoDoble * seguidora = listaDoble;
  95. if (seguidora!=NULL)
  96. {
  97. while (seguidora->siguiente!=NULL)
  98. {
  99. seguidora = seguidora->siguiente;
  100. }
  101. }
  102. return seguidora;
  103.  
  104. }
  105.  
  106. nodoDoble * agregarListaDobleEnOrden(nodoDoble * listaDoble, nodoDoble * nuevoNodo)
  107. {
  108. if (listaDoble == NULL)
  109. {
  110. listaDoble = nuevoNodo;
  111. }
  112. else if (nuevoNodo->unEmpleado.sueldo < listaDoble->unEmpleado.sueldo)
  113. {
  114. listaDoble = agregarAlPpioNodoDoble(listaDoble,nuevoNodo);
  115. }
  116. else
  117. {
  118. nodoDoble * seguidora = listaDoble;
  119. while ((seguidora!=NULL) && (nuevoNodo->unEmpleado.sueldo > seguidora->unEmpleado.sueldo))
  120. {
  121. seguidora= seguidora->siguiente;
  122. }
  123.  
  124. nuevoNodo->siguiente = seguidora;
  125. if (seguidora!=NULL)
  126. {
  127. nuevoNodo->anterior = seguidora->anterior;
  128. nodoDoble * anterior = seguidora->anterior;
  129. anterior->siguiente = nuevoNodo;
  130. seguidora->anterior = nuevoNodo;
  131. }
  132. else
  133. {
  134. nodoDoble * ultimo = buscarUltimoListaDoble(listaDoble);
  135. nuevoNodo->anterior = ultimo;
  136. ultimo->siguiente = nuevoNodo;
  137. }
  138.  
  139. //seguidora->anterior->siguiente puede ser que C no lo tome
  140. }
  141.  
  142. return listaDoble;
  143. }
  144.  
  145. nodoDoble * borrarNodoDoble(nodoDoble * listaDoble, float sueldo)
  146. {
  147. if (listaDoble!=NULL)
  148. {
  149. if (listaDoble->unEmpleado.sueldo == sueldo) //borrar el primero
  150. {
  151. nodoDoble * aBorrar = listaDoble;
  152. listaDoble = listaDoble->siguiente;
  153. if (listaDoble!=NULL) //el caso de un solo nodo
  154. {
  155. listaDoble->anterior = NULL;
  156. }
  157. free(aBorrar);
  158. }
  159. else //borrar cualquiera incluido el del medio
  160. {
  161. nodoDoble * seguidora = listaDoble;
  162. while ((seguidora!=NULL) && (seguidora->unEmpleado.sueldo!=sueldo))
  163. {
  164. seguidora=seguidora->siguiente;
  165. }
  166. if (seguidora!=NULL)
  167. {
  168. nodoDoble * anterior=seguidora->anterior;
  169. anterior->siguiente=seguidora->siguiente;
  170. if (seguidora->siguiente!=NULL)
  171. {
  172. nodoDoble * ss = seguidora->siguiente;
  173. ss->anterior = anterior;
  174. }
  175. free(seguidora);
  176. }
  177. }
  178.  
  179. }
  180. return listaDoble;
  181. }
  182.  
  183. nodoDoble * agregarMuchosListaDoble(nodoDoble * listaDoble)
  184. {
  185. char mander = 's';
  186. while (mander == 's')
  187. {
  188. nodoDoble * nuevoNodo = cargarNodoDoble();
  189. listaDoble = agregarAlPpioNodoDoble(listaDoble,nuevoNodo);
  190. printf("desea seguir??? \n");
  191. fflush(stdin);
  192. scanf("%c",&mander);
  193. }
  194. return listaDoble;
  195. }
  196.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement