Mostrando entradas con la etiqueta agenda. Mostrar todas las entradas
Mostrando entradas con la etiqueta agenda. Mostrar todas las entradas

lunes, 15 de julio de 2013

Agenda Electrónica con árbol AVL en C++

Hola amig@s en esta vez les traigo como hacer una agenda electrónica implementando un árbol AVL las opciones de la agenda son agregar  un nuevo contacto, buscar, eliminar, mostrar, mostrar el numero de contactos y salir.

Capturas:



Codigo:

ArbolAVL.cpp

#include 
#include 
#include 
#include 
#include "ArbolAVL.h"
using namespace std;

int main()
{

  arbol A;
  tarbol b;
  char nombre[50];
  char telefono[10];
  char direccion[50];
  char email[50];
  char op;
  int t;
 
  do{
   fflush(stdin);
      system("cls");
   cout<<"\tMenu\n\n";
   cout<<"\t1- Agregar\n";
   cout<<"\t2- Buscar\n";
   cout<<"\t3- Eliminar\n";
   cout<<"\t4- Mostrar\n";
   cout<<"\t5- Estadistica\n";
   cout<<"\t6- Salir\n\n";
   cout<<"Ingrese la opcion: ";
   cin>>op;
   fflush(stdin);
   switch(op)
   {
  case '1': {
   fflush(stdin);
      system("cls");
   cout<<"\nIngrese Nombre: ";
   gets(nombre);
   fflush(stdin);
   do{
   cout<<"\nIngrese Telefono 0000-0000: ";
   gets(telefono);
   fflush(stdin);
   t=strlen(telefono);
     }while(t!=9);
   cout<<"\nIngrese Direccion: ";
   gets(direccion);
   fflush(stdin);
   cout<<"\nIngrese Email: ";
   gets(email);
   fflush(stdin);
   A.insertar(A.miarbolito,nombre,telefono,direccion,email);
   break;
     }
  case '2':{
   fflush(stdin);
   system("cls");
   cout<<"\nNombre: ";
   gets(nombre);
   fflush(stdin);
   b=A.buscar(A.miarbolito,nombre);
   if(b!=NULL)
   {
   fflush(stdin);
   system("cls");
   cout<<"\nContacto encontrado:";
   cout<<"\n\nNombre: "<nombre;
   cout<<"\nTelefono: "<telefono;
   cout<<"\nEmail: "<email;
   cout<<"\nDireccion: "<direccion;
   system("pause");
   }
     break;
        }
  case '3':{
   system("cls");fflush(stdin);
   cout<<"\nNombre: ";
   gets(nombre);
   fflush(stdin);
   A.borrar(A.miarbolito,nombre);
   system("pause");
   break;
     }
  case '4':{
   system("cls");
            cout<<"\n\n";
   A.IDN(A.miarbolito);system("pause");
   break; 
        }
  case '5':{
      system("cls");
            A.pe=0;
   cout<<"\nNumero de contactos: "<nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-insertar="">Izdo,nom,tel,dir,em); 
   }
   else 
   { if(strcmpi(nom,aux->nombre)>0)
    {
    insertar(aux->Dcho,nom,tel,dir,em);
    }
   }
 }
}
tarbol arbol::buscar(tarbol aux,char nom[50])
{  
 if (aux==NULL)
 {  
  return NULL;
 }
 else
 {
  if (strcmpi(nom,aux->nombre)==0)
  {
   return aux;
  }
  else
  { if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-buscar="" data-blogger-escaped-return="">Izdo, nom);
   }
   else
   {
    return buscar(aux->Dcho, nom);
   }
  }
 }
}
void arbol::borrar(tarbol &aux,char nom[50])
{
 if (aux==NULL)
 {
  cout<<"contacto no encontrado no encontrado !!\n\n";
 }
 else
 {if (strcmpi(nom,aux->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-borrar="">Izdo, nom);
   }
    else 
    {
     if (strcmpi(nom,aux->nombre)>0)
     {
    borrar(aux->Dcho,nom);
     }
    else
    { 
    tarbol temp=aux;
    if (aux->Izdo== NULL)
     {
     aux = aux->Dcho;
     }
     else 
     {
      if (aux->Dcho == NULL)
      {
        aux = aux->Izdo;
      }
      else 
      {
       actualizar(temp,temp->Izdo);
      }
      delete  temp;
     
     }
    }
   }
 }
}
void arbol::actualizar(tarbol &temp, tarbol &aux)
{ 
 if(aux->Dcho!=NULL)
 {
  actualizar(temp,aux->Dcho);}

 else
 {
  strcpy(temp->nombre,aux->nombre);
  strcpy(temp->telefono,aux->telefono);
  strcpy(temp->email,aux->email);
  strcpy(temp->direccion,aux->direccion);
     temp=aux;
  aux=temp->Izdo;
 }
}
void arbol::IDN( tarbol aux)
{
     if(aux!=NULL)
  { 
          IDN(aux->Izdo);
          if(strcmpi(aux->nombre,"M")!=0)
    {
              cout<<"Nombre: "<< aux->nombre<<" "<telefono<<" "<email<<" "<direccion<<" "<Dcho);
      }
}

int arbol::Peso( tarbol aux)
{
    if(aux!=NULL)
 {
  pe++; 
  Peso(aux->Izdo); 
  Peso(aux->Dcho);
  return  pe;
 }
 else
 {
  return -1;
    }
}
int arbol::maximo(int a, int b)
{ 
 if(a > b)
 return a;
 else return b;
}
int arbol::altura(tarbol &aux)
{
 if(aux)
 return aux->eq;
 else return -1;    
}
void arbol::balance (tarbol &aux, char nom[50])
{ 
  if (aux)
 {       
  if (strcmpi(nom,(aux)->nombre)>0)
  {balance(aux->Dcho,nom);
  }
  else {if (strcmpi(nom,(aux)->nombre)<0 data-blogger-escaped-aux-="" data-blogger-escaped-balance="">Dcho,nom);
    }
    }
        int fe=altura(aux->Dcho)-altura(aux->Izdo);
  switch (fe)
  {
  case -2:
   {
    if (altura(aux->Izdo->Izdo) > altura(aux->Izdo->Dcho))
    RII(aux);
    else RID(aux);
    break;
   }
  case 2:
   {
   if (altura(aux->Dcho->Dcho) > altura(aux->Dcho->Izdo))
    RDD(aux);
   else 
      RDI(aux);
   break;
   }
  default:
   aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho)) +1;
  }
 }
}
void arbol::RII(tarbol &aux){
        tarbol n1=aux->Izdo;
  aux->Izdo=n1->Dcho;
  n1->Dcho=aux;
  aux=n1;
  n1 = aux->Dcho;
  if(n1)
  n1->eq = maximo(altura(n1->Izdo),altura(n1->Dcho))+1;
  aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1; 
}
void arbol::RDD(tarbol &aux){
     tarbol temp;
     temp=aux->Dcho;
     aux->Dcho=temp->Izdo;
     temp->Izdo=aux;
     aux=temp;
     temp = aux->Izdo;
     if(temp)
     temp->eq = maximo(altura(temp->Izdo),altura(temp->Dcho))+1;
     aux->eq = maximo(altura(aux->Izdo),altura(aux->Dcho))+1;
}
void arbol::RID(tarbol &aux){
  RDD(aux->Izdo);
     RII(aux);
}
void arbol::RDI(tarbol &aux){
 RII(aux->Dcho);
 RDD(aux);
}

ArbolAVL.h

#include

class nodo{
public:
 char nombre[50];
 char telefono[10];
 char direccion[50];
 char email[50];
 int eq;
 nodo *Izdo, *Dcho;
 nodo(char nom[50],char tel[10],char dir[50],char em[50], nodo *Iz=NULL, nodo *Dr=NULL,int t=0){
 strcpy(nombre,nom);
 strcpy(telefono,tel);
 strcpy(direccion,dir);
 strcpy(email,em);
 eq=t;
 Izdo=Iz;
 Dcho=Dr; 
 }
 class arbol;
};
typedef nodo *tarbol; 
class arbol{
public: 
      tarbol miarbolito;   
     int pe;
  int a;
   arbol(){
   miarbolito=NULL;
   pe=0;
   a=0;
       }    
      void insertar(tarbol &aux,char nom[50],char tel[10],char dir[50],char em[50]);
      tarbol buscar(tarbol aux,char nom[50]);
      void borrar(tarbol &aux,char nom[50]);
      void actualizar(tarbol &temp, tarbol &aux);
      void balance(tarbol &aux, char nom[50]);
      int maximo(int a, int b);
      void IDN(tarbol aux);
      void RDD(tarbol &aux);
      void RDI(tarbol &aux);
      void RID(tarbol &aux);
      void RII(tarbol &aux);
      int Peso(tarbol aux);
      int altura(tarbol &aux);
};


puedes descargar el proyecto desde aquí.

Agenda Electronica con Arboles ABB en C++

Esta vez les traigo una agenda electronica implemetando arboles ABB, las funciones de la agenda son: agregar un nuevo contacto, buscar, eliminar, mostrar todos los contactos y mostrar el numero de contactos dentro de la agenda.

 Capturas:




Codigo:

Agenda.cpp


#include 
#include 
#include "agenda.h"
using namespace std;

int main()
{
  arbol A;
  Tarbol b;
  char nombre[30];
  char telefono[10];
  char direccion[30];
  char Email[40];
  int op;
  A.insertar(A.miarbol,"m"," 1"," 1"," 1");
  cout<>op;
	  switch(op)
	  {
	  case 1:
		  {fflush(stdin); system("cls");
			  //agregar
			
			cout<nombre<telefono<Email<direccion<nombre)<0){
			 insertar(aux->Izdo,nom,tel,dir,e); 
			}else if(strcmpi(nom,aux->nombre)>0 ){
			insertar(aux->Dcho,nom,tel,dir,e);}
	
	    }

}
Tarbol arbol::buscar(Tarbol aux,char nom[30])
{  
	if (aux==NULL){  
		return NULL;}
	else {if (strcmpi(nom,aux->nombre)==0){
				return aux;}
	else {	if (strcmpi(nom,aux->nombre)<0){
				return buscar(aux->Izdo, nom);}
			else{ return buscar(aux->Dcho, nom);}}
		}
}

void arbol::borrar( Tarbol &aux,char nom[30])
{
	if (aux==NULL){
		cout<<"contacto no encontrado no encontrado !!";}
	else {if (strcmpi(nom,aux->nombre)<0){
	           borrar(aux->Izdo, nom);}
	      else {if (strcmpi(nom,aux->nombre)>0){
				borrar(aux->Dcho,nom);}
				else{ Tarbol temp=aux;
				if (aux->Izdo== NULL){
					aux = aux->Dcho;
					}else {if (aux->Dcho == NULL){
								aux = aux->Izdo;}
							else {reemplazar(temp,temp->Izdo);}
						
					delete  temp;
					}
				}
		  }
	}
}
void arbol::reemplazar(Tarbol &temp, Tarbol &aux)
{ 
	if(aux->Dcho!=NULL){
		reemplazar(temp,aux->Dcho);}
	else{
		strcpy(temp->nombre,aux->nombre);
		strcpy(temp->telefono,aux->telefono);
		strcpy(temp->Email,aux->Email);
		strcpy(temp->direccion,aux->direccion);
		
	    temp=aux;
		aux=temp->Izdo;
	}
}



void arbol::Inorden( Tarbol aux){//muestra de la A-Z
if(aux!=NULL){
 Inorden(aux->Izdo); //recorre el subárbol Izquierdo
 if(strcmpi(aux->nombre,"m")!=0){
	 cout<<"--NOMBRE: "<< aux->nombre<<" "<telefono<<" "<Email<<" "<direccion<<" "<Dcho); //recorre el subárbol Derecho
}

}


int arbol::Peso( Tarbol aux)//muestra el numero de contactos
{
   	if(aux!=NULL){
		p++; 
		Peso(aux->Izdo); //recorre el subárbol Izquierdo
		Peso(aux->Dcho);
		return  p;
	}else {
		return -1;}

}




Agenda.h

#include


class nodo{
public:
	char nombre[30];
	char telefono[10];
	char direccion[30];
	char Email[40];
	nodo *Izdo, *Dcho;

	nodo(char nom[30],char tel[10],char dir[30],char e[40], nodo *Iz=NULL, nodo *Dr=NULL){
	strcpy(nombre,nom);
	strcpy(telefono,tel);
	strcpy(direccion,dir);
	strcpy(Email,e);
	Izdo=Iz;
	Dcho=Dr;	
	}
 class arbol;
};
typedef nodo *Tarbol; 
class arbol{
public: 
      Tarbol miarbol;	  
    	int p;
		int a;
			arbol(){
			miarbol=NULL;
			p=0;
			a=0;
	  		  }
void insertar(Tarbol &aux,char nom[30],char tel[10],char dir[30],char e[40]);
Tarbol buscar(Tarbol aux,char nom[30]);
void borrar(Tarbol &aux,char nom[30]);
void reemplazar(Tarbol &temp, Tarbol &aux);


void Inorden(Tarbol aux);


int arbol::Peso(Tarbol aux);


};


descarga todo el proyecto desde aqui.