ESTRUCTURA PROYECTO

Páginas: 13 (3021 palabras) Publicado: 23 de mayo de 2015
LIBRERIAS AVL
#define TRUE 1
#define FALSE 0


/* Estructuras y tipos */
typedef struct _nodo {
int indice;
int codigo;
int prioridad;
int tiempo;
int FE;
struct _nodo *derecho;
struct _nodo *izquierdo;
struct _nodo *padre;
} tipoNodo;

typedef tipoNodo *pNodo;
typedef tipoNodo *Arbol;

enum {IZQUIERDO, DERECHO};

/* Funciones con árboles: */

/* Insertar en árbolordenado: */
void Insertar(Arbol *a, int ind,int cod, int prio,int tie);

/* Borrar un elemento: */
void Borrar(Arbol *a, int ind);

/* Función de búsqueda: */
int Buscar(Arbol a, int ind);

/* Comprobar si el árbol está vacío: */
int Vacio(Arbol r);

/* Comprobar si es un nodo hoja: */
int EsHoja(pNodo r);

/* Contar número de nodos: */
int NumeroNodos(Arbol a, int* c);

/* Calcular la altura de unárbol: */
int AlturaArbol(Arbol a, int* altura);

/* Calcular altura de un dato: */
int Altura(Arbol a, int ind);

/* Aplicar una función a cada elemento del árbol: */
void InOrden(Arbol, void (*func)(pNodo*));
void PreOrden(Arbol, void (*func)(pNodo*));
void PostOrden(Arbol, void (*func)(pNodo*));

// Funciones de equilibrado:
void Equilibrar(Arbol *raiz, pNodo nodo, int, int);
void RSI(Arbol *raiz,pNodo indice);
void RSD(Arbol *raiz, pNodo indice);
void RDI(Arbol *raiz, pNodo indice);
void RDD(Arbol *raiz, pNodo indice);

/* Funciones auxiliares: */
void Podar(Arbol *a);
void auxContador(Arbol a, int*);
void auxAltura(Arbol a, int, int*);

void Mostrar(pNodo *muestra,int *);


/* Programa de ejemplo */





/* Poda: borrar todos los nodos a partir de uno, incluido */
void Podar(Arbol *a)
{/* Algoritmo recursivo, recorrido en postorden */
if(*a) {
Podar(&(*a)->izquierdo); /* Podar izquierdo */
Podar(&(*a)->derecho); /* Podar derecho */
free(*a); /* Eliminar nodo */
*a = NULL;
}
}

/* Insertar un dato en el árbol ABB */
void Insertar(Arbol *a, int ind,int cod, int prio,int tie)
{

pNodo padre = NULL;
pNodo actual = *a;

/*Buscar el dato en el árbol, manteniendo un puntero al nodo padre */
while(!Vacio(actual) && ind != actual->indice) {
padre = actual;
if(ind < actual->indice)
actual = actual->izquierdo;
else if(ind > actual->indice)
actual = actual->derecho;
}

/* Si se ha encontrado el elemento, regresar sin insertar */
if(!Vacio(actual)){
printf("El indice yaexiste");
return;
}
/* Si padre es NULL, entonces el árbol estaba vacío, el nuevo nodo será
el nodo raiz */
if(Vacio(padre)) {
*a = (Arbol)malloc(sizeof(tipoNodo));
(*a)->indice = ind;
(*a)->codigo = cod;
(*a)->prioridad = prio;
(*a)->tiempo = tie;
(*a)->izquierdo = (*a)->derecho = NULL;
(*a)->padre = NULL;
(*a)->FE = 0;
}
/*Si el dato es menor que el que contiene el nodo padre, lo insertamos
en la rama izquierda */
else if(ind < padre->indice) {
actual = (Arbol)malloc(sizeof(tipoNodo));
padre->izquierdo = actual;
actual->indice = ind;
actual->codigo = cod;
actual->prioridad = prio;
actual->tiempo = tie;

actual->izquierdo = actual->derecho = NULL;actual->padre = padre;
actual->FE = 0;
Equilibrar(a, padre, IZQUIERDO, TRUE);
}
/* Si el dato es mayor que el que contiene el nodo padre, lo insertamos
en la rama derecha */
else if(ind > padre->indice) {
actual = (Arbol)malloc(sizeof(tipoNodo));
padre->derecho = actual;
actual->indice = ind;
actual->codigo = cod;
actual->prioridad = prio;actual->tiempo = tie;
actual->izquierdo = actual->derecho = NULL;
actual->padre = padre;
actual->FE = 0;
Equilibrar(a, padre, DERECHO, TRUE);
}
}



/* Equilibrar árbol AVL partiendo del nodo nuevo */
void Equilibrar(Arbol *a, pNodo indice, int rama, int nuevo)
{
int salir = FALSE;

/* Recorrer camino inverso actualizando valores de FE: */
while(indice && !salir) {...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Estructura de proyecto
  • ESTRUCTURA DE UN PROYECTO
  • estructura de proyectos
  • Proyecto Estructuras
  • estructura de un proyecto
  • Estructura de un proyecto
  • estructura de un proyecto
  • Estructura de un proyecto

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS