Buscar este blog

16 de enero de 2010


Códigos de listas enlazadas
#include
#include
#include
int Recorrido(int Info[8],int Indice[8],int Inicio,int Disp)
int InsPr(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento)
{
clrscr();
int Info[8]={12,10,0,9,5,3,0,20};
int Indice[8]={5,7,6,1,-999,3,-999,4};
int Inicio=0,Disp=2,Elemento,Res;
cout<<"Lista Original\n";
Recorrido(Info,Indice,Inicio,Disp);
cout<<"Que Numero deseas Insertar?";
cin>>Elemento;
InsPr(Info,Indice,Inicio,Disp,Elemento);
getch();
}
void Recorrido(int Info[8],int Indice[8],int Inicio,int Disp)
{
int Apuntador=Inicio;
while(Apuntador!=-999)
{
cout<<
Apuntador=Indice[Apuntador];
}
}
void InsPr(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento)
{
if(Disp!=-999)
{
int Apuntador=Disp;
Disp=Indice[Disp];
Info[Apuntador]=Elemento;
Indice[Apuntador]=Inicio;
Inicio=Apuntador;
Recorrido(Info,Indice,Inicio,Disp);
}
else
cout<<"Overflow...";
}

{
void Recorrido(int Info[8],int Indice[8],int Inicio,int Disp);
void EliBusq(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento);

{
clrscr();
int Info[8]={12,10,0,9,5,3,0,20};
int Indice[8]={5,7,6,1,-999,3,-999,4};
int Inicio=0,Disp=2,Elemento,Res;
cout<<"Lista Original\n";
Recorrido(Info,Indice,Inicio,Disp);
cout<<"Que Numero deseas Eliminar?";
cin>>Elemento;
EliBusq(Info,Indice,Inicio,Disp,Elemento);
getch();
}
void Recorrido(int Info[8],int Indice[8],int Inicio,int Disp)
{
int Apuntador=Inicio;
while(Apuntador!=-999)
{
cout<<
Apuntador=Indice[Apuntador];
}
}
void EliBusq(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento)
{
int Temp=Inicio,Temp2;
if(Temp==-999)
{
cout<<"Lista Vacia... Imposible Eliminar";
return;
}
while(Temp!=-999)
{
if(Elemento==Info[Temp])
{
if(Temp==Inicio)
{
Inicio=Indice[Inicio];
else
Indice[Temp2]=Indice[Temp];
Indice[Temp]=Disp;
Disp=Temp;
Recorrido(Info,Indice,Inicio,Disp);
return;
}
else
{
Temp2=Temp;
Temp=Indice[Temp];
}
}
cout<<"Dato no encontrado... Imposible Eliminar";
return;
}

{
int Busqueda(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento);

{
clrscr();
int Info[8]={12,10,0,9,5,3,0,20};
int Indice[8]={5,7,6,1,-999,3,-999,4};
int Inicio=0,Disp=2,Elemento,Res;
cout<<"Que Numero deseas buscar?";
cin>>Elemento;
Res=Busqueda(Info,Indice,Inicio,Disp,Elemento);
if(Res==-999)
cout<<"Dato No Encontrado...";
getch();
}
int Busqueda(int Info[8],int Indice[8],int Inicio,int Disp,int Elemento)
{
int Apuntador=Inicio;
while(Apuntador!=-999)
{
if(Elemento==Info[Apuntador])
{
cout<<"Numero "<<<" encontrado...";
return Apuntador;
}
Apuntador=Indice[Apuntador];
}
return Apuntador;
}

{
int InsOrd(int Info[8],int Indice[8],int Inicio,int Elemento);
void Recorrido(int Info[8],int Indice[8],int Inicio,int Disp);
void InsNd(int Info[8],int Indice[8],int Inicio,int Disp, int Elemento, int Npos);

{
clrscr();
int Info[8]={12,10,0,9,5,3,0,20};
int Indice[8]={5,7,6,1,-999,3,-999,4};
int Inicio=0,Disp=2,Elemento,Res;
cout<<"Lista Original\n";
Recorrido(Info,Indice,Inicio,Disp);
cout<<"Que Numero deseas Insertar?";
cin>>Elemento;
Res=InsOrd(Info,Indice,Inicio,Elemento);
InsNd(Info,Indice,Inicio,Disp,Elemento,Res);
getch();
}
void Recorrido(int Info[8],int Indice[8],int Inicio,int Disp)
{
int Apuntador=Inicio;
while(Apuntador!=-999)
{
cout<<
Apuntador=Indice[Apuntador];
}
}
void InsNd(int Info[8],int Indice[8],int Inicio,int Disp, int Elemento, int Npos)
{
if(Disp!=-999)
{
int Apuntador=Disp;
Disp=Indice[Disp];
Info[Apuntador]=Elemento;
if(Npos==-999)
{
Indice[Apuntador]=Inicio;
Inicio=Apuntador;
}
else
{
Indice[Apuntador]=Indice[Npos];
Indice[Npos]=Apuntador;
}
Recorrido(Info,Indice,Inicio,Disp);
}
else
cout<<"Overflow...";
}
int InsOrd(int Info[8],int Indice[8],int Inicio,int Elemento)
{
int Temp=-999,Temp2;
if(Inicio==Temp||Elemento
return Temp;
Temp=Inicio;
Temp2=Indice[Inicio];
while(Temp2!=-999)
{
if(Elemento
return Temp;
Temp=Temp2;
Temp2=Indice[Temp2];
}
return Temp;
}
{
void Recorrido(char Info[8][2],int Indice[8],int Inicio,int Disp);

{
clrscr();
char Info[8][2]={{"G"},{"I"},{" "},{"T"},{"O"},{"A"},
{" "},{"T"}};
int Indice[8]={5,7,6,1,-999,3,-999,4};
int Inicio=0,Disp=2;
cout<<"El Recorrido es:\n";
Recorrido(Info,Indice,Inicio,Disp);
getch();
}
void Recorrido(char Info[8][2],int Indice[8],int Inicio,int Disp)
{
int Apuntador=Inicio;
while(Apuntador!=-999)
{
cout<
Apuntador=Indice[Apuntador];
getch ();
return 0;
}
main()
{
int OP;
do{
clrscr ();
float s,r,m,d;
cout<<"MENU PRINCIPAL"<
cout<
cout<<"1.- INSERTAR NODO"<
cout<<"2.- ELIMINAR NODO"<
cout<<"3.- BUSCAR NODO"<
cout<<"4.- RECORRIDO NODO"<
cout<<"5.- VISUALIZAR"<
cout<<"6.- SALIR"<
cout<
cout<<"elige una opcion"<
cin>>OP;
switch (OP){
case 1:insertar();break;
case 2:eliminar();break;
case 3:busqueda();break;
case 4:recorrido();break;
case 5:visualizar();break;
}
}while(OP!=6);
getch();
return 0;
}
CÓDIGOS DE LISTA
#include
#include
#include
void funcion2(int **,int ,int ,int );
void funcion1(int **,int ,int ,int );
int origen;
void funcion1(int **M,int n,int or,int dest)
{
int cont=0;
for(int i=0;i
{
if(M[or][i] == 1)
{
cout << i;

for (int j=0;j
if (M[i][j] == 1)
cont++;
if (cont == 1)
M[or][i] = 0;
if (i!=dest)
funcion2(M,n,i,dest);
else
{
cout << "\n" << origen-1;
funcion1(M,n,origen-1,dest);
}
}
}
}

void funcion2(int **M,int n,int or,int dest)
{
int cont=0;
for(int i=0;i
{
if(M[or][i] == 1)
{
cout << i;

for (int j=0;j
if (M[i][j] == 1)
cont++;
if (cont == 1)
M[or][i] = 0;
if (i!=dest)
funcion1(M,n,i,dest);
else
{
cout << "\n" << origen-1;
funcion2(M,n,origen-1,dest);
}
}
}
}
void main()
{
int **M, n, or, dest, con, aux;
clrscr();
cout << "Ingrese cantidad de nodos : ";
cin >> n;

M = new int*[n];
for (int i=0;i
M[i] = new int [n];
for (i=0;i
for (int j=0;j
{
if (i==j)
{
printf(" NO EXISTE conexion entre (%d,%d)\n",i+1,j+1);
M[i][j] = 0;
}
else
{
printf(" Hay conexion (%d,%d) 1/si 0/no = ",i+1,j+1);
cin >> con;
M[i][j] = con;
}
}

for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}

printf("Ingrese nodo origen (del 1 al %d) : ",n);
cin >> origen;
printf("Ingrese nodo destino (del 1 al %d) : ",n);
cin >> dest;

or = origen-1;
dest = dest-1;


// en caso que el origen sea distinto a la primera posision en la matriz
// de adyacencia, reordena la matriz para que as¡ sea...
if (or != 0)
{
for (i=0;i
{
aux = M[0][i];
M[0][i] = M[or][i];
M[or][i] = aux;
}

cout << "\n";
for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}
getche();

for (i=0;i
{
aux = M[i][0];
M[i][0] = M[i][or];
M[i][or] = aux;
}
cout << "\n";
for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}
getche();
}
// en caso que el destino sea distinto a la ultima posision en la matriz
// de adyacencia, reordena la matriz para que as¡ sea...
if (dest != (n-1))
{
for (i=0;i
{
aux = M[0][i];
M[0][i] = M[dest][i];
M[dest][i] = aux;
}
cout << "\n";
for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}
getche();
for (i=0;i
{
aux = M[i][0];
M[i][dest] = M[i][dest];
M[i][dest] = aux;
}
cout << "\n";
for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}
getche();
}
for (i=0;i
{
for (j=0;j
cout << " " << M[i][j];
cout << "\n";
}
getche();

//restringe la busqueda para que no entre en loop
for (i=0;i<=n;i++)
M[i][or] = 0;

for (j=0;j<=n;j++)
M[dest][j] = 0;

cout << "\n";
for (i=0;i<=n;i++)
{
for (j=0;j<=n;j++)
cout << " " << M[i][j];
cout << "\n";
}

getche();
cout << or;
funcion1(M,n,or,dest);
getche();
}
 
CÓDIGO DE LISTAS
#include
#include
       struct nodoLista{
char dato;
struct nodoLista *ptrsig; /*apuntador al siguiente nodo*
typedef struct nodoLista NodoLista;
typedef NodoLista *ptrNodoLista;
void insertar(ptrNodoLista *ptrS,char valor);
main(){
char eliminar (ptrNodoLista *ptrS,char valor);
void imprime(ptrNodoLista ptrActual);
int vacia(ptrNodoLista ptrS);
//void ptrNodoLista ptrInicial=NULL;/*No existen nodos*/
int opc;
char elemento;
do{
printf("---Menu---\n");
printf("1..Insertar\n");
printf("2..Eliminar\n");
printf("3..Salir\n");
printf("opc:");scanf("%d",&opc);
switch(opc){
case 1:
system("cls");
printf("Introduzca Caracter:");scanf("\n%c",&elemento);
insertar(&ptrInicial,elemento);
imprime(ptrInicial);
system("cls");
break;
case 2:
system("cls");
if(!vacia(ptrInicial)){
printf("Introduzca elemento a Eliminar:");scanf("\n%c",&elemento);
/*si encuentra el carater lo remueve*/
if(eliminar(&ptrInicial,elemento)){
printf("Caracter eliminado\n");
imprime(ptrInicial);
}else printf("No se encuentra el caracter %c\n",elemento);
}/*fin del if*/
else printf("La lista esta vacia\n");
system("cls");
break;
case 3:exit(0);
break;
default rintf("Opcion Invalidad\n");
}
}while(opc!=3);
getch();
return 0;
}
void insertar(ptrNodoLista *ptrS,char valor){
ptrNodoLista ptrNuevo; /*apuntador nuevo nodo*/
ptrNodoLista ptrAnterior;/*apuntador a un nodo anterior*/
ptrNodoLista ptrActual;/*apuntador al nodo actual*/
ptrNuevo=(struct nodoLista*)malloc(sizeof(NodoLista));/*crea un nodo*/
if(ptrNuevo!=NULL){
ptrNuevo->dato=valor;
ptrNuevo->ptrsig=NULL;
ptrAnterior=NULL;
ptrActual=*ptrS;
/*localiza la ubicacion correcta de la lista*/
while(ptrActual!=NULL && valor> ptrActual->dato){
ptrAnterior=ptrActual;
ptrActual=ptrActual->ptrsig;/*siguiente nodo*/

/*insertar un nuevo nodo al principio de la lista*/
if(ptrAnterior==NULL){
ptrNuevo->ptrsig = *ptrS;
*ptrS=ptrNuevo;
}else{
ptrAnterior->ptrsig=ptrNuevo;
ptrNuevo->ptrsig=ptrActual;
}
}
/*fin de if*/
else printf("No se inserto dato no hay espacio disponible en memoria");
}/*fin de la funcion insertar*/
char eliminar (ptrNodoLista *ptrS,char valor){
ptrNodoLista ptrAnterior;
ptrNodoLista ptrActual;
ptrNodoLista ptrTemp;/*apuntador a un nodo temporal*/
/*eliminar primer nodo*/
if(valor==(*ptrS)->dato){
ptrTemp=*ptrS;/*almacena el nodo a eliminar*/
*ptrS=(*ptrS)->ptrsig;/*desata el nodo*/
free(ptrTemp);/*libera memoria del nodo desatado*/
return valor;
}/*fin del if*/
else {
ptrAnterior=*ptrS;
ptrActual=(*ptrS)->ptrsig;
while(ptrActual!=NULL && ptrActual->dato !=valor){
ptrAnterior=ptrActual;
ptrActual=ptrActual->ptrsig;
}
/*elimina nodo actual*/
if(ptrActual!=NULL){
ptrTemp=ptrActual;
ptrAnterior->ptrsig=ptrActual->ptrsig;
free(ptrTemp);
return valor;
}
}/*fin else*/
getch();
}/*fin dela funcion eliminar*/
void imprime(ptrNodoLista ptrActual){
if(ptrActual==NULL)printf("La lista esta vacia\n");
else{
/*mientras no sea el final de la lista*/
while(ptrActual!=NULL){
printf("%c->",ptrActual->dato);
ptrActual=ptrActual->ptrsig;
}
printf("NULL\n");
}/*fin del else*/
getch();
}
}/*fin de la funcion imprimir*/
int vacia(ptrNodoLista ptrS){
return ptrS==NULL;
}/*fin dela funcion vacia*/

No hay comentarios:

Publicar un comentario