PROGRAMACION LISTAS ENLAZADAS ESTRUCTURA 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 de Busqueda Sobrecargada para un Dato Entero
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 de Busqueda Sobrecargada para una Cadena 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 un Dato Entero
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 una 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 para la Insercion 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 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();
}
}