Estructura de datos

Solo disponible en BuenasTareas
  • Páginas : 2 (468 palabras )
  • Descarga(s) : 0
  • Publicado : 8 de diciembre de 2011
Leer documento completo
Vista previa del texto
Estructura de Datos
Deber #1

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <conio.c>Nodo* crearNodo(int id, char* n);
void insertar (Nodo** raiz, int matricula, char* nombre);
void eliminar (Nodo** raiz, int matricula);
void reemplazar(Nodo** act);
void visualizar (Nodo* r);struct Nodo
{
int Cod;
char nombre[40];
Nodo *HI;
Nodo *HD;
};

Nodo* crearNodo(int id, char *n)
{
Nodo *t;
t = (Nodo*)malloc(sizeof(Nodo));
t->Cod=id;
strcpy(t->nombre, n);t->HI=NULL;
t->HD=NULL;
return(t);
}

void insertar (Nodo** raiz, int matricula, char *nombre)
{
if (!(*raiz))
*raiz = crearNodo(matricula, nombre);
else
if (matricula < (*raiz)->Cod)insertar (&((*raiz)->HI),matricula, nombre);
else
insertar (&((*raiz)->HD),matricula, nombre);
}

void eliminar (Nodo** r, int matricula)
{
if (!(*r))
printf("!! Nodo noencontrado !!\n\n");
else
if (matricula < (*r)->Cod)
eliminar(&(*r)->HI, matricula);
else
if (matricula> (*r)->Cod)
eliminar(&(*r)->HD,matricula);
else // Nodo encontrado
{Nodo* q; // puntero al nodo a suprimir
q = (*r);
if (q -> HI == NULL)
(*r) = q -> HD;
else
if (q -> HD == NULL)
(*r) = q -> HI;
else
{
reemplazar(&q);
}
free(q);printf("%d eliminado ...!!\n\n", matricula);
}
}

void reemplazar(Nodo** act)
{
Nodo* a, *p;
p = *act;
a = (*act)->HI;// rama de menores
while (a->HD)
{
p = a;
a = a -> HD;
}(*act)->Cod=a->Cod;
strcpy((*act)->nombre,a->nombre);
if (p == (*act))
p->HI = a -> HI;
else
p->HD = a -> HI;
(*act) = a;
}

//Visualiza utilizando recorrido inorden
voidvisualizar (Nodo* r)
{
if (r)
{
visualizar(r -> HI);
printf("Matricula %d \t %s \n",r->Cod,r->nombre);
visualizar(r -> HD);
}
}

int main()
{
int nm, i=1;
char nom[30];
Nodo...
tracking img