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>