Practica 1

#include"stdafx.h" #include<iostream> #include<deque> usingnamespace System; usingnamespace std; void mostrarContenido(deque<int>c) { if(!c.empty()) { int tam=c.size(); for(int i=0;i<tam;i++) cout<<c[i]<<";"; } else cout<<"la cola esta vacia"<<endl; cout<<endl; } void main() { deque<int>cola; mostrarContenido(cola); cola.push_back(1); mostrarContenido(cola); cola.push_front(2); mostrarContenido(cola); cola.push_back(3); mostrarContenido(cola); cola.pop_front(); mostrarContenido(cola); cola.pop_back(); mostrarContenido(cola); cola.pop_front(); mostrarContenido(cola); System("PAUSE"); }

struct nodo { int num. puntero1 = puntero. if (puntero1 == NULL) { puntero1 = new nodo.". puntero1 ->num=numero. nodo * siguiente. } } void mostrar_cola_frente(LISTA puntero) { if(puntero==NULL) cout<<"la cola esta vacia"<<endl. puntero2 ->num = numero. else { cout<<puntero->num<<endl. puntero2 = new nodo. void push_cola (LISTA &puntero. puntero = puntero1. int numero) { LISTA puntero1. } } void pop_cola(LISTA &puntero) { . } } void mostrar_cola(LISTA puntero) { if(puntero==NULL) cout<<"la cola esta vacia"<<endl. } else { while (puntero1 ->siguiente !=NULL) puntero1 = puntero1 ->siguiente. usingnamespace std. while(puntero!=NULL) { cout<<puntero->num<<". }. LISTA inicio = NULL. typedef nodo * LISTA. puntero1 ->siguiente=NULL. puntero=puntero->siguiente.Practica 2 #include"stdafx. puntero1 ->siguiente = puntero2.h" #include<iostream> usingnamespace System. puntero2 ->siguiente = NULL. puntero2.

case 2: pop_cola(inicio). system("PAUSE"). case 4: mostrar_cola(inicio). if(puntero==NULL) cout<<"la cola esta vacia"<<endl. puntero=NULL. break. cout<<"2 sacar elemento de la cola"<<endl. cin>>op. case 5: cout<<"saliendo del sistema"<<endl. break. cout<<endl. break. delete puntero2. cout<<"3 ver el frente de la cola"<<endl. do { system("CLS"). cout<<"4 imprimir todos los elementos de la cola"<<endl. } . puntero2=puntero. default: cout<<"opcion no valida"<<endl.num. push_cola(inicio. cout<<"5 salir"<<endl. } } while(op=5).LISTA puntero2.num). } else { delete puntero2. case 3: mostrar_cola_frente(inicio). system("PAUSE"). system("PAUSE"). cout<<"1 insertar elemento en la cola"<<endl. cout<<"MENU COLA"<<endl. switch(op) { case 1: cout<<"dame el numero a insertar"<<endl. cin>>num. break. } } } void main() { int op. break. system("PAUSE"). else { if(puntero2->siguiente!=NULL) { puntero=puntero->siguiente.

. ultimo. class cola { public: cola(): primero(NULL). private: pnodo primero. nuevo = new nodo(v). primero=nodo->siguiente. } private: int valor. delete nodo. nodo *sig =NULL) { valor = v. ultimo(NULL) {} ~cola(). int leer(). if (!primero) primero=nuevo. friendclass cola. v=nodo->valor. nodo=primero. if (ultimo) ultimo ->siguiente = nuevo.Practica 3 #include"stdafx. nodo * siguiente. typedef nodo * pnodo. siguiente = sig. } void cola::Añadir (int v) { pnodo nuevo. class nodo { public: nodo (int v. ultimo=nuevo. }. } int cola::leer() { pnodo nodo. cola::~cola() { while (primero) leer(). void Añadir (int v). int v. if (!nodo) return 0. usingnamespace std.h" #include<iostream> usingnamespace System. }.

cout<<"Añadir(20)"<<endl. Cola. } void main() { cola Cola. } . Cola. cout<<"Añadir(40)"<<endl. cout<<"Leer:"<<Cola.leer()<<endl.leer()<<endl. Cola. cout<<"Añadir(10)"<<endl. cout<<"Añadir(90)"<<endl.leer()<<endl.if (!primero) ultimo=NULL. cout<<"Leer:"<<Cola. Cola.leer()<<endl.Añadir(20).Añadir(90). cout<<"Leer:"<<Cola. cout<<"Leer:"<<Cola.Añadir(40).Añadir(30). Cola. return v.Añadir(10). cout<<"Añadir(30)"<<endl. system("PAUSE").

inorden(raizPtr). int valor) { if (*arbolPtr==NULL) { *arbolPtr=new ARBOLNODO.". void inorden(ARBOLNODOPTR). struct ArbolNodo * derPtr. typedef ARBOLNODO * ARBOLNODOPTR. cout<<"Los numeros estan colocados en el arbol "<<endl. for (i=1. numero. cout<<"Recorrido del arbol en Inorden "<<endl. i++) { numero = rand()%15. system("PAUSE"). ARBOLNODOPTR raizPtr = NULL. cout<<"Recorrido del arbol en Postorden "<<endl. cout<<endl. preorden(raizPtr). } void insertarNodo (ARBOLNODOPTR * arbolPtr. cout<<"Recorrido del arbol en Preorden "<<endl. usingnamespace std. (*arbolPtr)->izqPtr = NULL. insertarNodo (&raizPtr. cout<<endl. typedefstruct ArbolNodo ARBOLNODO. postorden(raizPtr).h" #include<stdlib. int). void postorden (ARBOLNODOPTR). }.h> #include<iostream> #include<time. i<10. srand (time(NULL)). void insertarNodo (ARBOLNODOPTR*. numero). cout<<numero<<". int dato. } cout<<endl.h> usingnamespace System. void preorden (ARBOLNODOPTR). void main() { int i. (*arbolPtr)->derPtr = NULL.Practica 4 #include"stdafx. . cout<<endl. if (*arbolPtr!=NULL) { (*arbolPtr)->dato = valor. struct ArbolNodo { struct ArbolNodo * izqPtr.

valor).". valor). else cout<<"duplicado. preorden (arbolPtr->derPtr).". } } void preorden (ARBOLNODOPTR arbolPtr) { if(arbolPtr!=NULL) { cout<<arbolPtr->dato<<". else if (valor>(*arbolPtr)->dato) insertarNodo (&((*arbolPtr)->derPtr). inorden (arbolPtr->derPtr). preorden (arbolPtr->izqPtr). } } . } void inorden (ARBOLNODOPTR arbolPtr) { if(arbolPtr!=NULL) { inorden (arbolPtr->izqPtr).". cout<<arbolPtr->dato<<". ".} else cout<<"No hay memoria disponible ". } else if (valor<(*arbolPtr)->dato) insertarNodo(&((*arbolPtr)->izqPtr). postorden (arbolPtr->derPtr). cout<<arbolPtr->dato<<". } } void postorden (ARBOLNODOPTR arbolPtr) { if(arbolPtr!=NULL) { postorden (arbolPtr->izqPtr).

} //aplicar una funcion a cada elemnto del arbool: void InOrden(void (*func)(int&). //Borrar un elemento del arbol. Nodo*izquierdo.actual(NULL){} ~ArbolABB(){Podar(raiz).} //Insertar en arbol ordenado void Insertar(constint dat).} //contar numero de nodos: constint NumeroNodos().Nodo*nodo=NULL.Practica 5 #include"stdafx. //devolver referencia al int del nodo actual: int&ValorActual(){return actual->dato. Nodo*der=NULL): dato(dat). //Comprobar si el arbol esta vacio: bool Vacio(Nodo*r){return r==NULL. }.} //moverse al Nodo raiz: void Raiz(){actual=raiz.bool r=true). void PostOrden(void (*func)(int&). int contador. int altura. constint AlturaArbol(). class ArbolABB { private: ///Clase local de lista para Nodo De ArbolBinario: class Nodo { public: //constructor: Nodo(constint dat. void PreOrden(void (*func)(int&).bool r=true). //Funcion de busqueda: bool Buscar(constint dat).Nodo*nodo=NULL. void Borrar(constint dat). private: //funciones auxiliares . #include<iostream> usingnamespace std.} //Comprobar se es un nodo hoja: bool EsHoja(Nodo*r){return !r->derecho&&!r->izquierdo. Nodo*izq=NULL. public: //Constructor y destructor basicos: ArbolABB():raiz(NULL).bool r=true). Nodo*derecho.h" usingnamespace System. //calcular altura de un int: int Altura(constint dat).derecho(der){} //miembros int dato.Nodo*nodo=NULL. Nodo*actual.izquierdo(izq). //punteros de la lista para la cabeza y nodod actual Nodo*raiz.

int aux. //si padre es null.recorrido en postorden if(nodo){ Podar(nodo->izquierdo). lo insertamos //en la rama izquierda elseif(dat<padre->dato)padre->izquierdo=new Nodo(dat). //Buscar el int en el arbol. incluido void ArbolABB::Podar(Nodo*&nodo) { //algoritmo recursivo. } //eliminar un elemento de un arbol ABB void ArbolABB::Borrar(constint dat) { Nodo*padre=NULL. void auxContador(Nodo*). }. if(dat>actual->dato)actual=actual->derecho. Nodo*nodo. //Poda:borrar todos los nodods a partir de uno. } //si se ha encontrado el elemento.//podar izquierdo Podar(nodo->derecho). regresar sin insertar if(!Vacio(actual))return. //si el int es mayor que el que contiene el nodo padre. manteniendo un puntero al nodo padre while(!Vacio(actual)&&dat!=actual->dato){ padre=actual. //eliminar nodo nodo=NULL. lo insertamos //en la rama derecha elseif(dat>padre->dato)padre->derecho=new Nodo(dat). //mientras sea posible que el valor estte en el arbol while(!Vacio(actual)){ if(dat==actual->dato){//si el valor esta en el nodo actual if(EsHoja(actual)){//si ademas es un nodo hoja:lo borramos if(padre)//si tiene padre(no es el nodo raiz) //Anular el puntero que le hacemos referencia .void Podar(Nodo*&). void auxAltura(Nodo*. entonces el arbol esta vacio.int). el nuevo nodo sera //el nodo raiz if(Vacio(padre))raiz= new Nodo(dat). actual=raiz. actual=raiz. } } //Insertar un int en el arbol ABB void ArbolABB::Insertar(constint dat) { Nodo*padre =NULL. //si el int es menor que el que contiene el nodo padre.//podar derecho delete nodo. elseif(dat<actual->dato)actual=actual->izquierdo.

El nodo encontrado no tiene //por que ser un nodo hoja.que tiene //el prototipo . while(nodo->derecho){ padre=nodo.cerrando el bulce nos aseguramos //de que solo se elimine nodos hoja. } //recorrido de arbol en preorden. while(nodo->izquierdo){ padre=nodo. nodo=nodo->izquierdo. nodo=nodo->derecho.//Borrar el nodo actual=NULL. //buscar nodo mas izquierdode rama derecha if(actual->derecho){ nodo=actual->derecho. aux=actual->dato.false). aplicamos la funcion fun. } } else{//todavia no hemos encontrado el valor. if(dat>actual->dato)actual=actual->derecho. pero no es hoja //buscar nodo padre=actual. nodo->dato=aux. delete actual.false). func(nodo->dato). actual=nodo.if(padre->derecho==actual)padre>derecho=NULL.Nodo*nodo.que tiene //el prototipo //void func(int&) void ArbolABB::InOrden(void(*func)(int&). return. if(nodo->derecho)InOrden(func. elseif(padre->izquierdo == actual)padre>izquierdo = NULL. } } //intercambiar valores de no a borrar un nodo encontradao //y continuar. actual->dato=nodo->dato. aplicamos la funcion func. if(nodo->izquierdo)InOrden(func. } else{//si el valor esta en el nodo actual.cerrando el bucle. } } } //recorrido de arbol en inorden.nodo->derecho. } } //o buscar nodo mas derecho de rama izquierdo else{ nodo=actual->izquierdo.seguir buscandolo padre=actual.nodo->izquierdo. elseif (dat<actual->dato)actual=actual->izquierdo.bool r) { if(r)nodo=raiz.

//No esta en arbol } //Calcular la altura del nodo que contiene el int dat int ArbolABB::Altura(constint dat) { int altura=0.//seguir elseif(dat<actual->dato)actual=actual->izquierdo.nodo->izquierdo. if(nodo->derecho)PreOrden(func.//int encontrado elseif(dat>actual->dato)actual=actual->derecho.//Funcion auxiliar return contador.que tiene //el prototipo //void func(int&) void ArbolABB::PostOrden(void(*func)(int&). } //recorrido de arbol en postorden. actual=raiz.bool r) { if(r)nodo = raiz. if(nodo->izquierdo)PostOrden(func. auxContador(raiz). ya que quedan nodos por mirar while(!Vacio(actual)){ if(dat==actual->dato)return altura. //todavia puede aparecer . el proceso es aumentar el contador void ArbolABB::auxContador(Nodo*nodo) { . ya que quedan nodos por mirar while(!Vacio(actual)){ if(dat==actual->dato)returntrue.Nodo*nodo. //Todavia puede aparecer.false). } //funcion auxiliar para contar nodos.//No esta en arbol } //contar el numeor de nodos constint ArbolABB::NumeroNodos() { contador=0. } //Buscar un valor en el arbol bool ArbolABB::Buscar(constint dat) { actual = raiz.nodo->derecho. elseif(dat<actual->dato)actual=actual->izquierdo. func(nodo->dato).nodo->derecho. seguimos buscando if(dat>actual->dato)actual=actual->derecho.bool r) { if(r)nodo=raiz.false). if(nodo->izquierdo)PreOrden(func. } returnfalse.false).//void func(int&) void ArbolABB::PreOrden(void(*func)(int&).//incrementamos la altura. func(nodo->dato).Funcion recursiva de recorrido en //preorden.nodo->izquierdo.false). aplicamos la funcion fun.Nodo*nodo. } } return -1. if(nodo->derecho)PostOrden(func. //int encontrado else{ altura++.

Insertar(6). Arbollnt.Insertar(10).Funcion recursiva de recorrido en //postorden.Insertar(11). } int main() { //Un arbol de enteros ArbolABB Arbollnt. Arbollnt.//otro nodo //continuar recorrido if(nodo->izquierdo)auxContador(nodo->izquierdo). constint ArbolABB::AlturaArbol() { altura=0. Arbollnt. Arbollnt.si es un nodo hoja y su altura es mayor que la actual del //arbol.Insertar(5).Insertar(9). } //funcion de prueba para recorridos del arbol void Mostrar(int&d) { cout<<d<<". . if(nodo->derecho)auxAltura(nodo->derecho.Insertar(10). } //calcular la altura del alrbol.Insertar(15). Arbollnt. Arbollnt.Insertar(17). Arbollnt. //insercion de nodos en arbol: Arbollnt. el procesoes actualizar la altura solo en nodos hojas de mayor //altura de la maxima actual void ArbolABB::auxAltura(Nodo*nodo. Arbollnt.Insertar(14). Arbollnt.Insertar(12).a+1). actualizamos la altura actual del arbol if(EsHoja(nodo)&& a > altura)altura=a. Arbollnt.contador ++. cout<<"ALTURA DE ARBOL "<<Arbollnt.int a) { //recorrido postorden if(nodo->izquierdo)auxAltura(nodo->izquierdo.//Funcion Auxiliar return altura.0). //proceso.Insertar(13). Arbollnt.Insertar(4). Arbollnt.Insertar(7). Arbollnt. Arbollnt.AlturaArbol()<<endl. } //funcion auxiliar para calculara la altura. que es la alatura del nodo de mayor altura. Arbollnt.Insertar(18).Insertar(1). Arbollnt. auxAltura(raiz.a+1). Arbollnt.".Insertar(2).Insertar(3).Insertar(8). if(nodo->derecho)auxContador(nodo->derecho).Insertar(16). Arbollnt.

} .Altura(1)<<endl. cout<<"Borrar 245 : ".InOrden(Mostrar). Arbollnt. Arbollnt. Arbollnt. cout<<endl.Borrar(245). cout<<"Borrar 17 : ". Arbollnt. cout<<endl. Arbollnt.PreOrden(Mostrar). Arbollnt. cout<<endl. cout<<"Borrar 5 : ". cout<<"Altura de 10"<<Arbollnt.PostOrden(Mostrar). cin.Borrar(4). cout<<"Borrar 8 : ". cout<<"Borrar 4 : ". cout<<"Altura de arbol "<<Arbollnt. Arbollnt. Arbollnt.InOrden(Mostrar). cout<<"Altura de 1"<<Arbollnt. Arbollnt.Borrar(15). cout<<endl. cout<<endl. Arbollnt. cout<<endl.Borrar(5).//mostrar el arbol en tres ordenes distintos: cout<<"Inorden:". cout<<"Borrar 15 : ". //Borraremos algunos elementos: cout<<"N nodos : "<<Arbollnt. cout<<"PreOrden: ". Arbollnt.InOrden(Mostrar). cout<<endl.AlturaArbol()<<endl.InOrden(Mostrar).InOrden(Mostrar).Borrar(8).InOrden(Mostrar). cout<<endl. cout<<endl. return 0.get().Altura(10)<<endl.Borrar(17). Arbollnt. Arbollnt.NumeroNodos()<<endl. Arbollnt. cout<<"PostOrden: ".InOrden(Mostrar).NumeroNodos()<<endl. Arbollnt. //Veamos algun parametro cout<<"N nodos :"<<Arbollnt.

Sign up to vote on this title
UsefulNot useful