Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - samur88

#61
Muchísimas gracias por la respuesta, ahora ya me quedo todo claro ^-^ Seguiré viendo las listas, espero que no me surjan muchas dudas mas por que la verdad es que me traen loco los malditos punteros y listas.
Un saludo y gracias de nuevo ^^.
#62
Muchas gracias por la resuesta, funciona a la perfección, ¿Podrías explicármelo por favor?
No entiendo por que tu código no da fallo de segmentación, ya que en algún momento aux sera igual a NULL, y por lo tanto aux->next no existirá, lo cual sería fallo de segmentación pero aún asi el código me funciona.
Podrías echarme una mano para comprender lo que has hecho ^^
Un saludo, y gracias de nuevo.
#63
Saludos.
El tema de las listas en C me esta volviendo loco, a ver si podéis ayudarme en el siguiente error.
Tengo la siguiente lista abierta, el caso es que el programa me compila pero supuestamente en la lista solo esta el primer elemento, a la hora de mostrármela solo me muestra el 4.

#include <stdio.h>
#include <stdlib.h>

typedef struct listacompleta {
         int dato;
         struct listacompleta *next;
        }lista;

lista *primero;

void add_nod(int dato){
  lista *nuevo,*aux;
  nuevo = (lista *) malloc (sizeof(lista));
  nuevo->dato = dato;
  nuevo->next = NULL;       
  if(primero == NULL){
              aux = primero;
              primero = nuevo;
             } else {
                     aux = primero;
                     while(aux != NULL){
                       aux = aux->next;
                      }
                     aux = nuevo;
                    }
 
}


void see_list(lista *primero){
      lista *auxiliar;
      int i;
     
      auxiliar = primero;
      while (auxiliar!=NULL) {
            printf( "%d\n",auxiliar->dato);
            auxiliar = auxiliar->next;
            i++;
      }
      if (i==0) printf( "\nLa lista está vacía!!\n" );
     
     
     }
main(){
primero = NULL;
add_nod(4);
add_nod(3);
add_nod(5);
see_list(primero); 
}

Un saludo.
#64
Muchas gracias por todo qily, mirare mas ejemplos y preguntare las dudas que tenga en el foro ^.^.
Saludos y gracias de nuevo.
#65
Gracias qily, una cosita que no entiendo muy bien, ultimo contendría NULL, eso quiere decir que ultimo-next no existiria, ¿no? sería algo así como que ya que las dos variables de "ultimo" serian Null por lo tanto ultimo-next no estaría.
¿Algo así me quieres decir?
Por cierto, me puedes mandar algún enlace donde expliquen bien todos los fallos de segmentación, es que en la otra pagina me han quedado clara algunas cosas, pero esto de los bucles no muy claras.
Un saludo.
#66
Muchas gracias por la respuesta ^^ el codigo que me pusiste funciono a la perfección, pero no veo donde se encuentra el error de segmentación en el que yo puse, puedes explicármelo?
Un saludo.
#67
Muchísimas gracias por la respuesta, ahora ya lo tengo todo claro, era por la localidad de las variables en las funciones de hay que mi segundo codigo funcione y este no, ya que el segundo devolveria un puntero a la zona de declaracion que declare en la función.

Tengo una duda, tanto en el código que me has pasado como en el segundo, no puedo recorrer la lista de la siguiente forma, podrías ayudarme:


ultimo = primero;
while (ultimo->next != NULL){
     printf("%d",ultimo->data);
     ultimo = ultimo->next;
     }

Me compila y me ejecuta pero no me imprime los valores de la lista.
Un saludo y gracias de nuevo.
#68
Programación C/C++ / Problema con listas enlazadas.
28 Noviembre 2010, 18:26 PM
Hola, tengo el siguiente problema que me trae totalmente loco con el tema de las listas enlazadas en C.

El caso es que tengo el siguiente código:


#include <stdio.h>
#include <stdlib.h>

typedef struct elementslist {
         int data;
         struct elementslist *next;
        }element;

element *first,*nodo,*nodo2;

void insertarnodo(element *nodo, int dato){
                nodo = (element*) malloc(sizeof(element));
                nodo->data = dato;
                nodo->next = NULL;
                first = nodo;
     }

main(){
first = NULL;
insertarnodo(nodo,5);
printf("%d\n",nodo->data);
}


Este código me compila pero cuando lo ejecuto se me cierra y no imprime el valor de la lista.
Luego tengo este otro que si me funciona pero no se si esta mal o bien programado, el caso es que me gustaría saber por que el primero no me funciona y el segundo si, ya que al tratarse de variables globales no tengo por que retornar ningún nodo como en el segundo.


#include <stdio.h>
#include <stdlib.h>

typedef struct elementslist {
         int data;
         struct elementslist *next;
        }element;

element *first,*nodo,*nodo2;

element *insertarnodo(element *nodo, int dato){
                nodo = (element*) malloc(sizeof(element));
                nodo->data = dato;
                nodo->next = NULL;
                first = nodo;
                return nodo;
     }

main(){
first = NULL;
nodo = insertarnodo(nodo,5);
printf("%d\n",nodo->data);
}


Un saludo a todos.
#69
Muchas gracias por todas las respuestas, siento no haber podido contestar antes, he estado de exámenes y he tenido problemas con el ISP de internet y por eso no lo hice antes, ya por suerte se ha arreglado todo.

Tu idea de la variable temporal la tendré muy en cuenta, realmente si pongo un numero muy grande no creo que una cadena llegue a tener mas de ese numero y luego con realloc podría disminuirla a lo que ocupa la cadena.

Una pregunta, la idea de leer carácter por carácter es mas lento que el algoritmo propuesto por Eternal Idol de la variable temporal?

Y una ultima cosa, realmente la cadena en C no se almacena hasta que se pulsa enter, ¿no hay una forma de que cuando pulse enter todo lo que este en studin o en la entrada de datos que internamente el sistema operativo administra sacar los caracteres que han sido leídos en esa entrada y con ese tamaño darle el valor a la cadena?

Un saludo y gracias de nuevo.
#70
Muchas gracias Eternal Idol, en realidad no quiero decir antes, si no una vez que la ha ingresado, yo es que ahora mismo no estoy muy puesto en memoria dinamica, pero podría hacerse algo asi:

Sería coger y poner un tamaño mínimo de un byte, si la cadena no entra en ese tamaño entonces con realloc se asigna un nuevo de tamaño de los mismos byte que la cadena.

Un saludo.