You are on page 1of 13

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"); }

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

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

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

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

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

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

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

void Podar(Nodo*&); void auxContador(Nodo*); void auxAltura(Nodo*,int); }; //Poda:borrar todos los nodods a partir de uno, incluido void ArbolABB::Podar(Nodo*&nodo) { //algoritmo recursivo,recorrido en postorden if(nodo){ Podar(nodo->izquierdo);//podar izquierdo Podar(nodo->derecho);//podar derecho delete nodo; //eliminar nodo nodo=NULL; } } //Insertar un int en el arbol ABB void ArbolABB::Insertar(constint dat) { Nodo*padre =NULL; actual=raiz; //Buscar el int en el arbol, manteniendo un puntero al nodo padre while(!Vacio(actual)&&dat!=actual->dato){ padre=actual; if(dat>actual->dato)actual=actual->derecho; elseif(dat<actual->dato)actual=actual->izquierdo; } //si se ha encontrado el elemento, regresar sin insertar if(!Vacio(actual))return; //si padre es null, entonces el arbol esta vacio, el nuevo nodo sera //el nodo raiz if(Vacio(padre))raiz= new Nodo(dat); //si el int es menor que el que contiene el nodo padre, lo insertamos //en la rama izquierda elseif(dat<padre->dato)padre->izquierdo=new Nodo(dat); //si el int es mayor que el que contiene el nodo padre, lo insertamos //en la rama derecha elseif(dat>padre->dato)padre->derecho=new Nodo(dat); } //eliminar un elemento de un arbol ABB void ArbolABB::Borrar(constint dat) { Nodo*padre=NULL; Nodo*nodo; int aux; actual=raiz; //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

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

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

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

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

You might also like

  • Login Con Base de Datos SQLite en Android Studio
    Login Con Base de Datos SQLite en Android Studio
    Document3 pages
    Login Con Base de Datos SQLite en Android Studio
    davidrey29
    75% (4)
  • Cuestionario 3
    Cuestionario 3
    Document1 page
    Cuestionario 3
    davidrey29
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Cuestionario 3
    Cuestionario 3
    Document1 page
    Cuestionario 3
    davidrey29
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Cuestionario 3
    Cuestionario 3
    Document1 page
    Cuestionario 3
    davidrey29
    No ratings yet
  • Cuestionario 3
    Cuestionario 3
    Document1 page
    Cuestionario 3
    davidrey29
    No ratings yet
  • Cuestionario 3
    Cuestionario 3
    Document1 page
    Cuestionario 3
    davidrey29
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Calculo Del Dia Juliano - Ods
    Calculo Del Dia Juliano - Ods
    Document8 pages
    Calculo Del Dia Juliano - Ods
    davidrey29
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet
  • Sub Redes
    Sub Redes
    Document2 pages
    Sub Redes
    Julio Ponce
    No ratings yet