Beruflich Dokumente
Kultur Dokumente
5 LISTAS DOBLES
Definición:
Recorrido simplemente despliega los datos almacenados en el arreglo Info, con ayuda de un segundo
arreglo llamado Indice1 o Indice2 el cual guarda el orden en el que encuentran enlazados cada uno de
los datos. Estos datos se pueden recorrer de Arriba hacia Abajo o de Abajo hacia Arriba.
Explicación:
Dependiendo de la forma en la que se desea recorrer el Arreglo, la variable Apuntador tomara el valor
de Indice1[Inicio], o de Fin. Después recorrerá el Arreglo mientras la condición no se rompa (Dicha
condición será diferente dependiendo el caso).
Diagrama:
Búsqueda
Definición:
Primeramente usaremos un contador y la cabecera, esto nos permitirá determinar cual es dato de la
mitad. Para esto se utiliza el Recorrido el cual al encontrar el Dato de la mitad lo copia ese dato a la
cabecera con la cual se comparara para determinar por donde empezar (Inicio y Fin).
Diagrama:
Inserción Ordenada
Definición:
La Inserción Ordenada busca la posición en donde será Insertado el Elemento y la posición anterior
donde será Insertado, después de encontrar la posición en la que será Insertado el Elemento nos regresa
ese valor y lo mandamos al método de la Inserción después de un Nodo.
Explicación:
Esta Inserción ordenada es similar a las anteriores aunque en este caso consta de mas comparación y
movimientos de variables, esto se debe a que tenemos 2 arreglos que nos indican los movimientos y al
insertar un dato ambos arreglos deben direccionar nuevamente.
Diagrama:
Definición:
La Eliminación simplemente cambia los nodos para que el dato que se desea eliminar sea el primer
disponible, de esta forma ya no estará en el Arreglo de Info.
Explicación:
Lo primero que hace es ver si existe algún dato en la lista para eliminar, si Indice[Inicio] es igual a
Inicio entonces solo desplegara “Imposible Eliminar”. De otra formas cambiar de Posición en Posición
hasta encontrar el Elemento que sea desea Eliminar con ayudar de dos variables que guardan la Posición
actual y la anterior en donde se encuentre el dato. Ya que lo encuentra cambia ese dato como la primera
posición Disponible y lo apunta al siguiente nodo disponible. Si no encuentra el dato simplemente
desplegara “Dato no encontrado”
Diagrama:
#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
int i=0,Temp;
if(op==1)
if(Temp!=-999)
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)
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...";
if(Elem<N_control[Inicio])
int Temp=Indice1[Inicio];
while(Temp!=-999)
if(Elem==N_control[Temp])
gotoxy(1,10);
cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;
return Temp;
else
else
int Temp=Fin;
while(Temp!=-999)
if(Elem==N_control[Temp])
gotoxy(1,10);
cout<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;
return Temp;
else
Temp=Indice2[Temp];
return -999;
if((strcmp(Elem,Nombre[Inicio]))<0)
int Temp=Indice1[Inicio];
while(Temp!=-999)
if((strcmp(Elem,Nombre[Temp]))==0)
gotoxy(1,10);
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<<setw(9)<<N_control[Temp]<<setw(22)<<Nombre[Temp]<<setw(9)<<Edad[Temp]<<endl;
return Temp;
else
Temp=Indice2[Temp];
return -999;
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;
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)
return Temp;
Temp=Temp2;
Temp2=Indice1[Temp2];
return Temp;
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];
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;
int Temp2,Temp=Indice1[Inicio];
if(Temp==-999)
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];
return;
int Temp2,Temp=Indice1[Inicio];
if(Temp==Inicio)
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];
return;
}tec;
main()
int op=0,res;
char inom[30];
int in_c,iedad;
while(op!=6)
clrscr();
gotoxy(1,1);
cin>>op;
gotoxy(1,10);
switch (op)
case 1:
tec.Recorrido(1);
break;
case 2:
tec.Recorrido(2);
break;
case 3:
cin>>res;
res=tec.Busqueda(res);
if(res==-999)
cout<<"Dato no encontrado";
break;
case 4:
gets(inom);
cin>>in_c;
cin>>iedad;
res=tec.Enca(in_c);
tec.InsLug(inom,in_c,iedad,res);
break;
case 5:
cin>>res;
tec.Borrar(res);
break;
case 6:
cout<<"Salida...";
break;
default:
cout<<"Opcion Erronea"<<endl;
break;
getch();