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)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  warnings
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: warnings  (Leído 6,980 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: warnings
« Respuesta #10 en: 28 Diciembre 2012, 18:16 pm »

Para imprimirlos en orden inverso se puede desarrollar una función recursiva, mas o menos así:
Código
  1. void imprimir_rev(struct nodo *p)
  2. {
  3.   if (p != NULL){
  4.      imprimir_rev(p->sig);
  5.  
  6.      /* Imprimir informacion del nodo apuntado por p */
  7.   }
  8. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: warnings
« Respuesta #11 en: 29 Diciembre 2012, 00:19 am »

muchas gracias twins y rir3760 por sus respuestas, disculpen si pregunto mucho lo que pasa es que este tema de punteros es de los que más se me dificulta

ahora quiero que en vez de que me ingrese los elementos por la cabeza me los ingrese por el final, pero tengo una duda, ya se que tengo que tener un puntero que recorra la lista desde la cabeza hasta que apunte a NULL (o sea el final) pero no se si hacerlo así:

Código
  1. NODO *ultimo;
  2.    ultimo=*cabeza;
  3.    while(ultimo->sig!=NULL)
  4.       ultimo=ultimo->sig;

o así

Código
  1. NODO *ultimo;
  2.    ultimo=*cabeza;
  3.    while(ultimo!=NULL)
  4.       ultimo=ultimo->sig;

en uno último tiene campo siguiente y en el otro no


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: warnings
« Respuesta #12 en: 29 Diciembre 2012, 01:33 am »

Código
  1. NODO *ultimo;
  2.    ultimo=*cabeza;
  3.    while(ultimo->sig!=NULL)
  4.       ultimo=ultimo->sig;
Con esto el programa revienta al procesar una lista vacía.

Código
  1. NODO *ultimo;
  2.    ultimo=*cabeza;
  3.    while(ultimo!=NULL)
  4.       ultimo=ultimo->sig;
Y aquí no se actualizaría correctamente si, de nuevo, la lista esta vacía.

Para insertar un nodo al final:
Código
  1. void insertar_ultimo(struct nodo **p, struct nodo *nodo)
  2. {
  3.   while (*p != NULL)
  4.      p = &(*p)->sig;
  5.  
  6.   *p = nodo;
  7. }
Donde el primer argumento es la dirección en memoria de la variable que almacena la dirección en memoria del primer nodo (Ouch!), usualmente "&primero". El segundo argumento es la dirección en memoria del nodo a insertar.

Por ultimo y en el caso ideal cada función debe realizar una sola operación, por ejemplo la función que agrega pide los datos y llama a las funciones para 1) Crear un nodo y 2) Insertarlo en la lista.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: warnings
« Respuesta #13 en: 31 Diciembre 2012, 01:23 am »

saludos

tenías razón si tronaba el programa al querer insertar por el final ya que la lista está vacia, lo que hice fue primero comprobar si estaba vacía, ahora el programa ya compila perfectamente pero me gustaría agregar la función

Código
  1. int vacia(NODO *cabeza)
  2. {
  3.    if(cabeza==NULL)
  4.       return 1;
  5.    else
  6.       return 0;
  7. }
  8.  


dentro de mi otra función, como una llamada para verificar si hay o no más elementos en la lista

Código
  1. void insertar_final(NODO **cabeza,int x)
  2. {
  3.    NODO *ultimo;
  4.    if(*cabeza==NULL)//Aquí checa si está vacía
  5.        *cabeza = crear_nodo(x);
  6.    else
  7.    {
  8.        ultimo=*cabeza;
  9.        while(ultimo->sig!=NULL)
  10.           ultimo=ultimo->sig;
  11.  
  12.        ultimo->sig = crear_nodo(x);
  13.        ultimo = ultimo->sig;
  14.        ultimo->sig = NULL;
  15.    }
  16. }
  17.  

pero el problema es que cabeza la tengo como doble puntero **cabeza y no sabría como hacerlo aunque en si ya imprime lo que le pido

gracias y feliz áño nuevo ;D
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fase test: Mi intranet :: Matriculas - notas - pagos - etc :: Comentar Warnings
Desarrollo Web
Hadess_inf 5 3,259 Último mensaje 4 Julio 2010, 10:35 am
por Joker
Warnings en tratamiento de ficheros con C++ Builder XE
Programación C/C++
mario_tko 1 3,168 Último mensaje 15 Noviembre 2011, 16:01 pm
por do-while
Warnings en gcc -Wall
Programación C/C++
soyloqbuskas 3 3,926 Último mensaje 4 Abril 2012, 03:51 am
por Beakman
warnings en compilacion
Programación C/C++
ccsponcer3 3 3,012 Último mensaje 5 Junio 2016, 18:03 pm
por HardForo
Implementar warnings en compilador
Programación General
Adri124 0 1,760 Último mensaje 28 Junio 2016, 21:16 pm
por Adri124
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines