Professional Documents
Culture Documents
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <string.h>
#include <cctype.h>
//---------------------------------------------------------------------------
typedef int datos;
if(b == 1)
return a;
if(b == -1 )
return 1/(double)a;
//-----------------------
// llamadas recursivas
if(b < 0)
return 1/(double)a * potencia(a,b+1);
else
return a * potencia(a,b-1);
}
//----------------------------------------------------
//----------------------------------------------------
NODO *CreaNodo (datos valor)
{
NODO *p = NULL;
p = new NODO;
if (p != NULL)
{
p->info = valor;
p->sig = NULL;
}
return p;
}
//----------------------------------------------------
// funcion para enlazar un nuevo nodo al inicio de una
// lista
//----------------------------------------------------
void Enlaza(NODO *p, NODO **pp)
{
if (p != NULL)
{
p->sig = *pp;
*pp = p;
}
}
//----------------------------------------------------
// Metodo que permite agregar un elemento en una lista
// en orden
//----------------------------------------------------
void EnlazarEnOrden(NODO **pp, datos valor)
{
NODO *actual;
NODO *nuevo;
nuevo = CreaNodo(valor);
if (nuevo != NULL)
{
if(*pp== NULL)
{
nuevo->sig = *pp;
*pp = nuevo;
return;
}
// verifica si hay que ingresar al principio
if((*pp)->info > valor)
{
nuevo->sig = *pp;
*pp= nuevo;
}
else // sino buscar entre los nodos que se deben insertar
{
actual = *pp;
if(actual != NULL)
{
anterior->sig = actual->sig;
delete actual;
}
}
}
//----------------------------------------------------
// Metodo que permite borrar todos los nodos de una
// lista
//----------------------------------------------------
void BorrarLista(NODO **pp)
{
NODO *paux=NULL;
while (*pp != NULL)
{
paux= *pp;
*pp = (*pp)->sig;
delete paux;
}
}
//----------------------------------------------------
// esta función busca un elemento dado por el usuario
// y retorna el nodo donde se encuentra
// sino lo encuentra retorna NULL
//----------------------------------------------------
NODO *BuscaElemento (NODO *prim, datos valor_buscado)
{
int encontrado = 0;
while (prim != NULL && !encontrado)
{
if (prim->info == valor_buscado)
encontrado = 1;
else
prim = prim->sig;
}
return prim;
}
//----------------------------------------------------
// metodo para la operacion de union de conjuntos
//----------------------------------------------------
void Union (NODO*L1, NODO *L2, NODO**L3)
{
while(L1 != NULL)
{
if(BuscaElemento(*L3,L1->info)== NULL)
EnlazarEnOrden(L3,L1->info);
L1 = L1->sig;
}
while(L2 != NULL)
{
if(BuscaElemento(*L3,L2->info)== NULL)
EnlazarEnOrden(L3,L2->info);
L2 = L2->sig;
}
//----------------------------------------------------
// Metodo para diferencia de dos conjuntos
void diferencia(NODO *L1,NODO *L2,NODO **L3)
{
while (L1!=NULL)
{
if (BuscaElemento(L2,L1->info)==NULL)
EnlazarEnOrden(L3,L1->info);
L1=L1->sig;
}
}
//----------------------------------------------------
void Interseccion (NODO*L1, NODO *L2, NODO**L3)
{
if (L1 && L2)
{
while ( L1!=NULL)
{
if (BuscaElemento(L2,L1->info)!=NULL)
EnlazarEnOrden(L3,L1->info);
L1=L1->sig;
}
}
else
*L3= NULL;
}
//----------------------------------------------------
// método que permite mostrar todos los elementos de una lista
// en una tabla
//----------------------------------------------------
void imprimirlista(NODO *p)
{
if(p)
{
cout<<"______________________________________"<<endl;
cout<<setw(6)<<"Nodo"<<setw(6)<<'\t' <<setw(6)<<"Info\t"<<
setw(10)<<"Apunta a"<<endl;
cout<<"______________________________________"<<endl;
while(p != NULL)
{
cout<< setw(10) << p <<"\t";
cout<< setw(6) << p->info <<"\t";
cout<< setw(10) << p->sig <<"\t"<<endl;
p = p->sig;
}
cout<<"______________________________________"<<endl;
}
else
cout << "La lista esta vacia"<<endl;
}
//----------------------------------------------------
// funcion que verifica que todos los elementos de una lista
// estan ordenados
//----------------------------------------------------
bool verificar(NODO *p)
{
if(p== NULL)
return true;
while (p != NULL)
{
cont++;
p = p->sig;
}
return cont;
}
//----------------------------------------------------
//----------------------------------------------------
void buscarmenor(NODO *p)
{
if(p == NULL)
{
cout<< "Lista vacia"<<endl;
return;
}
void main()
{
//declaracion de variables
char opcion= 's';
int cant =0,cant2=0;
NODO * Lista=NULL;
NODO *A,*B,*C;
A=B=C= NULL;
datos numero =1;
srand(9000);
cout<<"potencia 3, 3 "<< potencia(3,3)<<endl;
cout<<"potencia 3, -3 "<< potencia(3,-3)<<endl;
cout<<"potencia 3, 0 "<< potencia(3,0)<<endl;
cout<<"potencia 3, -1 "<< potencia(3,-1)<<endl;
cout<<endl<<"Programa de Prueba"<<endl;
cout<<"Manejo de Listas Simplemente Enlazadas"<<endl<<endl;
buscarmenor(Lista);
cout<< "Ingrese la cantidad de elementos a generar de forma aleatoria"<< endl;
cout<< "un número entre 1 y 20"<< endl;
cant = cant2;
while (cant > 0)
{
numero = rand();
cout<<"Numero: "<< numero<<endl;
if(numero != 0)
{
// primero se verifica que no este repetido el número
// en la lista
if(BuscaElemento(B,numero)== NULL)
{
EnlazarEnOrden(&B,numero);
cant--;
}
else
{
cout<<"El elemento esta repetido"<<endl;
}
}
BorrarLista(&C);
diferencia(B,A,&C);
cout<<"Elementos de la Diferencia"<<endl;
imprimirlista(C);
cant = cant2;
// solicita un numero entre 1 y 20
while (cant < 1 || cant > 20)
{
cout<<"cantidad: ";
cin>> cant;
}
// este ciclo permite generar 20 números aleatorios
// y se insertar en orden en la lista enlazada
while (cant > 0)
{
numero = rand();
// cout<<"Numero: "<< numero<<endl;
if(numero != 0)
{
// primero se verifica que no este repetido el número
// en la lista
if(BuscaElemento(Lista,numero)== NULL)
{
EnlazarEnOrden(&Lista,numero);
cant--;
}
else
{
cout<<"El elemento esta repetido"<<endl;
}
}
imprimirlista(Lista);
if (verificar(Lista))
cout<< "La lista esta ordenada"<<endl;
else
cout<<"La lista no esta ordenada"<<endl;
cout <<endl;
buscarmenor(Lista);
cout <<endl;
BorrarElemento(&Lista,numero);
imprimirlista(Lista);
cout <<endl;
buscarmenor(Lista);
cout <<endl;
BorrarLista(&Lista);
BorrarLista(&A);
BorrarLista(&B);
BorrarLista(&C);
cout<< endl<< "fin del programa";
cin>>numero;
}
//---------------------------------------------------------------------------