1 
INSTITUTO TECNOLOGICO SUPERIOR DE FELIPE 
CARRILLO PUERTO 
MATERIA: 
ESTRUCTURA DE DATOS 
DOCENTE: 
MIL. NIELS HENRYK ARANDA CUEVAS 
UNIDAD 3: 
ESTRUCTURAS LINEALES 
ALUMNO: 
ELIU OSSEAS PUC PUC 
CARRERA: 
INGENIERIA EN SISTEMAS COMPUTACIONALES 
GRUPO: 
B
2 
INTRODUCCION: 
Los árboles son formas de manejo de datos de apuntadores para estar 
ubicando información de los datos siempre y cuando manteniendo la jerarquía 
de los datos, como su nombre de árbol es una serie de directorios de datos 
donde se almacena información y podemos realizar recorridos de ciertas 
formas para poder localizar un elemento ya que se pueden definir en ramas y 
cada rama es un camino que podemos seguir para llegar a la información. 
PROGRAMA DONDE SE EMPLEA UN ARBOL. 
#include <iostream> 
#include <stdlib.h> 
#include <conio.h> 
#define maxpila 100 
using namespace std; 
struct nodo 
{ 
int info; 
struct nodo *llink; 
struct nodo *rlink; 
}*raiz; 
struct PILA{ 
int tope; 
struct nodo *cont[maxpila]; 
};
3 
void limpiarpila(struct PILA *pila) { 
pila->tope=0; 
} 
bool pilavacia (struct PILA *pila){ 
bool valor; 
if (pila->tope==0) valor=true; 
else valor = false; 
return valor; 
} 
bool pilallena (struct PILA *pila){ 
bool valor; 
if (pila->tope==maxpila) valor=true; 
else valor = false; 
return valor; 
} 
void meterpila(struct PILA *pila, struct nodo *p) { 
if (pilallena (pila) == false){ 
pila->tope=pila->tope+1; 
pila->cont[pila->tope]=p; 
} 
else cout << "nERROR: No se puede insertar en la pila, ya que esta llena"; 
}
4 
void sacarpila(struct PILA *pila, struct nodo 
**q){ 
if (pilavacia(pila)==false){ 
*q=pila->cont[pila->tope]; 
pila->tope--; 
} 
else cout << "nERROR: No se puede sacar de la pila, ya que esta vacia"; 
} 
void creararbol(){ 
struct nodo *p, *q, *r; 
int n, i; 
cout << "Cuantos nodos va a tener el arbol?"; 
cin >> n; 
raiz = (struct nodo *)malloc(sizeof(struct nodo)); 
cout << "Por favor digite la info del nodo raiz del arbol: "; 
cin >> raiz->info; 
raiz->llink = NULL; 
raiz->rlink = NULL; 
for (i=2;i<=n;i++){ 
p = (struct nodo *) malloc(sizeof(struct nodo)); 
cout << "Por favor digite la info del nodo " << i << " del arbol: "; 
cin >> p->info; 
p->llink = NULL; 
p->rlink = NULL;
5 
q=raiz; 
while (q!=NULL){ 
r=q; 
if (p->info > q->info) q=q->rlink; 
else q=q->llink; 
} 
if (p->info > r->info) r->rlink=p; 
else r->llink=p; 
} 
} 
void recorrerprofDerecha(){ 
struct PILA pila; 
struct nodo *p; 
int cont=0; 
limpiarpila(&pila); 
meterpila (&pila, raiz); 
cout << "nnLos datos del arbol recorrido en profundidad son: n"; 
while (pilavacia(&pila)==false){ 
sacarpila (&pila,&p); 
cout << endl << p->info; 
if (p->rlink != NULL) {
6 
meterpila (&pila, p->rlink); 
cont++; 
} 
} 
cout << "nnLos datos del arbol insertados a la derecha son: n"<<cont; 
} 
void recorrerprofIzquierda(){ 
struct PILA pila; 
struct nodo *p; 
int cont=0; 
limpiarpila(&pila); 
meterpila (&pila, raiz); 
cout << "nnLos datos del arbol recorrido en profundidad son: n"; 
while (pilavacia(&pila)==false){ 
sacarpila (&pila,&p); 
cout << endl << p->info; 
if (p->llink != NULL){
7 
meterpila (&pila, p->llink); 
cont++; 
} 
} 
cout << "nnLos datos del arbol insertados a la izquierda son: n"<<cont; 
} 
int main(void) 
{ 
creararbol(); 
recorrerprofDerecha(); 
recorrerprofIzquierda(); 
getch(); 
return 0; 
} 
DESCRIPCION DEL PROGRAMA: 
El programa anterior es un poco complejo ya que tiene muchas partes de 
código pero lo principal que realiza, es leer varios valores donde se almacena 
una gran cantidad de información, y lo que va realizar es ir transformando las 
ramas del árbol dependiendo la cantidad de información que vamos a estar 
ingresando, también manejando datos de pila y los datos de la cola.
8 
CONCLUSION: 
Como conclusión nosotros entendimos esta forma de manejo de datos de 
varias maneras y también a utilizarlos mediante los métodos anteriores vistos y 
que van a ser de gran importancia en nuestra formación profesional, Como 
conclusión tenemos que los árboles son algo parecido a los nodos y lo que 
hacen es realizar la Administración de grupos de nodos que van a tener una 
jerarquía de datos y apuntadores donde se maneja información. Es muy similar 
a los nodos ya que de igual manera podemos decir que se aplica lo que viene 
siendo la jerarquía porque de uno de mayor jerarquía se desprenden otros de 
menor nivel de rango y así hasta quedar similar a un árbol o de un ejemplo de 
este podría ser algo similar a un árbol genealógico que de igual manera esta 
por niveles pero aquí se refiere mas al ordenamiento de datos.

Informe estructuras no lineales unidad 4

  • 1.
    1 INSTITUTO TECNOLOGICOSUPERIOR DE FELIPE CARRILLO PUERTO MATERIA: ESTRUCTURA DE DATOS DOCENTE: MIL. NIELS HENRYK ARANDA CUEVAS UNIDAD 3: ESTRUCTURAS LINEALES ALUMNO: ELIU OSSEAS PUC PUC CARRERA: INGENIERIA EN SISTEMAS COMPUTACIONALES GRUPO: B
  • 2.
    2 INTRODUCCION: Losárboles son formas de manejo de datos de apuntadores para estar ubicando información de los datos siempre y cuando manteniendo la jerarquía de los datos, como su nombre de árbol es una serie de directorios de datos donde se almacena información y podemos realizar recorridos de ciertas formas para poder localizar un elemento ya que se pueden definir en ramas y cada rama es un camino que podemos seguir para llegar a la información. PROGRAMA DONDE SE EMPLEA UN ARBOL. #include <iostream> #include <stdlib.h> #include <conio.h> #define maxpila 100 using namespace std; struct nodo { int info; struct nodo *llink; struct nodo *rlink; }*raiz; struct PILA{ int tope; struct nodo *cont[maxpila]; };
  • 3.
    3 void limpiarpila(structPILA *pila) { pila->tope=0; } bool pilavacia (struct PILA *pila){ bool valor; if (pila->tope==0) valor=true; else valor = false; return valor; } bool pilallena (struct PILA *pila){ bool valor; if (pila->tope==maxpila) valor=true; else valor = false; return valor; } void meterpila(struct PILA *pila, struct nodo *p) { if (pilallena (pila) == false){ pila->tope=pila->tope+1; pila->cont[pila->tope]=p; } else cout << "nERROR: No se puede insertar en la pila, ya que esta llena"; }
  • 4.
    4 void sacarpila(structPILA *pila, struct nodo **q){ if (pilavacia(pila)==false){ *q=pila->cont[pila->tope]; pila->tope--; } else cout << "nERROR: No se puede sacar de la pila, ya que esta vacia"; } void creararbol(){ struct nodo *p, *q, *r; int n, i; cout << "Cuantos nodos va a tener el arbol?"; cin >> n; raiz = (struct nodo *)malloc(sizeof(struct nodo)); cout << "Por favor digite la info del nodo raiz del arbol: "; cin >> raiz->info; raiz->llink = NULL; raiz->rlink = NULL; for (i=2;i<=n;i++){ p = (struct nodo *) malloc(sizeof(struct nodo)); cout << "Por favor digite la info del nodo " << i << " del arbol: "; cin >> p->info; p->llink = NULL; p->rlink = NULL;
  • 5.
    5 q=raiz; while(q!=NULL){ r=q; if (p->info > q->info) q=q->rlink; else q=q->llink; } if (p->info > r->info) r->rlink=p; else r->llink=p; } } void recorrerprofDerecha(){ struct PILA pila; struct nodo *p; int cont=0; limpiarpila(&pila); meterpila (&pila, raiz); cout << "nnLos datos del arbol recorrido en profundidad son: n"; while (pilavacia(&pila)==false){ sacarpila (&pila,&p); cout << endl << p->info; if (p->rlink != NULL) {
  • 6.
    6 meterpila (&pila,p->rlink); cont++; } } cout << "nnLos datos del arbol insertados a la derecha son: n"<<cont; } void recorrerprofIzquierda(){ struct PILA pila; struct nodo *p; int cont=0; limpiarpila(&pila); meterpila (&pila, raiz); cout << "nnLos datos del arbol recorrido en profundidad son: n"; while (pilavacia(&pila)==false){ sacarpila (&pila,&p); cout << endl << p->info; if (p->llink != NULL){
  • 7.
    7 meterpila (&pila,p->llink); cont++; } } cout << "nnLos datos del arbol insertados a la izquierda son: n"<<cont; } int main(void) { creararbol(); recorrerprofDerecha(); recorrerprofIzquierda(); getch(); return 0; } DESCRIPCION DEL PROGRAMA: El programa anterior es un poco complejo ya que tiene muchas partes de código pero lo principal que realiza, es leer varios valores donde se almacena una gran cantidad de información, y lo que va realizar es ir transformando las ramas del árbol dependiendo la cantidad de información que vamos a estar ingresando, también manejando datos de pila y los datos de la cola.
  • 8.
    8 CONCLUSION: Comoconclusión nosotros entendimos esta forma de manejo de datos de varias maneras y también a utilizarlos mediante los métodos anteriores vistos y que van a ser de gran importancia en nuestra formación profesional, Como conclusión tenemos que los árboles son algo parecido a los nodos y lo que hacen es realizar la Administración de grupos de nodos que van a tener una jerarquía de datos y apuntadores donde se maneja información. Es muy similar a los nodos ya que de igual manera podemos decir que se aplica lo que viene siendo la jerarquía porque de uno de mayor jerarquía se desprenden otros de menor nivel de rango y así hasta quedar similar a un árbol o de un ejemplo de este podría ser algo similar a un árbol genealógico que de igual manera esta por niveles pero aquí se refiere mas al ordenamiento de datos.