Autor
|
Tema: [Resuelto]Duda lista simple enlazada en C (Leído 3,844 veces)
|
Zelandya
Desconectado
Mensajes: 3
|
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 struct nodo{ char *palabra; struct nodo *sig; }; struct structCSV { char linea[4098]; struct nodo *P; } CSV;
con esa estructura llege a hacer algo como esto: void aniadir_final(char dato[]){ struct nodo *q; struct nodo *a; q =(struct nodo *)malloc(sizeof(struct nodo )); if (CSV.P==NULL) { q->sig=NULL; CSV.P=q; } else { while(CSV.P-> sig != NULL) q->sig=NULL; } } }
pero no puedo hacerlo andar, alguna sugerencia?
|
|
« Última modificación: 30 Agosto 2012, 19:36 pm por Zelandya »
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
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#msg1773697me 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. #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 256 struct lista { char* palabra; struct lista *sig; }; struct lista* InsertarPalabra(struct lista* l, char* word); struct lista* EliminarLista(struct lista* l); void MostrarPalabras(struct lista* l); int main(int argc, char** argv) { char bufer[TAM], opt; struct lista* l=NULL; do { printf("Inserta la palabra: "); memset(bufer , '\0', sizeof(bufer )); fgets(bufer , TAM -1, stdin ); l=InsertarPalabra(l, bufer); printf("Quieres salir? y/Y "); } while(opt!='y' && opt!='Y'); MostrarPalabras(l); l=EliminarLista(l); return 0; } struct lista* InsertarPalabra(struct lista* l, char* word) { struct lista *q, *p; q =(struct lista *)malloc(sizeof(struct lista )); strncpy(q ->palabra , word , sizeof(q ->palabra )); q->sig=NULL; if (l==NULL) return q; p=l; while (p->sig!=NULL) p=p->sig; p->sig=q; return l; } struct lista* EliminarLista(struct lista* l) { struct lista *q, *p; q=l; while (q!=NULL) { p=q->sig; q=p; } return NULL; } void MostrarPalabras(struct lista* l) { struct lista *q; q=l; while (q!=NULL) { q=q->sig; } }
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... ahora si que funciona bien, y ya que estoy lo dejo acabado. 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
Mensajes: 85
"Escucha el sonido del 0, 1"
|
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: typedef struct nodo{ int valor; struct nodo *sig; }; nodo *primero=NULL; nodo *add_nodo(nodo *nuevo, int val) { nuevo =(struct nodo *)malloc(sizeof(nuevo )); if(nuevo!=NULL) { nuevo->valor=val; nuevo->sig=NULL; } if(nuevo->sig==NULL) { nuevo->sig=primero; primero=nuevo; } return nuevo; } nodo *ver_nodo() { nodo *ver_lista=primero; while(ver_lista!=NULL) { printf("%i", ver_lista ->valor ); ver_lista=ver_lista->sig; } return ver_lista; } int main(int argc, char **argv) { nodo *data=NULL; add_nodo(data, 6); add_nodo(data, 4); add_nodo(data, 0); add_nodo(data, 1); add_nodo(data, 7); add_nodo(data, 0); add_nodo(data, 1); ver_nodo(); }
Suerte !!
|
|
« Ú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
Mensajes: 3
|
te pasaste xiruko , muchisimas gracias. Solo esperaba alguna sujerencias. De verdad muchisimas gracias ^^ es muy util
|
|
|
En línea
|
|
|
|
Zelandya
Desconectado
Mensajes: 3
|
muchisimas gracias a ti tambien Fire544 ^^
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda lista simple enlazada C
Programación C/C++
|
netca
|
3
|
4,090
|
16 Agosto 2012, 00:06 am
por twins
|
|
|
Insertar un elemento ordenadamente en una lista enlazada simple
Programación C/C++
|
NathanD
|
4
|
27,021
|
27 Abril 2013, 14:25 pm
por NathanD
|
|
|
borrar elemento de la lista enlazada simple
Programación C/C++
|
d91
|
2
|
3,588
|
9 Junio 2014, 13:44 pm
por d91
|
|
|
Lista enlazada simple – listas ligadas [C]
Programación C/C++
|
DanielPy
|
3
|
3,201
|
9 Junio 2015, 17:38 pm
por ivancea96
|
|
|
Programa estructura cola con lista simple enlazada en C++
Programación C/C++
|
pedro0620
|
0
|
1,923
|
4 Mayo 2016, 02:35 am
por pedro0620
|
|