Hola yo la materia la rendi en C, por lo que los ejercicios que me quedaron de esa epoca son en c, ya que en C++ esta el STL. En fin, hace poco rendi esto y me hice unos resumenes, en mi web personal, de un solo post, esta:<br>

<a href="http://blog.amvaz.com/final-de-estructuras/">http://blog.amvaz.com/final-de-estructuras/</a><br><br>Pero siendo mas puntual copio y pego algo que hice hace bastante (listas doblemente enelazadas):<br>NO COMPILA EN C, por que aunque vimos C estructurado usabamos el dev c++. Pero conceptualmente espero que te sea de ayuda.<br>

<br><br>#include <iostream><br>using namespace std;<br><br>//=====================================<br>// Tipo de datos definidos por el usr<br>//=====================================<br>typedef unsigned short int u32; <br>

<br>typedef enum<br>{<br>    DIRECTOR=0,<br>    CODIGO,<br>    GENERO<br>}Modo;<br>typedef enum<br>{<br>    COMEDIA=0,<br>    DRAMA,<br>    ACCION,<br>    INFANTILES<br>}Genero;<br><br>enum<br>{<br>    ant=0,<br>    sig,<br>

    pri=0,<br>    ult<br>};<br><br>typedef struct TNodoRetiro* pTNodoRetiro;<br>typedef struct TPelicula<br>{<br>    u32 codigo;<br>    string nombre;<br>    string director;<br>    Genero genero;<br>    u32 cantidad;<br>

    pTNodoRetiro pRetiro[2];<br>}TPelicula;<br><br>typedef struct TRetiro<br>{<br>    u32 codigo;<br>    string socio;<br>    u32 fecha [3];<br>}TRetiro;<br><br>typedef struct TNodoRetiro<br>{<br>    TRetiro retiro;<br>    pTNodoRetiro pRetiro[2];    <br>

}TNodoRetiro;<br><br>typedef struct TNodoPelicula* pTNodoPelicula;<br>typedef struct TNodoPelicula<br>{<br>    TPelicula pelicula;<br>    pTNodoPelicula pDirector[2];// 0->ant 1->sig<br>    pTNodoPelicula pCodigo[2];//0->ant 1->sig<br>

    pTNodoPelicula pGenero[2];<br>}TNodoPelicula;<br><br>typedef struct TVideoClub<br>{<br>    pTNodoPelicula pDirector[2];<br>    pTNodoPelicula pCodigo[2];<br>    pTNodoPelicula pGenero[2];<br>}TVideoClub;<br><br>//=====================================<br>

// Prototipos<br>//=====================================<br>bool agregar (const TPelicula& pelicula, TVideoClub &club);<br>void listar (const TVideoClub& club, Modo modo=CODIGO);<br>bool agregar (const TRetiro& retiro, TPelicula& pelicula);<br>

//=====================================<br>// Funcion main<br>//=====================================<br>int main ()<br>{<br>    TVideoClub club;<br>    club.pDirector[pri]=club.pDirector[ult]=0;<br>    club.pCodigo[pri]=club.pCodigo[ult]=0;<br>

    club.pGenero[pri]=club.pGenero[ult]=0;<br><br>    TPelicula pelicula;<br>    pelicula.codigo=1; pelicula.director="Mar"; pelicula.genero=COMEDIA;<br>    agregar (pelicula, club);    <br>    pelicula.codigo=5; pelicula.director="Matrix"; pelicula.genero=DRAMA;<br>

    agregar (pelicula, club);    <br>    pelicula.codigo=4; pelicula.director="COD"; pelicula.genero=INFANTILES;<br>    agregar (pelicula, club);<br>    pelicula.codigo=2; pelicula.director="Nota"; pelicula.genero=COMEDIA;<br>

    agregar (pelicula, club);<br><br>    listar (club,GENERO);<br>    std::cin.get();<br>}<br><br><br>//=====================================<br>// Agregar:<br>//            Agrega una pelicula al videoblub<br>//=====================================<br>

bool agregar (const TPelicula& pelicula, TVideoClub &club)<br>{<br>    //Busco el lugar que ucuparia por codigo, de repetirse<br>    //el codigo se sale<br>    pTNodoPelicula pR; //Nodo de recorrido;<br>    pR=club.pCodigo[pri]; //Primer nodo de peliculas ord. por cod.<br>

<br>    while (pR  && pelicula.codigo>pR->pelicula.codigo)<br>        pR= pR->pCodigo[sig];<br>    <br>    //Si se repite el codigo salgo<br>    if (pR && pR->pelicula.codigo==pelicula.codigo)<br>

        return false;<br>    <br>    //Creo nodo y lo inicializo<br>    pTNodoPelicula pNuevo = new TNodoPelicula;<br><br>    pNuevo->pelicula=pelicula;<br>    pNuevo->pDirector[ant]=pNuevo->pDirector[sig]=0;<br>

    pNuevo->pCodigo[ant]=pNuevo->pCodigo[sig]=0;<br>    pNuevo->pGenero[ant]=pNuevo->pGenero[sig]=0;<br><br>    //Creo anterior<br>    pTNodoPelicula pAnt = (pR)? pR->pCodigo[ant] : club.pCodigo[ult];<br><br>

<br>    if (pAnt)<br>        pAnt->pCodigo[sig]=pNuevo;<br>    else<br>        club.pCodigo[pri]=pNuevo;<br><br>    if (pR)<br>        pR->pCodigo[ant]=pNuevo;<br>    else<br>        club.pCodigo[ult]=pNuevo;<br><br>

    pNuevo->pCodigo[ant]=pAnt;<br>    pNuevo->pCodigo[sig]=pR;<br><br>    //Ahora por director<br>    pR=club.pDirector[pri];<br><br>    while (pR && pelicula.director>pR->pelicula.director)<br>        pR= pR->pDirector[sig];<br>

<br>    pAnt = (pR)? pR->pDirector[ant]: club.pDirector[ult];<br><br>    if (pAnt)<br>        pAnt->pDirector[sig]=pNuevo;<br>    else<br>        club.pDirector[pri]=pNuevo;<br><br>    if(pR)<br>        pR->pDirector[ant]=pNuevo;<br>

    else<br>        club.pDirector[ult]=pNuevo;<br><br>    pNuevo->pDirector[sig]=pR;<br>    pNuevo->pDirector[ant]=pAnt;<br><br>    //Finalmente se agrupan por genero<br><br>    pR=club.pGenero[pri];<br>    pAnt=0;<br>

    <br>    while (pR && pelicula.genero>pR->pelicula.genero)<br>        pR= pR->pGenero[sig];<br><br>    pAnt = (pR)? pR->pGenero[ant]: club.pGenero[ult];<br><br>    if (pAnt)<br>        pAnt->pGenero[sig]=pNuevo;<br>

    else<br>        club.pGenero[pri]=pNuevo;<br><br>    if (pR)<br>        pR->pGenero[ant]=pNuevo;<br>    else<br>        club.pGenero[ult]=pNuevo;<br><br>    pNuevo->pGenero[sig]=pR;<br>    pNuevo->pGenero[ant]=pAnt;<br>

<br>    return true;<br>}<br><br>//=====================================<br>// Ver:<br>//        imprime pelicula<br>//=====================================<br>void ver (const TPelicula& pelicula)<br>{<br>    cout<<"cod: "<<pelicula.codigo<br>

        <<"  director: "<<pelicula.director<br>        <<"  genero: "<<pelicula.genero<br>        <<"  cantidad: "<<pelicula.cantidad<br>        <<endl;<br>

}<br><br>//=====================================<br>// Listar:<br>//            lista las peliculas<br>//=====================================<br>void listar (const TVideoClub& club, Modo modo)<br>{<br>    pTNodoPelicula pR;<br>

<br>    switch (modo)<br>    {<br>        default:<br>        case (CODIGO):<br>            pR=club.pCodigo[ult];<br>            while (pR)<br>            {<br>                ver (pR->pelicula);<br>                pR=pR->pCodigo[ant];<br>

            }<br>            break;<br>        case (DIRECTOR):<br>            pR=club.pDirector[ult];<br>            while (pR)<br>            {<br>                ver (pR->pelicula);<br>                pR=pR->pDirector[ant];<br>

            }<br>            break;<br>        case (GENERO):<br>            pR=club.pGenero[ult];<br>            while (pR)<br>            {<br>                ver (pR->pelicula);<br>                pR= pR->pGenero[ant];<br>

            }<br>    }<br>}<br><br><br>bool agregar (const TRetiro& retiro, TPelicula& pelicula)<br>{<br>    //Si no hay peliculas no agrego<br>    if (pelicula.cantidad<1)<br>        return false;<br><br>    //Se agrega igual un retiro,se repita o no el codigo<br>

<br>    pTNodoRetiro pNuevo = new TNodoRetiro;<br>    pNuevo->retiro=retiro;<br>    pNuevo->pRetiro[ant]=0;<br>    pNuevo->pRetiro[sig]=0;<br><br>    pTNodoRetiro pR = pelicula.pRetiro[pri];<br>    <br>    while (pR && retiro.codigo>pR->retiro.codigo)<br>

        pR=pR->pRetiro[sig];<br><br>    pTNodoRetiro pAnt= (pR)? pR->pRetiro[ant]: pelicula.pRetiro[ult];<br>    <br>    if (pR)<br>        pR->pRetiro[ant]=pNuevo;<br>    else<br>        pelicula.pRetiro[ult]=pNuevo;<br>

<br>    if (pAnt)<br>        pAnt->pRetiro[sig]=pNuevo;<br>    else<br>        pelicula.pRetiro[pri]=pNuevo;<br><br>    pNuevo->pRetiro[sig]=pR;<br>    pNuevo->pRetiro[ant]=pAnt;<br>    <br>    return true;<br>}<br>

<br><br><br><br><br><br><br><br><br><br>