#include#include enum boolean {FALSE, TRUE}; typedef struct _primos{ //Así lo puedo referenciar aquí dentro unsigned long int num; struct _primos *siguiente; //Aún no está definido el tipo } primos; //Nombre del nuevo tipo primos *primero, *ultimo; //Estas son las variables globales void imprimir_primos (); void liberar(); boolean esprimo (unsigned long int i); boolean insertar_primo (unsigned long int x); void leer_fichero_txt (); void guardar_fichero_txt(); void menu(); void contar(); void main() { unsigned long int i=3, max; char opcion; boolean salir = FALSE; clock_t start, end; start = clock(); //1 primo// primero = (primos *) malloc (sizeof (primos)); primero -> siguiente = NULL; primero -> num = 1; ultimo = primero; ///// insertar_primo (2); /*caso raro, para tener referencia*/ do{ // clrscr(); //No es ANSCI C menu(); fflush (stdin); opcion = getc(stdin); switch (opcion) { //Esta función la he comentado por no ser ANSIC por el kbhit()// /* case '1': puts ("CALCULANDO..."); start = clock(); for (; !kbhit(); i+=2 ) { if (esprimo(i)) { if (!insertar_primo (i)) break;; } } end = clock(); printf ("\aFINALIZADO\n\nÚltimo nº comprobado: %li\nTiempo empleado: %f\nPresiona una tecla para continuar" , i, (end-start)/ CLK_TCK); fflush(stdin); getc(stdin); // break; */ case '2': printf ("\n Hasta qué nº quieres buscar? "); scanf ("%li", &max); puts ("CALCULANDO..."); start = clock(); for (; i < max; i=i+2 ) { if (esprimo(i)) { if (!insertar_primo (i)) break; } } end = clock (); printf ("\aFINALIZADO\n\nÚltimo nº comprobado: %li\nTiempo empleado: %f\nPresiona una tecla para continuar", i, (end-star t) / CLK_TCK); fflush(stdin); getc(stdin); break; case '3': leer_fichero_txt (); break; case '4': guardar_fichero_txt (); break; case '5': imprimir_primos (); break; case '6': salir = TRUE; break; case '7': contar(); break; default : puts ("OPCION INCORRECTA"); } } while (!salir); liberar(); } boolean esprimo (unsigned long int i) { unsigned long int max; primos *aux; max = (long int) (sqrt (i)); //Probamos los menores o igual a la raíz aux = primero->siguiente; /*apunto al 2*/ while (aux -> num <= max) //aux no puede ser NULL pq nunca será el último elemento { if (i % aux -> num == 0) return FALSE; aux = aux -> siguiente; } return TRUE; } void imprimir_primos () { primos *aux; aux = primero; while (aux -> siguiente != NULL) { printf ("%5li ",aux->num); aux = aux -> siguiente; } getc(stdin); } boolean insertar_primo (unsigned long int x) { primos *aux; if ((aux = (primos *) malloc (sizeof (primos)))!=NULL) //reservo memoria para siguiente primo { ultimo -> siguiente = aux; //último apunta al siguiente ultimo = aux; //último primo es el nuevo ultimo -> num = x; //inserto el número en último ultimo -> siguiente = NULL; //último apunta a NULL return TRUE; } else { printf ("\n\nOUT OF MEMORY\n"); return (FALSE); } } void liberar() { primos *aux, *ant; ant = primero; for (aux = primero->siguiente; aux != NULL; aux = aux->siguiente) { free (ant); ant = aux; } } void menu() { puts ("\nMenu"); puts ("====\n"); //puts ("1-Calcular números primos hasta que presionemos una tecla"); //La opción1 utiliza kbhit que no es ANSIC puts ("2-Calcular hasta un nº primo"); puts ("3-Cargar fichero de números primos"); puts ("4-Guardar primos en fichero"); puts ("5-Imprimir números primos calculados hasta el momento"); puts ("6-Salir"); puts ("7-Contar memoria"); } void leer_fichero_txt () { unsigned long i; FILE *f; if ((f = fopen ("primos.txt", "rt")) != NULL) { fscanf (f, "%li ", &i); fscanf (f, "%li ", &i); //as¡ ya he leido hasta el 2 printf ("\n\nLeyendo fichero primos.txt"); while (!feof(f)) { fscanf (f, "%li ", &i); insertar_primo(i); } printf ("\nFichero leido\nPresiona cualquier tecla para continuar"); fclose(f); } else printf ("\n\nERROR AL ABRIR EL FICHERO"); getc(stdin); } void guardar_fichero_txt () { primos *aux; FILE *f; if ((f = fopen ("primos.txt", "wt")) != NULL) { printf ("\n\nGuardando primos.txt"); for (aux = primero; aux != NULL; aux = aux -> siguiente) { fprintf (f, "%li ", aux -> num); } printf ("\nFichero guardado\nPresiona cualquier tecla para continuar"); fclose(f); } else (printf ("\n\nERROR AL GUARDAR EL FICHERO")); getc(stdin); } void contar () { primos *aux; unsigned long i = 0; for (aux = primero; aux != NULL; aux = aux -> siguiente) { i++; } printf ("\n\nHay un total de %li nums primos\n Ocupan %li * %i bytes = %li bytes", i, i, sizeof(primos), i*sizeof(primos)); getc(stdin); }//malloc, free #include //#include //kbhit, clrscr (No es ANSIC) #include
Buscar este blog
16 de enero de 2010
#include#include #include //exit() #include typedef struct _agenda { char nombre[20]; char telefono[12]; _agenda *siguiente; }; void mostrar_menu(); void anadir_elemento(); void mostrar_lista(); _agenda *primero, *ultimo; /*De momento lo haremos con variables globales, más adelante veremos como pasar punteros a funciones*/ void main() { char opcion; primero = (_agenda *) NULL; ultimo = (_agenda *) NULL; do { mostrar_menu(); opcion = getch(); switch ( opcion ) { case '1': anadir_elemento(); break; case '2': printf("Ir pensando como hacer esto :D\n"); break; case '3': mostrar_lista(); break; case '4': exit( 1 ); default: printf( "Opción no válida\n" ); break; } } while (opcion!='4'); } void mostrar_menu() { printf("\n\nMenú:\n=====\n\n"); printf("1.- Añadir elementos\n"); printf("2.- Borrar elementos\n"); printf("3.- Mostrar lista\n"); printf("4.- Salir\n\n"); printf("Escoge una opción: ");fflush(stdin); } /* Con esta función añadimos un elemento al final de la lista */ void anadir_elemento() { _agenda *nuevo; /* reservamos memoria para el nuevo elemento */ nuevo = (_agenda *) malloc (sizeof(_agenda)); if (nuevo==NULL) printf( "No hay memoria disponible!\n"); else { printf("\nNuevo elemento:\n"); printf("Nombre: "); fflush(stdin); gets(nuevo->nombre); printf("Teléfono: "); fflush(stdin); gets(nuevo->telefono); /* el campo siguiente va a ser NULL por ser el último elemento la lista */ nuevo->siguiente = NULL; /* ahora metemos el nuevo elemento en la lista. lo situamos al final de la lista */ /* comprobamos si l0a lista está vacía. si primero==NULL es que no hay ningún elemento en la lista. también vale ultimo==NULL */ if (primero==NULL) { printf( "Primer elemento\n"); primero = nuevo; ultimo = nuevo; } else { /* el que hasta ahora era el último tiene que apuntar al nuevo */ ultimo->siguiente = nuevo; /* hacemos que el nuevo sea ahora el último */ ultimo = nuevo; } } } void mostrar_lista() { _agenda *auxiliar; /* lo usamos para recorrer la lista */ int i; i=0; auxiliar = primero; printf("\nMostrando la lista completa:\n"); while (auxiliar!=NULL) { printf( "Nombre: %s, Teléfono: %s\n", auxiliar->nombre,auxiliar->telefono); auxiliar = auxiliar->siguiente; i++; } if (i==0) printf( "\nLa lista está vacía!!\n" ); }
#include
#include
#include
struct nodo {
int val;
struct nodo *siquiente;
};
struct nodo *primero, *ultimo;
void anadir_elemento() {
struct nodo *nuevo;
nuevo = (struct nodo *) malloc (sizeof(struct nodo));
if (nuevo == NULL)
printf("No hay memoria Disponible!\n");
printf("\n Nuevo elemento \n");
printf("Ingrese un valor: ");
scanf("%d", nuevo->val);
nuevo->siquiente = NULL;
if(primero == NULL){
printf("Primer elemento\n");
primero = nuevo;
ultimo = nuevo;
}
else {
ultimo->siquiente = nuevo;
ultimo = nuevo;
}
}
void mostrar_lista() {
struct nodo *auxiliar; /* lo usamos para recorrer la lista */
int i;
i=0;
auxiliar = primero;
printf("\nMostrando la lista completa:\n");
while (auxiliar!=NULL) {
printf("%d ", auxiliar->val);
auxiliar = auxiliar->siquiente;
i++;
}
if (i==0) printf( "\nLa lista está vacía!!\n" );
}
void mostrar_menu() {
printf("\n\nMenú:\n=====\n\n");
printf("1.- Añadir elementos\n");
printf("2.- Mostrar la lista\n");
printf("3.- Salir\n\n");
printf("Escoge una opción: ");
fflush(stdout);
}
int main() {
char opcion;
primero = (struct nodo *) NULL;
ultimo = (struct nodo *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': mostrar_lista();
break;
case '3': printf("Salida del programa principal\n");
default: printf( "Opción no válida\n" );
break;
}
} while (opcion!='3');
}
#include
#include
struct nodo {
int val;
struct nodo *siquiente;
};
struct nodo *primero, *ultimo;
void anadir_elemento() {
struct nodo *nuevo;
nuevo = (struct nodo *) malloc (sizeof(struct nodo));
if (nuevo == NULL)
printf("No hay memoria Disponible!\n");
printf("\n Nuevo elemento \n");
printf("Ingrese un valor: ");
scanf("%d", nuevo->val);
nuevo->siquiente = NULL;
if(primero == NULL){
printf("Primer elemento\n");
primero = nuevo;
ultimo = nuevo;
}
else {
ultimo->siquiente = nuevo;
ultimo = nuevo;
}
}
void mostrar_lista() {
struct nodo *auxiliar; /* lo usamos para recorrer la lista */
int i;
i=0;
auxiliar = primero;
printf("\nMostrando la lista completa:\n");
while (auxiliar!=NULL) {
printf("%d ", auxiliar->val);
auxiliar = auxiliar->siquiente;
i++;
}
if (i==0) printf( "\nLa lista está vacía!!\n" );
}
void mostrar_menu() {
printf("\n\nMenú:\n=====\n\n");
printf("1.- Añadir elementos\n");
printf("2.- Mostrar la lista\n");
printf("3.- Salir\n\n");
printf("Escoge una opción: ");
fflush(stdout);
}
int main() {
char opcion;
primero = (struct nodo *) NULL;
ultimo = (struct nodo *) NULL;
do {
mostrar_menu();
opcion = getch();
switch ( opcion ) {
case '1': anadir_elemento();
break;
case '2': mostrar_lista();
break;
case '3': printf("Salida del programa principal\n");
default: printf( "Opción no válida\n" );
break;
}
} while (opcion!='3');
}
#include
#include
#include
void InicializarABB(pArbol &A)
{
A=NULL;
}
//MOVIMIENTO EN ABB
void MostrarDato(int Dato)
{
printf("
%d",Dato);
}
void InOrden(pArbol &A)
{
if(A!=NULL)
{
InOrden(A->izq);
MostrarDato(A->Dato);
InOrden(A->der);
}
}
void PreOrden(pArbol &A)
{
if(A!=NULL)
{
MostrarDato(A->Dato);
PreOrden(A->izq);
PreOrden(A->der);
}
}
void PosOrden(pArbol &A)
{
if(A!=NULL)
{
PosOrden(A->izq);
PosOrden(A->der);
MostrarDato(A->Dato);
}
}
//INFORMACION DE ABB
int ArbolVacio(pArbol &A)
{
if(A==NULL)
return 1;
else
return 0;
}
int EsHoja(pArbol &A)
{
if((A->der==NULL)&&(A->izq==NULL))
return 1;
else
return 0;
}
void NumerosDeNodos(pArbol &A, int &x)
{
if(A!=NULL)
{
x++;
NumerosDeNodos(A->izq,x);
NumerosDeNodos(A->der,x);
}
}
int CantidadDeNodos(pArbol &A)
{
int Cantidad=0;
if(A!=NULL)
NumerosDeNodos(A,Cantidad);
return Cantidad;
}
int AlturaDeUnNodo(pArbol &A, int x)
{
int Altura=0;
Nodo Aux=A;
while(Aux!=NULL)
{
if(x==Aux->Dato)
return Altura;
else
{
Altura++;
if(x>Aux->Dato)
Aux=Aux->der;
else
Aux=Aux->izq;
}
}
if(Altura==0)
return 1;
return Altura;
}
void VaciarABB(pArbol &A)
{
if(A!=NULL)
{
VaciarABB(A->izq);
VaciarABB(A->der);
delete(A);
}
A=NULL;
}
int AlturaArbol(pArbol &A)
{
int AltDer=0,AltIzq=0;
if(A==NULL)
return -1;
else
{
AltIzq=AlturaArbol(A->izq);
AltDer=AlturaArbol(A->der);
if(AltIzq>AltDer)
AltIzq=AltIzq+1;
else
AltIzq=AltDer+1;
}
return AltIzq;
}
//OPRECIONES EN ABB
int BuscarMenorEnABB(pArbol &A)
{
Nodo Aux=A;
if(Aux!=NULL)
{
while(Aux->izq!=NULL)
Aux=Aux->izq;
}
return (Aux->Dato);
}
int BuscarMayorEnABB(pArbol &A)
{
Nodo Aux=A;
if(Aux!=NULL)
{
while(Aux->der!=NULL)
Aux=Aux->der;
}
return (Aux->Dato);
}
int BuscarElementoEnABB(pArbol &A, int x) // 1: Encontado, 0: No Existe
{
Nodo Aux=A;
if(Aux!=NULL)
{
if(Aux->Dato==x)
return 1;
else
{
if(Aux->Dato>x)
BuscarElementoEnABB(Aux->izq,x);
if(Aux->Dato
BuscarElementoEnABB(Aux->der,x);
}
}
return 0;
}
int InsertarNodoEnArbol(pArbol &A, int x)
{
int bandera=0;
pArbol Aux,Padre;
Aux=A;
Padre=NULL;
while((Aux!=NULL)&&(Aux->Dato!=x))
{
Padre=Aux;
if(Aux->Dato>x)
Aux=Aux->izq;
else
if(Aux->Dato
Aux=Aux->der;
}
if(Aux==NULL)
{
Aux=new Arbol;
Aux->Dato=x;
Aux->der=NULL;
Aux->izq=NULL;
if(Padre!=NULL)
{
if(Padre->Dato>x)
Padre->izq=Aux;
else
Padre->der=Aux;
bandera=1;
}
else
{
A=Aux;
bandera=1;
}
}
return bandera;
}
int EliminarNodoEnABB(pArbol &A, int x)
{
pArbol Aux;
if(A!=NULL)
{
Aux=A;
if(Aux->Dato==x)
{
if(EsHoja(Aux))//Es hoja
{
delete(Aux);
A=NULL;
return(1);
}
else
{
if(A->izq!=NULL)
{
Aux=Aux->izq;
while(Aux->der!=NULL)
Aux=Aux->der;
A->Dato=Aux->Dato;
Aux->Dato=x;
EliminarNodoEnABB(A->izq,x);
}
else
{
Aux=Aux->der;
while(Aux->izq!=NULL)
Aux=Aux->izq;
A->Dato=Aux->Dato;
Aux->Dato=x;
EliminarNodoEnABB(A->der,x);
}
}
}
else
if(A->Dato>x)
EliminarNodoEnABB(A->izq,x);
else
EliminarNodoEnABB(A->der,x);
}
else
return 0;
}
int PodaABB(pArbol &A, int x)
{
pArbol Aux;
int Bandera;
if(A!=NULL)
{
Aux=A;
if(Aux->Dato==x)
{
Aux->der=NULL;
Aux->izq=NULL;
Bandera=1;
}
else
{
if(Aux->Dato>x)
PodaABB(Aux->izq,x);
else
{
if(Aux->Dato<=x)
PodaABB(Aux->der,x);
}
}
}
else
Bandera=0;
return Bandera;
}
Etiquetas:
Codigos sobre arboles
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*/
Etiquetas:
Codigos de listas enlazadas
Suscribirse a:
Entradas (Atom)