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)
| | |-+  [Resuelto]Duda lista simple enlazada en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto]Duda lista simple enlazada en C  (Leído 3,505 veces)
Zelandya

Desconectado Desconectado

Mensajes: 3


Ver Perfil
[Resuelto]Duda lista simple enlazada en C
« en: 30 Agosto 2012, 04:33 am »

Hola soy nueva en el foro, estoy haciendo un trabajo para la facu y estoy intentando declarar una lista enlazada simple:

la idea es la siguiente, con esta estructura quiero crear una lista que segun el string que reciba, aloco la cantidad de memoria exacta para esa palabra


Código
  1. struct nodo{
  2.   char *palabra;
  3.   struct nodo *sig;
  4. };
  5.  
  6. struct structCSV {
  7. char linea[4098];
  8. struct nodo *P;
  9.  
  10. } CSV;


con esa estructura llege a hacer algo como esto:

Código
  1. void aniadir_final(char dato[]){
  2.   struct nodo *q;
  3.   struct nodo *a;
  4.   q=(struct nodo *)malloc(sizeof(struct nodo));
  5.   if (CSV.P==NULL)
  6.        {
  7.            q->sig=NULL;
  8.            CSV.P=q;
  9.        }
  10.   else
  11.        {
  12.         while(CSV.P-> sig != NULL)
  13.         q->sig=NULL;
  14.        }
  15.   q->registro=(char *)malloc(strlen(dato)+1);
  16.  
  17.  
  18.    }
  19. }

pero no puedo hacerlo andar, alguna sugerencia?


« Última modificación: 30 Agosto 2012, 19:36 pm por Zelandya » En línea

xiruko


Desconectado Desconectado

Mensajes: 438


Ver Perfil
Re: Duda lista simple enlazada en C
« Respuesta #1 en: 30 Agosto 2012, 05:18 am »

hola, hace poco respondi a una duda parecida y quizas te sirva de ayuda:

http://foro.elhacker.net/programacion_cc/duda_lista_simple_enlazada_c-t368885.0.html;msg1773697#msg1773697

me dio ganas de hacer el codigo de lo que pides, lo he probado y diria que funciona, aunque falta alguna funcion que recorra la lista para buscar y mostrar algo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define TAM 256
  6.  
  7. struct lista {
  8. char* palabra;
  9. struct lista *sig;
  10. };
  11.  
  12. struct lista* InsertarPalabra(struct lista* l, char* word);
  13. struct lista* EliminarLista(struct lista* l);
  14. void MostrarPalabras(struct lista* l);
  15.  
  16. int main(int argc, char** argv) {
  17.  
  18. char bufer[TAM], opt;
  19. struct lista* l=NULL;
  20.  
  21. do {
  22. printf("Inserta la palabra: ");
  23. memset(bufer, '\0', sizeof(bufer));
  24. fgets(bufer, TAM-1, stdin);
  25. bufer[strlen(bufer)-1]='\0';
  26. l=InsertarPalabra(l, bufer);
  27. printf("Quieres salir? y/Y ");
  28. scanf("%c", &opt);
  29. while(getchar()!='\n');
  30. } while(opt!='y' && opt!='Y');
  31.  
  32. MostrarPalabras(l);
  33. l=EliminarLista(l);
  34. return 0;
  35. }
  36.  
  37. struct lista* InsertarPalabra(struct lista* l, char* word) {
  38.  
  39. struct lista *q, *p;
  40.  
  41. q=(struct lista*)malloc(sizeof(struct lista));
  42. q->palabra=(char*)malloc(strlen(word)*sizeof(char));
  43. strncpy(q->palabra, word, sizeof(q->palabra));
  44. q->sig=NULL;
  45.  
  46. if (l==NULL) return q;
  47. p=l;
  48. while (p->sig!=NULL) p=p->sig;
  49. p->sig=q;
  50.  
  51. return l;
  52. }
  53.  
  54. struct lista* EliminarLista(struct lista* l) {
  55.  
  56. struct lista *q, *p;
  57.  
  58. q=l;
  59. while (q!=NULL) {
  60. p=q->sig;
  61.                free(q->palabra);
  62. free(q);
  63. q=p;
  64. }
  65.  
  66. return NULL;
  67. }
  68.  
  69. void MostrarPalabras(struct lista* l) {
  70.  
  71. struct lista *q;
  72.  
  73. q=l;
  74. while (q!=NULL) {
  75. printf("%s %d\n", q->palabra, (int)strlen(q->palabra));
  76. q=q->sig;
  77. }
  78. }
  79.  

espero que sirva. un saludo!

edito: he hecho la funcion para mostrar las palabras y el numero de caracteres de cada una (incluida el null al final) para saber si tenia algun error y si que tenia alguno...  :silbar: ahora si que funciona bien, y ya que estoy lo dejo acabado.

Citar
te pasaste xiruko , muchisimas gracias. Solo esperaba alguna sujerencias. De verdad muchisimas gracias ^^ es muy util

de nada!


« Última modificación: 30 Agosto 2012, 05:49 am por xiruko » En línea

Fire544

Desconectado Desconectado

Mensajes: 85


"Escucha el sonido del 0, 1"


Ver Perfil WWW
Re: Duda lista simple enlazada en C
« Respuesta #2 en: 30 Agosto 2012, 05:26 am »

Hola Zelandya, mira lo primero es saber cuales datos vas a manejar, en tu caso una lista, lo segundo seria que tipo, dices enlazada, ps ahi tienes algo similar pero con muchos errores, a ver te corrigo: Es correcto hacer struct nodo{...}my_nodo;, pero no recomendado, lo mas factible seria un typedef struct nodo{}; nodo my_struct;, y recuerda dependiendo de tus necesidades es que trabajaras con listas tipo dinamicas o estaticas, tambien recuerda inicializar todo puntero a NULL en su declaracion es muy buena costumbre.!!!

Mira ejemplo:

Código
  1.  
  2. typedef struct nodo{
  3.        int valor;
  4.        struct nodo *sig;
  5.        };
  6.  
  7. nodo *primero=NULL;
  8.  
  9. nodo *add_nodo(nodo *nuevo, int val)
  10. {
  11.     nuevo=(struct nodo*)malloc(sizeof(nuevo));
  12.  
  13.     if(nuevo!=NULL)
  14.     {
  15.                    nuevo->valor=val;
  16.                    nuevo->sig=NULL;
  17.                    }
  18.  
  19.                    if(nuevo->sig==NULL)
  20.                    {
  21.                                        nuevo->sig=primero;
  22.                                        primero=nuevo;
  23.                                        }
  24.                                        return nuevo;
  25.     }
  26.  
  27. nodo *ver_nodo()
  28. {
  29.     nodo *ver_lista=primero;
  30.  
  31.     while(ver_lista!=NULL)
  32.     {
  33.                           printf("%i", ver_lista->valor);
  34.                           ver_lista=ver_lista->sig;
  35.                           }
  36.                           return ver_lista;
  37.     }
  38.  
  39. int main(int argc, char **argv)
  40. {
  41.    nodo *data=NULL;
  42.  
  43.    add_nodo(data, 6);
  44.    add_nodo(data, 4);
  45.    add_nodo(data, 0);
  46.    add_nodo(data, 1);
  47.    add_nodo(data, 7);
  48.    add_nodo(data, 0);
  49.    add_nodo(data, 1);
  50.  
  51.    ver_nodo();
  52.  
  53.    }
  54.  

Suerte !!  :xD
« Última modificación: 30 Agosto 2012, 06:08 am por Fire544 » En línea

"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".
Zelandya

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Duda lista simple enlazada en C
« Respuesta #3 en: 30 Agosto 2012, 05:27 am »

te pasaste xiruko , muchisimas gracias. Solo esperaba alguna sujerencias. De verdad muchisimas gracias ^^ es muy util
En línea

Zelandya

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Duda lista simple enlazada en C
« Respuesta #4 en: 30 Agosto 2012, 05:41 am »

muchisimas gracias a ti tambien Fire544 ^^
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda lista simple enlazada C
Programación C/C++
netca 3 3,848 Último mensaje 16 Agosto 2012, 00:06 am
por twins
Insertar un elemento ordenadamente en una lista enlazada simple
Programación C/C++
NathanD 4 26,602 Último mensaje 27 Abril 2013, 14:25 pm
por NathanD
borrar elemento de la lista enlazada simple
Programación C/C++
d91 2 3,281 Último mensaje 9 Junio 2014, 13:44 pm
por d91
Lista enlazada simple – listas ligadas [C]
Programación C/C++
DanielPy 3 2,837 Último mensaje 9 Junio 2015, 17:38 pm
por ivancea96
Programa estructura cola con lista simple enlazada en C++
Programación C/C++
pedro0620 0 1,674 Último mensaje 4 Mayo 2016, 02:35 am
por pedro0620
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines