Advertisement
gonzalob

Untitled

Sep 1st, 2021
1,084
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.02 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>
  5.  
  6. typedef struct
  7. {
  8.     int edad;
  9.     char nombre[20];
  10.  
  11. }persona;
  12.  
  13. typedef struct
  14. {
  15.     persona unaPersona;
  16.     struct nodo * siguiente;
  17.  
  18. }nodo;
  19.  
  20. nodo * inicLista();
  21. nodo * cargarNodo();
  22. nodo * crearNodo(persona unaPersona);
  23. nodo * agregarAlPpio(nodo * lista,nodo * nuevoNodo);
  24. void mostrarLista(nodo * lista);
  25. void mostrarUnaPersona(persona p);
  26. nodo * agregarMuchos(nodo * lista);
  27. void mostrarListaRecursivamente(nodo * lista);
  28. nodo * agregarMuchosRecursivo(nodo * lista,char mander);
  29. nodo * buscarUltimoLista(nodo * lista);
  30. nodo * agregarAlFinal(nodo * lista, nodo * nuevoNodo);
  31. nodo * agregarEnOrden(nodo * lista, nodo * nuevoNodo);
  32. nodo * borrarNodo(nodo * lista, int datoABorrar);
  33.  
  34. int main()
  35. {
  36.     nodo * lista = inicLista();
  37.     lista = agregarMuchosRecursivo(lista,'s');
  38.     mostrarListaRecursivamente(lista);
  39.  
  40.     lista = borrarNodo(lista,25);
  41.  
  42.     printf("------------------------------------------\n");
  43.  
  44.     mostrarListaRecursivamente(lista);
  45. }
  46.  
  47. nodo * inicLista()
  48. {
  49.     return NULL;
  50. }
  51.  
  52. nodo * crearNodo(persona unaPersona)
  53. {
  54.     nodo * nuevoNodo;
  55.     nuevoNodo = (nodo*)malloc(sizeof(nodo));
  56.     nuevoNodo->unaPersona = unaPersona;
  57.     nuevoNodo->siguiente = NULL;
  58.     return nuevoNodo;
  59. }
  60.  
  61.  
  62. nodo * cargarNodo()
  63. {
  64.     nodo * nuevoNodo;
  65.  
  66.     persona personaNueva;
  67.  
  68.     printf("ingrese una edad\n");
  69.     scanf("%d",&personaNueva.edad);
  70.  
  71.     printf("ingrese un nombre\n");
  72.     fflush(stdin);
  73.     scanf("%s",&personaNueva.nombre);
  74.  
  75.     nuevoNodo = crearNodo(personaNueva);
  76.  
  77.     return nuevoNodo;
  78. }
  79.  
  80. nodo * agregarAlPpio(nodo * lista,nodo * nuevoNodo)
  81. {
  82.     if (lista == NULL)
  83.     {
  84.         lista = nuevoNodo;
  85.     }
  86.     else
  87.     {
  88.         nuevoNodo->siguiente = lista;
  89.         lista = nuevoNodo;
  90.     }
  91.  
  92.     return lista;
  93. }
  94.  
  95. void mostrarLista(nodo * lista)
  96. {
  97.     nodo * seguidora = lista;
  98.     while (seguidora!=NULL)
  99.     {
  100.         mostrarUnaPersona(seguidora->unaPersona);
  101.  
  102.         seguidora = seguidora->siguiente;
  103.     }
  104. }
  105.  
  106. void mostrarListaRecursivamente(nodo * lista)
  107. {
  108.     nodo * seguidora = lista;
  109.     if (seguidora!=NULL)
  110.     {
  111.         mostrarUnaPersona(seguidora->unaPersona);
  112.  
  113.         mostrarListaRecursivamente(seguidora->siguiente);
  114.     }
  115.     else
  116.     {
  117.         printf("FIN DE LA LISTA\n");
  118.     }
  119. }
  120.  
  121. void mostrarUnaPersona(persona p)
  122. {
  123.         printf("%s\n",p.nombre);
  124.         printf("%d\n",p.edad);
  125.         printf("--------------\n");
  126. }
  127.  
  128. nodo * agregarMuchos(nodo * lista)
  129. {
  130.     char mander = 's';
  131.     while (mander == 's')
  132.     {
  133.         nodo * nuevoNodo = cargarNodo();
  134.         lista = agregarEnOrden(lista,nuevoNodo);
  135.  
  136.         printf("desea seguir? \n");
  137.         fflush(stdin);
  138.         scanf("%c",&mander);
  139.     }
  140.     return lista;
  141. }
  142.  
  143. nodo * agregarMuchosRecursivo(nodo * lista,char mander)
  144. {
  145.     if (mander == 's')
  146.     {
  147.         nodo * nuevoNodo = cargarNodo();
  148.         lista = agregarEnOrden(lista,nuevoNodo);
  149.  
  150.         printf("desea seguir? \n");
  151.         fflush(stdin);
  152.         scanf("%c",&mander);
  153.  
  154.         lista = agregarMuchosRecursivo(lista,mander);
  155.     }
  156.     return lista;
  157. }
  158.  
  159. nodo * buscarUltimoLista(nodo * lista)
  160. {
  161.     nodo * ultimo;
  162.     if (lista == NULL)
  163.     {
  164.         ultimo = NULL;
  165.     }
  166.     else
  167.     {
  168.         nodo * seguidora = lista;
  169.         while (seguidora->siguiente !=NULL)
  170.         {
  171.             seguidora = seguidora->siguiente;
  172.         }
  173.         ultimo = seguidora;
  174.     }
  175.     return ultimo;
  176. }
  177.  
  178. nodo * agregarAlFinal(nodo * lista, nodo * nuevoNodo)
  179. {
  180.     if (lista==NULL)
  181.     {
  182.         lista = nuevoNodo;
  183.     }
  184.     else
  185.     {
  186.         nodo * ultimo = buscarUltimoLista(lista);
  187.         ultimo->siguiente = nuevoNodo;
  188.     }
  189.  
  190.     return lista;
  191. }
  192.  
  193. nodo * agregarEnOrden(nodo * lista, nodo * nuevoNodo)
  194. {
  195.     if (lista == NULL)
  196.     {
  197.         lista = nuevoNodo;
  198.     }
  199.     else if (nuevoNodo->unaPersona.edad < lista->unaPersona.edad)
  200.     {
  201.         lista = agregarAlPpio(lista,nuevoNodo);
  202.     }
  203.     else
  204.     {
  205.         nodo * seguidora = lista;
  206.         nodo * anterior = lista;
  207.         while ((seguidora!=NULL)&&(nuevoNodo->unaPersona.edad >  seguidora->unaPersona.edad))
  208.         {
  209.             anterior = seguidora;
  210.             seguidora = seguidora->siguiente;
  211.         }
  212.         anterior->siguiente = nuevoNodo;
  213.         nuevoNodo->siguiente = seguidora;
  214.     }
  215.     return lista;
  216. }
  217.  
  218. nodo * borrarNodo(nodo * lista, int datoABorrar)
  219. {
  220.     nodo * anterior = lista;
  221.     nodo * aBorrar = lista;
  222.  
  223.     //primer caso
  224.     if ((aBorrar!=NULL) && (aBorrar->unaPersona.edad == datoABorrar))
  225.     {
  226.         lista = lista->siguiente;
  227.         free(aBorrar);
  228.     }
  229.     else
  230.     {
  231.         while ((aBorrar!=NULL)&&(aBorrar->unaPersona.edad != datoABorrar))
  232.         {
  233.               anterior = aBorrar;
  234.               aBorrar = aBorrar->siguiente;
  235.         }
  236.         if (aBorrar!=NULL)
  237.         {
  238.             anterior->siguiente = aBorrar->siguiente;
  239.             free(aBorrar);
  240.         }
  241.     }
  242.     return lista;
  243. }
  244.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement