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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con listas en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con listas en c  (Leído 1,220 veces)
thorniton

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con listas en c
« en: 10 Noviembre 2015, 17:43 pm »

no me recorre el apuntador en la funcion borrar, alguien que me pueda ayudar?
 mi codigo es este:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct lista{                                                                   // Aqui se declara la estructura que tiene cada nodo de la lista
   char nombres[30];                                                           // Este campo es para datos
   struct lista *ap_sgte_nodo;                                                 // Este es el apuntador al nodo siguiente
};
typedef struct lista nodo;                                                      // Y se define el tipo de dato como nodo

void menu()                                                                     // Esta funcion contiene el encabezado y el mneu del sistema
{
   puts("");
   puts("*****************************************");
   puts("Este programa crea una lista de nombres");
   puts("1. Crear la lista");
   puts("2. Insertar nombre");
   puts("3. Borrar nombre");
   puts("4. Salir");
   puts("****************************************");
}

void llenar(nodo *direccion)
{
   puts("Teclea el nombre a agregar en lista, para terminar la lista teclea FIN ");
   fflush(stdin);
   scanf("%s",direccion->nombres);
   if(strcmp(direccion->nombres,"FIN")==0)
      {
         direccion->ap_sgte_nodo=NULL;
      }
   else
      {
         direccion->ap_sgte_nodo=(nodo*)malloc(sizeof(nodo));
         llenar(direccion->ap_sgte_nodo);
      }
   return;   
}

void desplegar(nodo *direccion)
{
   if(direccion->ap_sgte_nodo != NULL)
      {
         printf("%s \n",direccion->nombres);
         desplegar(direccion->ap_sgte_nodo);
         
      }
   return;   
}

nodo *insertar(nodo *direccion)
{    nodo *buscar(nodo *, char []);
     nodo *aptr_aux;
     nodo *nuevo_registro;
     char d_anterior[30];
     char nuevo_dato[30];
     
     puts("Teclea el nuevo dato");
     fflush(stdin);
     scanf("%s",nuevo_dato);
     puts("Colocar antes del dato:");
     fflush(stdin);
     scanf("%s",d_anterior);
     
     if(strcmp(direccion->nombres,d_anterior) == 0)
     {  nuevo_registro = (nodo *)malloc(sizeof(nodo));
        strcpy(nuevo_registro->nombres,nuevo_dato);
        nuevo_registro->ap_sgte_nodo = direccion;
        direccion = nuevo_registro;
     }
     else
     {   aptr_aux = buscar(direccion, d_anterior);
         if(aptr_aux == NULL)
         puts("No existe este dato en la lista");
         else
         {
         nuevo_registro = (nodo *)malloc(sizeof(nodo));
         strcpy(nuevo_registro->nombres,nuevo_dato);
         nuevo_registro->ap_sgte_nodo = aptr_aux->ap_sgte_nodo;
         aptr_aux->ap_sgte_nodo = nuevo_registro;
         }
      } 
     return direccion;
}

nodo *buscar(nodo *aptr_b, char d_buscar[])                                     //Declaracion de la funcion de busqueda
{   if(strcmp(aptr_b->ap_sgte_nodo->nombres,d_buscar) == 0)                     //Verificar si en el primer nodo esta el dato buscado
        return(aptr_b);                                                         //Si es asi, regersar el apuntador
    else if(aptr_b->ap_sgte_nodo->ap_sgte_nodo == NULL)                         //Sino verificar si se esta en el ultimo nodo
             return(NULL);                                                      //Si es asi regresar null
         else buscar(aptr_b->ap_sgte_nodo, d_buscar);                           //Sino continuar la busqueda
}

nodo *borrar(nodo *direccion)
{    nodo *buscar(nodo *,char []);                                              //Declaraci?n de la funcion buscar
     nodo *ap_aux;                                                              //Apuntador auxiliar
     char nombre_borrar[30];                                                    //Arreglo para guardar el dato a borrar
     nodo *temporal;
     puts("Teclea el nombre a borrar");                                         //Solicita el nombre a borrar
     scanf("%s",nombre_borrar);                                                 //Recibe el nombre a borrar
     if(strcmpi(direccion->nombres,nombre_borrar) == 0)                         //Verifica si es el primer dato
     {
         temporal = direccion->ap_sgte_nodo;                                    //Si lo es guarda su apuntador al nodo siguiente en temporal
         free(direccion);                                                       //Libera la memoria utilizada
         direccion = temporal;                                                  //El apuntador inicial se le asigna el nodo siguiente
      }
      else
      {
          ap_aux = buscar(direccion,nombre_borrar);                             //Sino invoca la funcion buscar y asigna a nodo_aux la direccion buscada
          if(ap_aux == NULL)                                                    //Si la funcion buscar regresa un nulo signiifica que el dato no esta en la lista
          puts("Este nombre no se encuentra en la lista");
          else temporal = ap_aux->ap_sgte_nodo->ap_sgte_nodo;                   //Sino avanza al siguiente nodo
          free(ap_aux->ap_sgte_nodo);                                           //Libera ese nodo
          ap_aux->ap_sgte_nodo = temporal;                                      //Y asignale la direccion del nodo anterior
       }
     return direccion;                                                          //Regresa al apuntador a primero
}

int main()                                                                      // Declaracion de la funcion principal
{
   int continua=0;                                                             // Variables para: mantener el ciclo de operacion
   int opcion;                                                                 // opciones del menu
   nodo *inicio;                                                               // Variable de apuntador tipo estructura para ubicar el inicio de la lista
   while(continua==0)                                                         
      {
         menu();
         puts("");
         puts("Teclea la opcion que desees:");
         fflush(stdin);
         scanf("%d",&opcion);
         switch(opcion)
            {
               case 1:
                  inicio=(nodo*)malloc(sizeof(nodo));
                  llenar(inicio);
                  desplegar(inicio);
                  puts("Termina crear lista");
                  break;
               case 2:
                  insertar(inicio);
                      puts("");
                      puts("Lista actualizada:");
                      desplegar(inicio);
                      break;
               case 3:
                  borrar(inicio);
                      puts("");
                  puts("Lista actualizada");
                  desplegar(inicio);
                  break;
               case 4:
                   puts("Saliendo...");
                  exit(0);         
            }
         
      }
}


En línea

furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
Re: Ayuda con listas en c
« Respuesta #1 en: 10 Noviembre 2015, 20:44 pm »

strcmpi no existe es strcmp y creo que es el único error , ya lo compile y corrió bien, es una cochinada tú código , deberías indentarlo, otra cosa utiliza las etiquetas GesHi para poner código , ya que es ilegible de esta manera.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con 2 LISTAS
Programación Visual Basic
forrestgump 0 1,290 Último mensaje 4 Junio 2008, 22:25 pm
por forrestgump
Uso de Listas: Subprograma que lea 2 listas y forme una.
Dudas Generales
hbenitez 2 3,303 Último mensaje 8 Agosto 2010, 20:11 pm
por hbenitez
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 5,149 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Ayuda con codigo de Listas [C++]
Programación C/C++
Lakon 0 5,054 Último mensaje 1 Noviembre 2010, 18:32 pm
por Lakon
ayuda en listas
Programación C/C++
josue_tux 1 1,804 Último mensaje 28 Junio 2011, 01:00 am
por leogtz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines