RESPUESTA A LA PREGUNTA 1050 - C Hola. Supongo que sabes las definiciones y las operaciones de los ADT lista, pila y cola. Si no lo sabes, hay montones de literatura sobre el tema :) El AHO es un buen libro sobre estructuras de datos y el Deitel es un buen inicio al C y al C++. Espero que lo siguiente te sirva de guía para comprender el modelado. Tené en cuenta que se utiliza la misma estructura para los 3 adt's. La estructura, entonces sería. typedef int tipodato; struct eNodo { eNodo *izq, *der; tipodato Dato; }; typedef struct eNodo Nodo; void main (){ Nodo *Lista } Tenés entonces definido un puntero al primer elemento de la lista en la variable Lista. (tenés que inicializarlo y etceteras :) Te paso, ahora un pequeño código con una operación sobre Arboles Binarios de Búsqueda (ABB), que te puede dar una idea del manejo de punteros. /* Primer programa para manejo de ABB */ #include #include typedef int tipodato; struct eNodo { struct eNodo *izq, *der; tipodato dato; }; typedef struct eNodo Nodo; typedef Nodo *pNodo; void insertar (Nodo **, int); void borrar (Nodo **, int); void listar (Nodo *); int borraMayor (Nodo **); void menuABB(); /* --------------------------------------------------- */ void main () { pNodo hash[100]; int i,j; for (i=0;idato = dato; Aux->izq=NULL; Aux->der=NULL; *B = Aux; // printf ("inserto el %d\n",dato); } else printf ("no more memoria"); } else { Aux = *B; if (dato dato) insertar (&(Aux->izq), dato); else if (dato > Aux ->dato) insertar (&(Aux->der), dato); } } /* --------------------------------------------------- */ int borraMayor (Nodo **B){ // borra y devuelve el borraMayor int dato; Nodo *Aux; Aux = *B; if (Aux->der == NULL) { dato = Aux->dato; *B = Aux->izq; return (dato); } else { return (borraMayor (&(Aux->der))); } } /* --------------------------------------------------- */ void borrar (Nodo **B, int dato){ Nodo *Aux; if (*B != NULL) { Aux = *B; if (dato dato) { borrar (&(Aux->izq),dato); } else if (dato > Aux->dato) { borrar (&(Aux->der),dato); } else {//llegué! printf ("borro el %d\n",dato); if ((Aux -> der == NULL) && (Aux -> izq == NULL)) *B = NULL; else if (Aux -> der == NULL) *B = Aux -> izq; else if (Aux -> izq == NULL) *B = Aux -> der; else Aux -> dato = borraMayor (&(Aux->izq)); } } } /* --------------------------------------------------- */ void listar (Nodo *B){ if (B != NULL) { listar (B->izq); printf ("%d ",B->dato); listar (B->der); } } Suerte, Tomas Laurenzo. P.D. El código creo que funciona, no tengo idea de cuando lo escribí, ni de porque estaba donde lo encontré. :) Tomas Laurenzo tomas@montevideo.com.uy