Título: necesito ayuda por favor.. listas doblemente enlazadas... diganme el error... Publicado por: anthonynlson en 21 Octubre 2012, 22:06 pm #include<stdio.h>
#include<conio.h> #include<stdlib.h> #define p printf struct nodo{ struct nodo *sig; struct nodo *ant; int dato; }; struct nodo *cab1, *cab2; int lista_vacia(struct nodo *); int getnumero_nodos(struct nodo *); struct nodo *crear_nodo(); void insertar(struct nodo *, int); void eliminar(struct nodo *, int); void main() { clrscr(); p("hola mundo"); insertar(cab1, 5); insertar(cab1, 45); //p(" * ***%d", cab1->dato); getch(); } int lista_vacia(struct nodo *cab) { return (cab==NULL); } int getnumero_nodos(struct nodo *cab) { struct nodo *aux; int cont=0; if(lista_vacia(cab)==1) return 0; else { for(aux=cab; aux!=NULL; aux= aux->sig) {cont++;} return (cont); } } struct nodo *crear_nodo() { struct nodo *n; n=(struct nodo *)malloc(sizeof(struct nodo)); if(n==NULL) { p("memoria llena..!!"); } return n; } void insertar(struct nodo *c, int dato) { struct nodo *n, *aux; n=crear_nodo(); if(n!=NULL) { n->dato=dato; if(c==NULL) { c=n; } else { for(aux=c; aux->sig!=c; aux=aux->sig){} aux->sig=n; n->ant=aux; n->sig=c; c->ant=n; } } p(" **%d", cab1->dato); } void eliminar(struct nodo *c, int dato) { struct nodo *aux; for(aux=c; aux->dato!=dato; aux=aux->sig){} if(aux==c) { c=c->sig; aux->ant=c; c->ant=aux->ant; insertar(cab2, aux->dato); free(aux); } else { aux->ant->sig=aux->sig; aux->sig->ant=aux->ant; insertar(cab2, aux->dato); free(aux); } } ayudenme con la solucion al intentar modificar la lista enviada por parametros..!! q no sale.. Título: Re: necesito ayuda por favor.. listas doblemente enlazadas... diganme el error... Publicado por: twins en 23 Octubre 2012, 00:44 am Bien aqui tienes un ejemplo si tienes dudas solo me preguntas,y a todo esto porque no puedo ver el foro en mi notebook me aparece una página en blanco, gracias
#include<stdio.h> #include<stdlib.h> struct nodo{ int dato; struct nodo *sig; struct nodo *ant; }; int numero_nodos(struct nodo **lista); void insertar(struct nodo **lista); void eliminar(struct nodo **lista); void imprimir(struct nodo **lista); int main(void){ struct nodo *lista=NULL; insertar(&lista); insertar(&lista); insertar(&lista); insertar(&lista); imprimir(&lista); printf("\n"); eliminar(&lista); imprimir(&lista); return(0); } int numero_nodos(struct nodo **lista){ struct nodo *aux=*lista; int cont=0; if(*lista==NULL){ printf("lista bacia\n"); return (1); } else{ while(aux!=NULL){ cont++; aux=aux->sig; } } return(cont); } void insertar(struct nodo **lista){ printf("ingrese valor para el nodo\n"); struct nodo *nuevo=(struct nodo*)malloc(sizeof(struct nodo)); scanf("%i",&nuevo->dato); nuevo->sig=NULL; nuevo->ant=NULL; if(*lista==NULL) *lista=nuevo; else{ struct nodo *aux=*lista; while(aux->sig!=NULL) aux=aux->sig; aux->sig=nuevo; nuevo->ant=aux; } } void eliminar(struct nodo **lista){ struct nodo *aux1=*lista,*aux2=aux1; while(aux2->sig!=NULL){ aux1=aux2; aux2=aux2->sig; } aux1->sig=NULL; aux2->ant=NULL; free(aux2); } void imprimir(struct nodo **lista){ struct nodo *aux=*lista; printf("\nlista desde el principio hasta el final\n"); while(aux!=NULL){ printf("[%i]->",aux->dato); aux=aux->sig; } printf("\n"); aux=*lista; while(aux->sig!=NULL) aux=aux->sig; printf("\nlista desde el final hasta el principio\n"); while(aux!=NULL){ printf("[%i]->",aux->dato); aux=aux->ant; } } |