Título: Duda lista simple enlazada C Publicado por: netca en 12 Agosto 2012, 00:14 am Tengo la siguiente estructura , y en el main cuando voy a imprimir solo imprime el primer elemento , se que tiene que ver algo con el malloc y la inicializacion de la lista pero no se como hacerlo y tampoco se porque me ocurre esto. Si alguien me pudiera ayudar estaria agradecido. Saludos!
Código
Título: Re: Duda lista simple enlazada C Publicado por: xiruko en 12 Agosto 2012, 00:58 am no acabo de entender tu codigo, mezclas en asignaciones punteros y structs, ademas de que a mi parecer esta algo desordenado... para arreglar esto, deberias tener una funcion que te inserte 1 nodo en la lista, 1 funcion que te elimine 1 nodo de la lista, y una funcion que te elimine la lista entera. luego otra funcion que te permita buscar cosas en ella. te dejo la funcion para crear 1 nodo, con el trozo de codigo en el main para hacer n nodos, y asi veras donde te has equivocado.
Código
y en el main, se usaria de esta manera para crear una lista con n nodos: Código
si quieres que te pase el codigo entero dimelo, era un problema bastante divertido que posteo un usuario el foro hace tiempo, aunque es algo largo y por eso no lo postee. un saludo Título: Re: Duda lista simple enlazada C Publicado por: rir3760 en 12 Agosto 2012, 01:05 am Tengo la siguiente estructura , y en el main cuando voy a imprimir solo imprime el primer elemento , se que tiene que ver algo con el malloc y la inicializacion de la lista pero no se como hacerlo y tampoco se porque me ocurre esto. La respuesta a porque no funciona ya la tienes cortesía del mensaje de xirukoY si no tienes un curso de calidad sobre listas vinculadas en C uno muy bueno (pero en ingles) lo puedes descargar desde la pagina de la Stanford CS Education Library (http://cslibrary.stanford.edu/). Un saludo Título: Re: Duda lista simple enlazada C Publicado por: twins en 16 Agosto 2012, 00:06 am bien aqui tienes una lista bien implementada con metodo menu, ahora si la estructura esta declarada de forma global no es necesario pasarla como paramerto a las funciones, saludos y cualquier cosa me preguntas aaa y algo mas los datos los ingresa al inicio de la lista por lo tanto el ultimo dato que ingreses sera el primero cuando se imprima ::)
#include<stdio.h> #include<stdlib.h> typedef struct dato{ char palabra[20]; struct dato *sig; }nodo; nodo *cabeza=NULL,*final=NULL; nodo *creanodo(); void ingresaalinicio(); void imprimir(); int pide(); int menu(); int main(void){ int opc; do{ opc=menu(); switch(opc){ case 1: ingresaalinicio(); break; case 2: imprimir(); break; case 0: return(0); default: printf("la opcion no esta en el menu\n\n"); } }while(opc!=0); return(0); } nodo *creanodo(){ nodo *nuevo=(nodo *)malloc(sizeof(struct dato)); printf("ingrese palabra\n"); fflush(stdin); gets(nuevo->palabra); nuevo->sig=NULL; return(nuevo); } void ingresaalinicio(){ nodo *nuevo=creanodo(); if(cabeza==NULL) final=nuevo; else nuevo->sig=cabeza; cabeza=nuevo; } void imprimir(){ nodo *aux=cabeza; printf("lista="); while(aux!=NULL){ printf("[%s]->",aux->palabra); aux=aux->sig; } printf("NULL\n"); } int pide(){ int num; printf("ingrese opcion\n"); scanf("%i",&num); return(num); } int menu(){ printf("1 ingresar al inicio\n2 imprimir\n0 salir\n"); return(pide()); } |