PROGRAMACION LISTAS DOBLES ESTRUCTURAS DE DATOS


#include <stdio.h>

#include <conio.h>

#include <iomanip.h>

#include <iostream.h>

class Alumno

{

private:

char Nombre[10][30];

int N_control[10],Edad[10],Indice1[10],Indice2[10],Inicio,Fin,Disp;

public:

//Constructor

Alumno()

{

int i,j;

Inicio=0;

Fin=0;

Disp=1;

Indice1[Inicio]=-999;

Indice2[Fin]=-999;

for(i=1,j=2;i<9;i++,j++)

Indice1[i]=j;

Indice1[9]=-999;

}

//Funcion de Recorrido

void Recorrido(int op)

{

int i=0,Temp;

if(op==1)

{

Temp=Indice1[Inicio];

if(Temp!=-999)

{

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

while(Temp!=-999)

{

if(i==(int(Edad[Inicio]/2)))

{

N_control[Inicio]=N_control[i];

strcpy(Nombre[Inicio],Nombre[i]);

}

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

Temp=Indice1[Temp];

i++;

}

}

else

cout<<"Lista Vacia...";

}

if(op==2)

{

Temp=Fin;

if(Edad[Inicio]!=0)

{

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

while(Temp!=-999&&i<Edad[Inicio])

{

if(i==(int(Edad[Inicio]/2)))

{

N_control[Inicio]=N_control[i];

strcpy(Nombre[Inicio],Nombre[i]);

}

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

Temp=Indice2[Temp];

i++;

}

}

else

cout<<"Lista Vacia...";

}

}

//Funcion Sobrecargada de Busqueda para Enteros

int Busqueda(int Elem)

{

if(Elem<N_control[Inicio])

{

int Temp=Indice1[Inicio];

while(Temp!=-999)

{

if(Elem==N_control[Temp])

{

gotoxy(1,10);

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

return Temp;

}

else

Temp=Indice1[Temp];

}

}

else

{

int Temp=Fin;

while(Temp!=-999)

{

if(Elem==N_control[Temp])

{

gotoxy(1,10);

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

return Temp;

}

else

Temp=Indice2[Temp];

}

}

return -999;

}

//Funcion Sobrecargada de Busqueda de Cadenas de Caracteres

int Busqueda(char Elem[30])

{

if((strcmp(Elem,Nombre[Inicio]))<0)

{

int Temp=Indice1[Inicio];

while(Temp!=-999)

{

if((strcmp(Elem,Nombre[Temp]))==0)

{

gotoxy(1,10);

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

return Temp;

}

else

Temp=Indice1[Temp];

}

}

else

{

int Temp=Fin;

while(Temp!=-999)

{

if((strcmp(Elem,Nombre[Temp]))==0)

{

gotoxy(1,10);

cout<<"Numero de Control"<<setw(19)<<"Nombre del Alumno"<<setw(5)<<"Edad"<<endl;

cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;

return Temp;

}

else

Temp=Indice2[Temp];

}

}

return -999;

}

//Funcion Sobrecargada de Orden para Numeros Enteros

int Enca(int E_nc)

{

int Temp=Indice1[Inicio],Temp2;

if(Temp==-999||E_nc<N_control[Temp])

return -999;

Temp2=Indice1[Indice1[Inicio]];

while(Temp2!=-999)

{

if(E_nc<N_control[Temp2])

return Temp;

Temp=Temp2;

Temp2=Indice1[Temp2];

}

return Temp;

}

//Funcion Sobrecargada de Orden para Cadena de Caracteres

int Enca(char E_nom[30])

{

int Temp=Indice1[Inicio],Temp2;

if(Temp==-999)

return -999;

if((strcmp(E_nom,Nombre[Temp]))<0)

return Temp;

Temp2=Indice1[Indice1[Inicio]];

while(Temp2!=-999)

{

if((strcmp(E_nom,Nombre[Temp2]))<0)

return Temp;

Temp=Temp2;

Temp2=Indice1[Temp2];

}

return Temp;

}

//Funcion de Inserción en un Lugar Determinado

void InsLug(char E_nom[30],int E_nc,int E_edad,int Npos)

{

if(Disp!=-999)

{

Edad[Inicio]++;

int Temp=Disp;

Disp=Indice1[Disp];

strcpy(Nombre[Temp],E_nom);

N_control[Temp]=E_nc;

Edad[Temp]=E_edad;

if(Npos==-999)

{

Indice1[Temp]=Indice1[Inicio];

if(Indice2[Fin]==-999)

{

Indice2[Temp]=Fin;

Fin=Temp;

}

else

{

Indice2[Temp]=Indice1[Inicio];

Indice2[Indice1[Inicio]]=Temp;

}

Indice1[Inicio]=Temp;

}

else

{

Indice1[Temp]=Indice1[Npos];

if(Fin==Npos)

{

Indice2[Temp]=Fin;

Fin=Temp;

}

else

{

Indice2[Temp]=Npos;

Indice2[Indice1[Npos]]=Temp;

}

Indice1[Npos]=Temp;

}

}

else

cout<<"Overflow..."<<endl;

}

//Funcion Sobrecargada para Borrar un Dato que sea Entero

void Borrar(int Elem)

{

int Temp2,Temp=Indice1[Inicio];

if(Temp==-999)

{

cout<<"Lista Vacia... Imposible Eliminar";

return;

}

while(Temp!=-999)

{

if(Elem==N_control[Temp])

{

Edad[Inicio]--;

if(Temp==Indice1[Inicio])

{

Indice1[Inicio]=Indice1[Indice1[Inicio]];

Indice2[Indice1[Inicio]]=Inicio;

}

else if(Temp==Fin)

{

Indice1[Temp2]=Indice1[Temp];

Fin=Indice2[Fin];

}

else

{

Indice1[Temp2]=Indice1[Temp];

Indice2[Indice1[Temp2]]=Temp2;

}

Indice1[Temp]=Disp;

Disp=Temp;

return;

}

else

{

Temp2=Temp;

Temp=Indice1[Temp];

}

}

cout<<"Dato no encontrado... Imposible Eliminar";

return;

}

//Funcion Sobrecargada para Borrar una Cadena de Caracteres

void Borrar(char Elem[30])

{

int Temp2,Temp=Indice1[Inicio];

if(Temp==Inicio)

{

cout<<"Lista Vacia... Imposible Eliminar";

return;

}

while(Temp!=Inicio)

{

if((strcmp(Elem,Nombre[Temp]))==0)

{

Edad[Inicio]--;

if(Temp==Indice1[Inicio])

{

Indice1[Inicio]=Indice1[Indice1[Inicio]];

Indice2[Indice1[Inicio]]=Inicio;

}

else if(Temp==Fin)

{

Indice1[Temp2]=Indice1[Temp];

Fin=Indice2[Fin];

}

else

{

Indice1[Temp2]=Indice1[Temp];

Indice2[Indice1[Temp2]]=Temp2;

}

Indice1[Temp]=Disp;

Disp=Temp;

return;

}

else

{

Temp2=Temp;

Temp=Indice1[Temp];

}

}

cout<<"Dato no encontrado... Imposible Eliminar";

return;

}

}tec;

main()

{

int op=0,res;

char inom[30];

int in_c,iedad;

while(op!=6)

{

clrscr();

cout<<"\n1) Recorrido por Inicio\n2) Recorrido por Final\n3) Busqueda\n";

cout<<"4) Insercion\n5) Eliminar un Dato\n6) Salir"<<endl;

gotoxy(1,1);

cout<<"Que deseas hacer: ";

cin>>op;

gotoxy(1,10);

switch (op)

{

case 1:

tec.Recorrido(1);

break;

case 2:

tec.Recorrido(2);

break;

case 3:

cout<<"Que Numero de Control deseas buscar?"<<endl;

cin>>res;

res=tec.Busqueda(res);

if(res==-999)

cout<<"Dato no encontrado";

break;

case 4:

cout<<"Que nombre quieres Insertar?"<<endl;

gets(inom);

cout<<"Cual es su Numero de Control?"<<endl;

cin>>in_c;

cout<<"Cual es su Edad?"<<endl;

cin>>iedad;

res=tec.Enca(in_c);

tec.InsLug(inom,in_c,iedad,res);

break;

case 5:

cout<<"Que Numero de Control deseas eliminar?"<<endl;

cin>>res;

tec.Borrar(res);

break;

case 6:

cout<<"Salida...";

break;

default:

cout<<"Opcion Erronea"<<endl;

break;

}

getch();

}

}

 




Google
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Politica de Privacidad