arbol binario

7
ARBOL BINARIO #include <stdio.h> #include <stdlib.h> struct nodo { //creacion de escructura int valor; struct nodo *izq, *der; }; struct nodo *insertar(struct nodo *raiz, int valor_nuevo) { struct nodo *nuevo; if (raiz==NULL) { nuevo = malloc(sizeof(struct nodo)); nuevo->valor = valor_nuevo; nuevo->izq = NULL; nuevo->der = NULL; return nuevo; } if (valor_nuevo <= raiz->valor) { // Tenemios que insertar por la izquierda raiz->izq = insertar(raiz->izq, valor_nuevo); } else { // Tenemos que insertar por la derecha raiz->der = insertar(raiz->der, valor_nuevo); } return raiz; } void imprimir(struct nodo *raiz) { if (raiz!=NULL) { imprimir(raiz->izq); printf("%d\n", raiz->valor); imprimir(raiz->der); } } main() { struct nodo *r; r = NULL; r = insertar(r,10); r = insertar(r,5); r = insertar(r,15); r = insertar(r,7);

Upload: julio-andres

Post on 14-Sep-2015

212 views

Category:

Documents


0 download

DESCRIPTION

arbol

TRANSCRIPT

ARBOL BINARIO#include #include struct nodo { //creacion de escructura int valor; struct nodo *izq, *der;};struct nodo *insertar(struct nodo *raiz, int valor_nuevo) { struct nodo *nuevo; if (raiz==NULL) { nuevo = malloc(sizeof(struct nodo)); nuevo->valor = valor_nuevo; nuevo->izq = NULL; nuevo->der = NULL; return nuevo; } if (valor_nuevo valor) { // Tenemios que insertar por la izquierda raiz->izq = insertar(raiz->izq, valor_nuevo); } else { // Tenemos que insertar por la derecha raiz->der = insertar(raiz->der, valor_nuevo); } return raiz;}

void imprimir(struct nodo *raiz) { if (raiz!=NULL) { imprimir(raiz->izq); printf("%d\n", raiz->valor); imprimir(raiz->der); }}

main() { struct nodo *r;

r = NULL; r = insertar(r,10); r = insertar(r,5); r = insertar(r,15); r = insertar(r,7); imprimir(r); system("pause");}

Lista circular doblemente enlazada #include #include struct Nodo{char Dato;struct Nodo *sgte;struct Nodo *atras;};

typedef struct Nodo Listacd;typedef Listacd *PtrLista;

void Insertar (PtrLista *,char);void ImprimirLista(PtrLista*);void ImprimirDoble(PtrLista*);void Eliminar(PtrLista*);void EliminarDato(PtrLista*,char);

main(){PtrLista PtrInicio=NULL;char Dato;Dato='A';Insertar(&PtrInicio,Dato);Dato='B';Insertar(&PtrInicio,Dato);Dato='C';Insertar(&PtrInicio,Dato);Dato='D';Insertar(&PtrInicio,Dato);Dato='E';Insertar(&PtrInicio,Dato);ImprimirLista(&PtrInicio);EliminarDato(&PtrInicio,'B');ImprimirLista(&PtrInicio);getche();}void Insertar(PtrLista *PIni,char Valor){PtrLista PtrNuevo,PtrActual;PtrNuevo =(Listacd *) malloc(sizeof(Listacd));if(PtrNuevo != NULL){PtrNuevo->atras=NULL;PtrNuevo->Dato=Valor;PtrNuevo->sgte=NULL;PtrActual=*PIni; //EN EL CASO QUE LA LISTA ESTA VACIAPtrActual=*PIni; if (PtrActual==NULL){ *PIni=PtrNuevo; PtrNuevo->atras=*PIni;PtrNuevo->sgte=*PIni;} else{ while (PtrActual->sgte!=*PIni) PtrActual=PtrActual->sgte;PtrNuevo->atras=PtrActual;PtrNuevo->sgte=*PIni;PtrActual->sgte=PtrNuevo;(*PIni)->atras=PtrNuevo;}}}void Eliminar(PtrLista *PIni){ PtrLista PtrActual; PtrActual=*PIni; if (PtrActual->sgte==NULL){ *PIni=NULL; free(PtrActual); } else{ while(PtrActual->sgte!=*PIni) PtrActual=PtrActual->sgte; PtrActual->atras->sgte=*PIni; free(PtrActual);}}

void ImprimirLista(PtrLista *PIni){PtrLista PtrActual=*PIni;if (PtrActual==NULL)printf("La lista esta vacia");else{printf ("La lista es la siguiente:\n\n");while (PtrActual->sgte!=*PIni){printf("[%c]-->",PtrActual->Dato );PtrActual=PtrActual->sgte;}while (PtrActual!=*PIni){printf("[%c]-->",PtrActual->Dato );PtrActual=PtrActual->atras;}printf("[%c]-->",PtrActual->Dato );}}void EliminarDato(PtrLista *PIni,char valor){ PtrLista PtrActual; int f=0; PtrActual=*PIni; if (PtrActual->sgte==*PIni){ *PIni=NULL; free(PtrActual); } else{ while (PtrActual->sgte!=*PIni&&f==0){ if(PtrActual->Dato==valor) f=1;elsePtrActual=PtrActual->sgte;} if(f==1){ if(PtrActual==*PIni){*PIni=PtrActual->sgte;PtrActual->sgte->atras=*PIni;}else if(PtrActual->sgte==*PIni){PtrActual->atras->sgte==*PIni;}else{PtrActual->sgte->atras=PtrActual->atras;PtrActual->atras->sgte=PtrActual->sgte;}free(PtrActual); printf("\nLetra Eliminada\n\n");}elseprintf("\nNo se encontro Letra\n\n");}}void ImprimirDoble(PtrLista *PIni){int f=0;PtrLista PtrActual;PtrActual=*PIni;if (PtrActual==NULL)printf("La listaaaaa esta vacia");else{printf ("La lista es la siguiente:\n\n");while (f==0||PtrActual->sgte!=*PIni){if(PtrActual->sgte==*PIni)f=1;printf("[%c]-->",PtrActual->Dato );PtrActual=PtrActual->sgte;}printf("[%c]-->",PtrActual->Dato );}

}

void insertar_ultimo(){ system("cls"); struct nodo *nuevo; nuevo=( struct nodo*)malloc(sizeof( struct nodo)); if(nuevo==NULL) printf("\n MEMORIA INSUFICIENTE\n"); else{ printf("\n Nombre: "); fflush(stdin); gets(nuevo->nombre); nuevo->siguiente=NULL; if(primero==NULL){ nuevo->anterior=NULL; nuevo->siguiente=NULL; primero=nuevo; ultimo=nuevo; } else{ nuevo->siguiente= NULL; nuevo->anterior=ultimo; ultimo->siguiente=nuevo; ultimo=nuevo; } } }

void insertar_primero(){ system("cls"); struct nodo *nuevo; nuevo=( struct nodo*)malloc(sizeof( struct nodo)); if(nuevo==NULL) printf(" MEMORIA INSUFICIENTE\n"); else{ printf("\n Nombre: "); fflush(stdin); gets(nuevo->nombre); nuevo->anterior=NULL; nuevo->siguiente= primero; primero->anterior = nuevo; primero= nuevo; numNodos++; } } void insertar_intermedio(){ system("cls"); struct nodo *actual; struct nodo *nuevo; nuevo=( struct nodo*)malloc(sizeof( struct nodo)); if(nuevo==NULL) printf("\n MEMORIA INSUFICIENTE\n"); if (numNodos < 2) printf("\n Nmero de nodos insuficiente"); else{ int pos_insertar; printf("\n Nombre: "); fflush(stdin); gets(nuevo->nombre); printf("\n Posicin: "); scanf(" %d", &pos_insertar); if((pos_insertar > 1) &&(pos_insertar siguiente= actual->siguiente; nuevo->anterior = actual; actual->siguiente->anterior = nuevo; actual->siguiente = nuevo; numNodos++; } } printf("\n\n\n\n\n\n\n"); system("pause"); }