13/03/2014, 15:06
|
| | Fecha de Ingreso: marzo-2014
Mensajes: 6
Antigüedad: 10 años, 8 meses Puntos: 0 | |
Respuesta: Lectura de Comandos desde un TXT Tienes Razon aqui esta el ABB algunos comandos los tuve que cambiar porque como estoy trabajando en UBUNTU los dos trabajan bien:
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
struct arbol{
char elemento;
struct arbol*izq;
struct arbol*der;
};
arbol *t = NULL;
// Funcion Para Agregar Al ABB
void insertabb(struct arbol **t,char etiqueta){
struct arbol*p,*n;
if(*t==NULL){
n=(struct arbol*)malloc(sizeof(struct arbol));
n->izq=NULL;
n->der=NULL;
n->elemento=etiqueta;
(*t)=n;
}
else{
p=(*t);
if(etiqueta<p->elemento){
insertabb(&p->izq,etiqueta);
}
else{
if(etiqueta>p->elemento){
insertabb(&p->der,etiqueta);
}
else{
cout<<"Elemento Repetido";
}
}
}
}
//Funciones Para Ordenar El Arbol
void enOrden(arbol *t){
if(t!=NULL){
enOrden(t->izq);
cout << t->elemento<< " ";
enOrden(t->der);
}
}
void preOrden(arbol *t){
if(t!=NULL){
cout << t->elemento <<" ";
preOrden(t->izq);
preOrden(t->der);
}
}
void postOrden(arbol *t){
if(t!=NULL){
postOrden(t->izq);
postOrden(t->der);
cout << t->elemento << " ";
}
}
void verArbol(arbol *t, int n){
if(t==NULL)
return;
verArbol(t->der, n+1);
for(int i=0; i<n; i++)
cout<<" ";
cout<< t->elemento<<endl;
verArbol(t->izq, n+1);
}
// Funcion Para Agregar Desde Consola
void ingreManual(){
int n,i,etiqueta;
printf("\n\n\n\n\t\t\tINGRESO DE INFORMACION EN EL ABB");
printf("\n\n\t\t\tIngrese Cantidad De Nodos a Crear : ");
cin>>n;
for(i=0;i<n;i++){
cout<<"\nIngrese Valor Al Nodo "<<i+1<<" :";
cin>>etiqueta;
insertabb(&t,etiqueta);
}
system("clear");
}
//Funcion Para Agregar Archivo .txt
void IngreTxt(){
FILE *archivo;
char x;
archivo = fopen("prueba.txt","r");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
}else{
printf("\nEl contenido del archivo de prueba es \n\n");
while (feof(archivo) == 0){
x = fgetc(archivo);
cout<<x;
insertabb(&t,x);
}
}
fclose(archivo);
}
// Funcion Para Mostrar El Contenido
int Mostrar(){
printf("\n\t\tMOSTRANDO RECORRIDO DEL ARBOL BINARIO DE BUSQUEDA (ABB)");
printf("\n\n\nMostrando Arbol Binario De Busqueda \n\n");
verArbol( t, 0);
printf("\nOrdenes Del Arbol Binario De Busqueda");
printf("\n\nEn-Orden : ");
enOrden(t);
printf("\n\nPost-Orden : ");
postOrden(t);
printf("\n\nPre-Orden : ");
preOrden(t);
return(0);
}
//Menu Del Programa
int main(){
int op1;
char op2='s';
while ((op2=='s')||(op2=='S'))
{
printf("\n\n\n\n\n\n\t\t\tMENU DE ARBOL BINARIO DE BUSQUEDA (ABB)");
printf("\n\n\t\t\t-> Ingrese 1 Para Agregar Informacion Al ABB");
printf("\n\t\t\t-> Ingrese 2 Para Recorrer ABB");
printf("\n\t\t\t-> Ingrese 3 Para Buscar");
printf("\n\t\t\t-> Ingrese 4 Para Eliminar");
printf("\n\t\t\t-> Ingrese 5 Para Agregar Archivo .txt");
printf("\n\t\t\t-> Ingrese 6 Para Salir");
printf("\n\n\t\t\t -> Ingrese Opcion : ");
scanf("%d",&op1);
system("clear");
switch(op1)
{
case 1:
ingreManual();
break;
case 2:
Mostrar();
break;
case 3:
break;
case 4:
break;
case 5:
IngreTxt();
break;
case 6:
break;
default:
printf("\n\nLa Opcion Ingresada No Existe En El Menu Del Arbol Binario De Busqueda:\n" "");
break;
}
printf("\n\n\n\n\n\tDesea Regresar Al Menu Del Arbol Binario De Busqueda ...s/n?:"" ");
cin>>op2;
system("clear");
if((op2=='n')||(op2=='N'))
printf("\n\n\n\n\n\n\n\n\t\tPresione ENTER para Cerrar La Consola De Ejecucion");
}
}
Y Aqui esta el AVL pero este solo lo e probado que me agrege desde consola todavia no le hecho que me agrege desde TXT
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
struct AVL{
int elemento;
struct AVL *izqda;
struct AVL *drcha;
int altura;
};
AVL *A = NULL;
#define AVL_VACIO NULL
#define maximo(a,b)((a>b)?(a):(b))
#define altura(n)(n?n->altura:-1)
// Funciones
void Simple_derecha(struct AVL **A){
struct AVL *p;
p=(*A)->izqda;
(*A)->izqda=p->drcha;
p->drcha=(*A);
(*A)=p;
/*Ajustamos La Altura*/
p=(*A)->drcha;
p->altura=maximo(altura(p->izqda),altura(p->drcha))+1;
(*A)->altura=maximo(altura((*A)->izqda),altura((*A)->drcha))+1;
}
void Simple_izquierda(struct AVL **A){
struct AVL *p;
p=(*A)->drcha;
(*A)->drcha=p->izqda;
p->izqda=(*A);
(*A)=p;
/*Ajustamos La Altura*/
p=(*A)->izqda;
p->altura=maximo(altura(p->izqda),altura(p->drcha))+1;
(*A)->altura=maximo(altura((*A)->izqda),altura((*A)->drcha))+1;
}
void Doble_izquierda_derecha(struct AVL *A){
Simple_izquierda(&((A)->izqda));
Simple_derecha(&A);
}
void Doble_derecha_izquierda(struct AVL *A){
Simple_derecha(&((A)->drcha));
Simple_izquierda(&A);
}
void ajusta_AVL(int e, struct AVL **A){
if ((*A)!=NULL){
if (e > (*A)->elemento){
ajusta_AVL(e,&((*A)->drcha));
}else if (e < (*A)->elemento){
ajusta_AVL(e,&((*A)->izqda));
}
}
switch (altura((*A)->izqda) - altura((*A)->drcha)){
case 2:
if (altura((*A)->izqda->izqda) > altura((*A)->izqda->drcha))
Simple_derecha(A);
else Doble_izquierda_derecha(*A);
break;
case -2:
if (altura((*A)->drcha->drcha) > altura((*A)->drcha->izqda))
Simple_izquierda(A);
else Doble_derecha_izquierda(*A);
break;
default:
(*A)->altura =maximo(altura((*A)->izqda),altura((*A)->drcha))+1;
}
}
void insertaAVL (struct AVL **A, int e){
struct AVL *p;
p=(*A);
if(*A==NULL){
p=(struct AVL *)malloc(sizeof(struct AVL));
p->elemento = e;
p->altura = 0;
p->izqda = NULL;
p->drcha = NULL;
(*A)=p;
}
else{
p=(*A);
if(e < p-> elemento){
insertaAVL( &p -> izqda, e);
ajusta_AVL(e,&(*A));
}
else{
if(e > p -> elemento){
insertaAVL( &p -> drcha, e);
ajusta_AVL(e,&(*A));
}
else{
cout<< "Elemento Repetido";
}
}
}
}
void ingreManual(){
int n,i,etiqueta;
printf("\n\n\n\n\t\t\tINGRESO DE INFORMACION EN EL ABB");
printf("\n\n\t\t\tIngrese Cantidad De Nodos a Crear : ");
cin>>n;
for(i=0;i<n;i++){
cout<<"\nIngrese Valor Al Nodo "<<i+1<<" :";
cin>>etiqueta;
insertaAVL(&A,etiqueta);
}
system("clear");
}
void enOrden(AVL *A){
if(A!=NULL){
enOrden(A->izqda);
cout << A->elemento<< " ";
enOrden(A->drcha);
}
}
void preOrden(AVL *A){
if(A!=NULL){
cout << A->elemento <<" ";
preOrden(A->izqda);
preOrden(A->drcha);
}
}
void postOrden(AVL *A){
if(A!=NULL){
postOrden(A->izqda);
postOrden(A->drcha);
cout << A->elemento << " ";
}
}
void verArbol(AVL *A, int n){
if(A==NULL)
return;
verArbol(A->drcha, n+1);
for(int i=0; i<n; i++)
cout<<" ";
cout<< A->elemento<<endl;
verArbol(A->izqda, n+1);
}
int Mostrar(){
printf("\n\t\tMOSTRANDO RECORRIDO DEL ARBOL BINARIO DE BUSQUEDA (ABB)");
printf("\n\n\nMostrando Arbol Binario De Busqueda \n\n");
verArbol( A, 0);
printf("\nOrdenes Del Arbol Binario De Busqueda");
printf("\n\nEn-Orden : ");
enOrden(A);
printf("\n\nPost-Orden : ");
postOrden(A);
printf("\n\nPre-Orden : ");
preOrden(A);
return(0);
}
int main (){
int op1;
char op2='s';
while ((op2=='s')||(op2=='S'))
{
printf("\n\n\n\n\n\n\t\t\tMENU DE ARBOL BINARIO DE BUSQUEDA (ABB)");
printf("\n\n\t\t\t-> Ingrese 1 Para Agregar Informacion");
printf("\n\t\t\t-> Ingrese 2 Para Recorrer ABB");
printf("\n\t\t\t-> Ingrese 3 Para Buscar");
printf("\n\t\t\t-> Ingrese 4 Para Eliminar");
printf("\n\t\t\t-> Ingrese 5 Para Salir");
printf("\n\n\t\t\t -> Ingrese Opcion : ");
scanf("%d",&op1);
system("clear");
switch(op1)
{
case 1:
ingreManual();
break;
case 2:
Mostrar();
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:
printf("\n\nLa Opcion Ingresada No Existe En El Menu Del Arbol Binario De Busqueda:\n" "");
break;
}
printf("\n\n\n\n\n\tDesea Regresar Al Menu Del Arbol Binario De Busqueda ...s/n?:"" ");
cin>>op2;
system("clear");
if((op2=='n')||(op2=='N'))
printf("\n\n\n\n\n\n\n\n\t\tPresione ENTER para Cerrar La Consola De Ejecucion");
}
}
EL MENU por el momento es solo para saber que estoy agregando despues se lo tengo que quitar y unir el ABB y AVL para que funcione como uno solo pero primero necesito el lector porque sino, no estoy haciendo nada |