Saludos con todos los miembros, soy nuevo en el foro. Necesito ayuda con el siguiente codigo que estoy desarrollando: Mi lista doblemente enlazada se tiene que mostrar en orden ascendente y descendente, pero de alguna forma no puedo solucionar el error del imprimir y tambien al momento de llamar la funcion. El aniadir tambien tiene problemas en la condicion: if(!actual || actual->datoNodo > v) { //error ! Me gustaria que me ayuden por favor. De antemano les agradezco.
#include <stdio.h> #include<cstdlib>
#define ASCENDENTE 1 #define DESCENDENTE 0
struct miDato { int valor; };
struct nodo { miDato datoNodo; struct nodo *siguiente; struct nodo *anterior; };
void Insertar(nodo *apuntador, int v); void MostrarLista(nodo apuntador, int orden);
int main() { nodo *lista = NULL; //creando mi lista
Insertar(lista, 58); Insertar(lista, 23); Insertar(lista, 32); Insertar(lista, 16);
MostrarLista(lista, ASCENDENTE); //error MostrarLista(lista, DESCENDENTE); //error return 0; }
void Insertar(nodo *apuntador, int v) { miDato valor; nodo *nuevo, *actual; nuevo = new (nodo); *actual = *apuntador; nuevo->datoNodo=valor; if(actual) while(actual->anterior) actual = actual->anterior; if(!actual || actual->datoNodo > v) { //error /* Añadimos la lista a continuación del nuevo nodo */ nuevo->siguiente = actual; nuevo->anterior = NULL; if(actual) actual->anterior = nuevo; if(!apuntador) apuntador = nuevo; } else { while(actual->siguiente &&actual->siguiente->datoNodo.valor <= v) actual = actual->siguiente; nuevo->siguiente = actual->siguiente; actual->siguiente = nuevo; nuevo->anterior = actual; if(nuevo->siguiente) nuevo->siguiente->anterior = nuevo; } }
void MostrarLista(nodo *apuntador, int orden) { nodo *auxiliar; if(!apuntador) printf("Lista vacía"); auxiliar = apuntador; if(orden == ASCENDENTE) { while(auxiliar->anterior) auxiliar = auxiliar->anterior; printf("Orden ascendente: \n"); while(auxiliar) { printf("%d\n", auxiliar.datoNodo); //error auxiliar = auxiliar->siguiente; } } else { while(auxiliar->siguiente) auxiliar = auxiliar->siguiente; printf("Orden descendente: \n"); while(auxiliar) { printf("%d\n", auxiliar->datoNodo); //error auxiliar = nodo->anterior; } } printf("\n"); }
|