Ver Mensaje Individual
  #7 (permalink)  
Antiguo 13/03/2014, 15:06
Aeternum90
 
Fecha de Ingreso: marzo-2014
Mensajes: 6
Antigüedad: 10 años, 9 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