Guest User

Untitled

a guest
Nov 22nd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct nodo{
  6. int dato;
  7. struct nodo* siguiente;
  8. struct nodo* atras;
  9. }nodo;
  10.  
  11. nodo* primero = NULL;
  12. nodo* ultimo = NULL;
  13.  
  14. void insertarNodo();
  15. void visualizar();
  16. void visualizarInverso();
  17. void Menu();
  18. void eliminarNodo();
  19. void eliminarNodoValor();
  20.  
  21. int main(){
  22.  
  23. int opc;
  24. do{
  25. Menu();
  26. scanf("%d",&opc);
  27. switch (opc){
  28. case 1: insertarNodo();
  29. break;
  30. case 2: visualizar();
  31. break;
  32. case 3: visualizarInverso();
  33. break;
  34. case 4: eliminarNodo();
  35. break;
  36. case 5: return 0;
  37. break;
  38. case 6: exit(0);
  39. break;
  40. default: printf("nLa opcion ingresada es invalida.nn");
  41. break;
  42. }
  43. }while(opc != 7);
  44. return 0;
  45. }
  46.  
  47. void Menu(){
  48. printf("n|-------------------------------------|");
  49. printf("n| * LISTA DOBLE * |");
  50. printf("n|-------------------------------------|");
  51. printf("n| 1. Ingresar un numero entero |");
  52. printf("n| 2. Mostrar lista en orden |");
  53. printf("n| 3. Mostrar lista en orden inverso |");
  54. printf("n| 4. Eliminar un nodo por su indice |");
  55. printf("n| 5. Eliminar nodos por su valor |");
  56. printf("n| 6. Salir |");
  57. printf("n|-------------------------------------|");
  58. printf("n| Seleccione la opcion a realizar: ");
  59. fflush(stdout);
  60. }
  61.  
  62. void insertarNodo(){
  63.  
  64. nodo* nuevo = (nodo*)malloc(sizeof(nodo));
  65. printf("n Ingrese un numero entero: ");
  66. scanf("%d",&nuevo->dato);
  67.  
  68. if(primero == NULL){
  69. primero = nuevo;
  70. primero -> siguiente = NULL;
  71. primero -> atras = NULL;
  72. ultimo = primero;
  73. }else{
  74. ultimo->siguiente = nuevo;
  75. nuevo -> siguiente = NULL;
  76. nuevo -> atras = ultimo;
  77. ultimo = nuevo;
  78. }
  79. }
  80.  
  81. void visualizar(){
  82.  
  83. nodo* actual = (nodo*)malloc(sizeof(nodo));
  84. actual = primero;
  85. if(primero!=NULL){
  86. printf("nLista en orden: ");
  87. while(actual!=NULL){
  88. printf("%d ",actual->dato);
  89. actual = actual->siguiente;
  90. }
  91. }else{
  92. printf("n La lista se encuentra VACIA! nn");
  93. }
  94. }
  95.  
  96. void visualizarInverso(){
  97.  
  98. nodo* actual = (nodo*)malloc(sizeof(nodo));
  99. actual = ultimo;
  100. if(primero!=NULL){
  101. printf("nLista en orden inverso: ");
  102. while(actual!=NULL){
  103. printf("%d ",actual->dato);
  104. actual = actual->atras;
  105. }
  106. }else{
  107. printf("n La lista se encuentra VACIA! nn");
  108. }
  109. }
  110.  
  111. void eliminarNodo(){
  112.  
  113. nodo* actual = (nodo*)malloc(sizeof(nodo));
  114. actual = primero;
  115. nodo* anterior = (nodo*)malloc(sizeof(nodo));
  116. anterior = NULL;
  117. int nodoBuscado = 0, encontrado = 0;
  118. printf("n Ingrese el numero entero que necesita eliminar: ");
  119. scanf("%d",&nodoBuscado);
  120.  
  121. if(primero!=NULL){
  122. while(actual != NULL && encontrado != 1){
  123.  
  124. if(actual -> dato == nodoBuscado){
  125.  
  126. if(actual==primero){
  127. primero = primero -> siguiente;
  128. primero -> atras = NULL;
  129. }else if(actual==ultimo){
  130. anterior -> siguiente = NULL;
  131. ultimo = anterior;
  132. }else{
  133. anterior -> siguiente = actual -> siguiente;
  134. actual -> siguiente -> atras = anterior;
  135. }
  136. printf("n Nodo eliminado con EXITO! nn");
  137. encontrado = 1;
  138. }
  139. anterior = actual;
  140. actual = actual -> siguiente;
  141. }
  142. if(encontrado == 0){
  143. printf("n Nodo NO encontrado! nn");
  144. }else{
  145. free(anterior);
  146. }
  147. }else{
  148. printf("n La lista se encuentra VACIA! nn");
  149. }
  150. }
Add Comment
Please, Sign In to add comment