elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 [2]
11  Programación / Programación C/C++ / insertar un nodo después de otro en: 16 Mayo 2010, 14:22 pm
Hola, tengo el siguiente programa que me permite añadir al principio, al final, recorrer la lista y mostrarla por pantalla, borrar un nodo. Lo que no me deja es insertar un nodo después de otro.

Pongo un ejemplo: Miguel Angel 25, Gloria 32, Pablo 50
Borro Gloria 32 y quiero insertar un nuevo nodo entre el primero y el tercero, ya que he borrado el segundo.
Espero que puedan ayudrame, gracias.
Este es el programa:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define LEE_CAD(c,n) { int i=0; \
  6.                      c[i]=getchar();\
  7.     while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  8.     while ((c[i]!='\n') && (i < (n-1))){ \
  9.        i++;\
  10. c[i]=getchar(); }\
  11.     c[i]='\0'; }
  12.  
  13. #define T_NOM 101
  14. #define T_EDAD 3
  15.  
  16.  
  17. struct persona {
  18. char nom[100];
  19.        char edad[3];
  20. struct persona *siguiente;
  21. };
  22.  
  23. int main(){
  24.         struct persona *lista=NULL;
  25.         struct persona *nodo;
  26.  
  27.         int op;
  28.         void alta_inicio();
  29.         void alta_final();
  30.         void alta_despues_de();
  31.         void recorrer_lista();
  32.         void borrar_nodo();
  33.         struct persona * buscar_nodo();
  34.  
  35.         do{
  36.            do{
  37.               printf("Elija una opción:\n");
  38.               printf("1--> Añadir al principio.\n");
  39.               printf("2--> Añadir al final.\n");
  40.               printf("3--> Recorrer la lista.\n");
  41.               printf("4--> Buscar nodo.\n");
  42.               printf("5--> Eliminar nodo.\n");
  43.               printf("6--> Añadir despues de...\n");
  44.               printf("7--> Salir.\n");
  45.               scanf("%d",&op);
  46.            }while((op < 1) || (op > 7));
  47.         if(op != 4)  
  48.            switch(op){
  49.                case 1: { alta_inicio(&lista);break;}
  50.                case 2: { alta_final(&lista);break;}
  51.                case 3: { recorrer_lista(&lista);break;}
  52.                case 4: { nodo=buscar_nodo(&lista);
  53.                          printf("\n%s\n",nodo->nom);break;}
  54.                case 5: { borrar_nodo(&lista);break;}
  55.                case 6: { alta_despues_de(&lista);break;}
  56.            }
  57.         }while(op != 7);
  58.         exit(0);
  59. }
  60. ////////////////////////////////////////////////////////////////////////////
  61. void alta_inicio(struct persona **lista){
  62.         struct persona *nuevo_nodo;
  63.         nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  64.         if(nuevo_nodo != NULL){
  65.            nuevo_nodo->siguiente = *lista;
  66.            *lista = nuevo_nodo;
  67.            printf("Nombre: ");
  68.            LEE_CAD(nuevo_nodo->nom,T_NOM);
  69.            printf("Edad: ");
  70.            LEE_CAD(nuevo_nodo->edad,T_EDAD);
  71.         }
  72. }            
  73. ////////////////////////////////////////////////////////////////////////////////
  74. void recorrer_lista(struct persona **lista){
  75.          struct persona *nodo_aux;
  76.          nodo_aux = *lista;
  77.          while(nodo_aux != NULL){
  78.               printf("%s\n",nodo_aux->nom);
  79.               printf("%s\n",nodo_aux->edad);
  80.               nodo_aux = nodo_aux->siguiente;
  81.          }
  82. }
  83. //////////////////////////////////////////////////////////////////////////////
  84. void alta_final(struct persona **lista){
  85.          struct persona *nuevo_nodo;
  86.          struct persona *nodo_aux;
  87.  
  88.          nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  89.          if(nuevo_nodo != NULL){
  90.             nodo_aux = *lista;
  91.             while(nodo_aux->siguiente != NULL)
  92.                nodo_aux = nodo_aux->siguiente;
  93.                nodo_aux->siguiente=nuevo_nodo;
  94.                nuevo_nodo->siguiente=NULL;
  95.                printf("Nombre del nuevo elemento: ");
  96.                LEE_CAD(nuevo_nodo->nom,T_NOM);
  97.                printf("Edad del nuevo elemento: ");
  98.                LEE_CAD(nuevo_nodo->edad,T_EDAD);
  99.          }
  100.          else
  101.               printf("Error al tomar memoria del nuevo nodo.\n");
  102. }
  103. /////////////////////////////////////////////////////////////////////////////////
  104. struct persona *buscar_nodo(struct persona **lista){
  105.          struct persona *nodo_aux, *resultado;
  106.          char nom[100];
  107.          char edad[3];
  108.          int encontrado = 0;
  109.  
  110.          printf("Nombre a buscar: ");
  111.          scanf("%99s",nom);
  112.  
  113.          nodo_aux = *lista;
  114.          while((nodo_aux->siguiente != NULL) && (!encontrado)){
  115.                if(strcmp(nom,nodo_aux->nom) == 0)
  116.                  encontrado = 1;
  117.                else
  118.                    nodo_aux = nodo_aux->siguiente;
  119.          }
  120.          if((nodo_aux->siguiente == NULL) && (!encontrado))
  121.              if(strcmp(nom,nodo_aux->nom) == 0)
  122.                 encontrado = 1;
  123.          if(encontrado)
  124.            resultado = NULL;
  125.          return(resultado);
  126.  
  127.          printf("Edad a buscar: ");
  128.          scanf("%2s",edad);
  129.  
  130.          nodo_aux = *lista;
  131.          while((nodo_aux->siguiente != NULL) && (!encontrado)){
  132.                if(strcmp(edad,nodo_aux->edad) == 0)
  133.                  encontrado = 1;
  134.                else
  135.                    nodo_aux = nodo_aux->siguiente;
  136.          }
  137.          if((nodo_aux->siguiente == NULL) && (!encontrado))
  138.              if(strcmp(edad,nodo_aux->edad) == 0)
  139.                 encontrado = 1;
  140.          if(encontrado)
  141.            resultado = NULL;
  142.          return(resultado);
  143. }
  144. ////////////////////////////////////////////////////////////////////////////////
  145. void borrar_nodo(struct persona **lista){
  146.          struct persona *nodo_aux, *nodo_anterior;
  147.          char nom[100];
  148.          char edad[3];
  149.          int encontrado = 0;
  150.  
  151.          printf("Nombre a borrar: ");
  152.          scanf("%99s",nom);
  153.          nodo_aux = *lista;
  154.  
  155.          if(strcmp(nom,nodo_aux->nom) == 0){
  156.            *lista=nodo_aux->siguiente;
  157.            free(nodo_aux);}
  158.          else{
  159.               nodo_anterior = nodo_aux;
  160.               nodo_aux = nodo_aux->siguiente;
  161.               while((nodo_aux->siguiente != NULL) && (!encontrado)){
  162.                   if(strcmp(nom,nodo_aux->nom) == 0)          
  163.                     encontrado = 1;
  164.                   else{
  165.                      nodo_anterior = nodo_aux;
  166.                      nodo_aux = nodo_aux->siguiente;
  167.                   }
  168.               }  
  169.               if((nodo_aux->siguiente == NULL) && (!encontrado))
  170.                  if(strcmp(nom,nodo_aux->nom) == 0)
  171.                     encontrado = 1;
  172.               if(encontrado){
  173.                  nodo_anterior->siguiente = nodo_aux->siguiente;
  174.                  free(nodo_aux);
  175.               }
  176.          }
  177.          printf("Edad a borrar: ");
  178.          scanf("%2s",edad);
  179.          nodo_aux = *lista;
  180.  
  181.          if(strcmp(edad,nodo_aux->edad) == 0){
  182.            *lista=nodo_aux->siguiente;
  183.            free(nodo_aux);}
  184.          else{
  185.               nodo_anterior = nodo_aux;
  186.               nodo_aux = nodo_aux->siguiente;
  187.               while((nodo_aux->siguiente != NULL) && (!encontrado)){
  188.                   if(strcmp(edad,nodo_aux->edad) == 0)          
  189.                     encontrado = 1;
  190.                   else{
  191.                      nodo_anterior = nodo_aux;
  192.                      nodo_aux = nodo_aux->siguiente;
  193.                   }
  194.               }  
  195.               if((nodo_aux->siguiente == NULL) && (!encontrado))
  196.                  if(strcmp(edad,nodo_aux->edad) == 0)
  197.                     encontrado = 1;
  198.               if(encontrado){
  199.                  nodo_anterior->siguiente = nodo_aux->siguiente;
  200.                  free(nodo_aux);
  201.               }
  202.          }
  203. }
  204. ///////////////////////////////////////////////////////////////////////////////
  205. void alta_despues_de(struct persona **lista){
  206.           struct persona *nuevo_nodo;
  207.           struct persona *nodo_aux;
  208.           char nom[100];
  209.           char edad[3];
  210.           int encontrado = 0;
  211.  
  212.           printf("Nombre a buscar para insertar después de el: ");
  213.           scanf("%99s",nom);
  214.  
  215.           nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  216.  
  217.           if(nuevo_nodo != NULL){
  218.             nodo_aux = *lista;
  219.             while((nodo_aux->siguiente != NULL) && (!encontrado)){
  220.                  if(strcmp(nom,nodo_aux->nom) == 0)
  221.                     encontrado = 1;
  222.                  else{
  223.                       nodo_aux = nodo_aux->siguiente;
  224.                  }
  225.             }
  226.             if((nodo_aux->siguiente == NULL) && (!encontrado))
  227.                if(strcmp(nom,nodo_aux->nom) == 0)
  228.                  encontrado = 1;
  229.  
  230.             if(encontrado){
  231.                nuevo_nodo->siguiente=nodo_aux->siguiente;
  232.                nodo_aux->siguiente=nuevo_nodo;
  233.                printf("Nombre del nuevo elemento: ");
  234.                scanf("%99s",nuevo_nodo->nom);
  235.             }
  236.             else{
  237.                  printf("Elemento no encontrado.\n");
  238.                  free(nuevo_nodo);
  239.             }
  240.           }
  241.           printf("Edad a buscar para insertar después de el: ");
  242.           scanf("%2s",edad);
  243.  
  244.           nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  245.  
  246.           if(nuevo_nodo != NULL){
  247.             nodo_aux = *lista;
  248.             while((nodo_aux->siguiente != NULL) && (!encontrado)){
  249.                  if(strcmp(edad,nodo_aux->edad) == 0)
  250.                     encontrado = 1;
  251.                  else{
  252.                       nodo_aux = nodo_aux->siguiente;
  253.                  }
  254.             }
  255.             if((nodo_aux->siguiente == NULL) && (!encontrado))
  256.                if(strcmp(edad,nodo_aux->edad) == 0)
  257.                  encontrado = 1;
  258.  
  259.             if(encontrado){
  260.                nuevo_nodo->siguiente=nodo_aux->siguiente;
  261.                nodo_aux->siguiente=nuevo_nodo;
  262.                printf("Edad del nuevo elemento: ");
  263.                scanf("%2s",nuevo_nodo->edad);
  264.             }
  265.             else{
  266.                  printf("Elemento no encontrado.\n");
  267.                  free(nuevo_nodo);
  268.             }
  269.           }
  270. }
12  Programación / Scripting / contar caracteres en: 13 Mayo 2010, 12:42 pm
Hola, esta tarde tengo examen y tengo este script que cuenta los caracteres de una cadena pasada como parámetro, pero me da este error: wc: pepe: No existe el fichero ó directorio
pepe tiene caracteres
Código
  1. #!/bin/bash
  2.  
  3. if [ -n $1 ]
  4. then
  5.    num_carac= `wc -c $1`
  6.    echo $1 "tiene" $num_carac "caracteres"
  7. else
  8.    echo "Error no se ha introducido ningún parámetro"
  9. fi
13  Programación / Scripting / multipliación de un número en: 8 Mayo 2010, 14:13 pm
Hola, tengo que mostrar la tabla de multiplicar de un número pasado como argumento, pero no me funciona:

Código
  1. #!/bin/bash
  2.  
  3. n=1
  4.  
  5. while [ $n -le 10 ]
  6. do
  7.   multi= `expr $1 \* $n`
  8.   echo $1 * $n = $multi
  9.   n = `expr $n + 1`
  10. done
  11.  
14  Programación / Scripting / script que ordena un texto ascendentemente o descendentemente [bash] en: 7 Mayo 2010, 12:38 pm
Hola, el siguiente script recibe como primer parámetro un archivo de texto y ordena las líneas de dicho archivo ascendentemente al pasarle una "A" como segundo parámetro o descendentemente al pasarle una "Z". Cuando lo ejecuto me sale esto: [: 16: missing ]

Código
  1. #!/bin/bash
  2.  
  3. if [ $# -ge 2 ]
  4. then
  5.     if [ -f $1 ] && [ $2 = "A"]
  6.     then
  7.        `cat $1 | sort -d#`
  8.     else
  9.         if [ -f $1 ] && [ $2 = "Z" ]
  10.         then
  11.            `cat $1 | sort -r`
  12.         fi
  13.     fi
  14. else
  15.    echo "Error: Falta pasar argumentos"
  16. fi  
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines