
Programas Estructura de Base de Datos.
-> Pila
-> Lista
->Cola
->Arbol
     ->NodoB (complemento Arbol Binario)
     -> ArbolBinaro(Complemento Arbol Binario)
->Clase LEER
----------------- Inicio de Pila-------------------------
//Agrega datos, busca, elimina, actualiza, utiliza BufferReader,  no es necesario clase leer
import java.io.*;
public class prueva{
 public static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
 public static final int MAX_LENGTH = 5;
 public static String Pila[] = new String[MAX_LENGTH];
 public static int cima = -1;
  public static void main(String args[])throws IOException{
    Menu();
  }
  public static void Menu()throws IOException{
   System.out.println("\n\n\t\t\t°°°°°°°°°°Menu°°°°°°°°°°");
   System.out.println("\t\t\t=                   =");
   System.out.println("\t\t\t= 1- Insertar       =");
   System.out.println("\t\t\t= 2- Eliminar       =");
   System.out.println("\t\t\t= 3- Buscar         =");
   System.out.println("\t\t\t= 4- Imprimir       =");
   System.out.println("\t\t\t= 5- Actualizar     =");
   System.out.println("\t\t\t= 6- Salir          =");
   System.out.println("\t\t\t°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°");
   System.out.print("\t\t\tOpcion: ");
   int op = Integer.parseInt(entrada.readLine());
   Opciones(op);
  }
  public static void Opciones(int op)throws IOException
  {
    switch(op){
			case 1: Insertar();
			    break;
			case 2: Eliminar();
			    break;
			case 3: Buscar();
			    break;
			case 4: Imprimir();
			    break;
			case 5: Actualizar();
			    break;
			case 6: System.exit(1);
			    break;
			default:Menu();
			    break;
	  }
  }
  public static void Insertar()throws IOException{
    System.out.print("\nIntrodusca un Numero para la pila: ");
    String dato = entrada.readLine();
    Crear(dato);
  }
  public static void Crear(String dato)throws IOException{
   if ((Pila.length-1)==cima){
    System.out.println("Capacidad de la pila al limite\n\n\n");
    Imprimir();
   }else
   	{
    ++cima;
    }
   Agregar(dato);
  }
  public static void Agregar(String dato)throws IOException{
   Pila[cima]=dato;
   Menu();
  }
  public static void Imprimir()throws IOException{
   for(int i=Pila.length-1;i>=0;i--)
   	{
	    System.out.println(Pila[i]);
   }
   Menu();
  }
  public static void Eliminar()throws IOException{
   if(cima== -1){
		 System.out.println("\n\n\nNo se puede eliminar, pila vacia !!!" );
   }else{
	   Pila[cima] = null;
	   --cima;
    }
   Menu();
  }
  public static void Buscar()throws IOException{
   System.out.println("\n\n\nIngrese la cadena a buscar: ");
   String cad = entrada.readLine();
    for(int i=0;i
			if(cad.equals(Pila[i])){
				System.out.println("Elemento encontrado,posicion "+i);
				break;
		  }else{
		   	System.out.println("Elemento no encontrado :(");
	     }
	  }
	  Menu();
  }
  public static void Actualizar()throws IOException{
   System.out.print("Digite el nombre del valor que desea actualizar: ");
   String actual = entrada.readLine();
   System.out.print("Digite el nombre del nuevo valor: ");
   String nuevo = entrada.readLine();
       for(int i=0;i
	 			if(actual.equals(Pila[i])){
	        Pila[i]=nuevo;
	        break;
	 		  }else{
	 		   	System.out.println("Elemento no encontrado :(");
	 	     }
	  }
   Menu();
  }
}
//Fin del programa Pila
-----------------Fin de Pila-----------------------------
-----------------Inicio de Listas-----------------------
//Inicio del programa Lista *NECESITA LA CLASE LEER* (se adjunta al final de documento)
public class Lista
{
    public static void main (String[] args)
    {
	double[] vectoraux = new double [100];
	double[] vectoraux2;
	double[] vector;
	int conttemp = 0;
	double[] vector2 = new double [100];
	int resp = 0;
	double nb = 0;
	do
	{
	    System.out.println (">>>Menu<<<\n");
	    System.out.println ("1->Insertar");
	    System.out.println ("2->Remover");
	    System.out.println ("3->Buscar");
	    //System.out.println ("4->Ordenar Lista  Descendentemente");
	    System.out.println ("5->Mostrar");
	    System.out.println ("6->Salir");
	    resp = Leer.datoInt ();
	    if (resp == 1)
	    {
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    if (vectoraux [i] == 0)
		    {
			System.out.println ("Ingresa numero : ");
			vectoraux [i] = Leer.datoFloat ();
			break;
		    }
		}
		conttemp = 0;
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    if (vectoraux [i] != 0)
			conttemp++;
		}
		vector = new double [conttemp];
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vectoraux [i] != 0)
			vector [i] = vectoraux [i];
		}
	    }
	    if (resp == 2)
	    {
		System.out.println ("Ingresa numero a borrar: ");
		nb = Leer.datoFloat ();
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    vectoraux [i] = (int) vectoraux [i];
		}
		int w = 0;
		for (int i = 0 ; i < vectoraux.length - 1 ; i++)
		{
		    if (vectoraux [i] == nb)
		    {
			vectoraux [i] = vectoraux [i + 1];
			nb = vectoraux [i + 1];
			if (w == 0)
			    System.out.println ("Elemento eliminado correctamente");
			w = 1;
		    }
		}
		if (w == 0)
		    System.out.println ("No se encontro numero");
		conttemp = 0;
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    if (vectoraux [i] != 0)
			conttemp++;
		}
		vector = new double [conttemp];
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vectoraux [i] != 0)
			vector [i] = vectoraux [i];
		}
	    }
	    if (resp == 3)
	    {
		vector = new double [conttemp];
		for (int i = 0 ; i < vector.length ; i++)
		{
		    vector [i] = (int) vectoraux [i];
		}
		System.out.println ("Numero a buscar: ");
		nb = Leer.datoDouble ();
		int x = 0;
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vector [i] == nb)
		    {
			if (x == 0)
			    System.out.println ("Numero encontrado en la posicion " + i);
			if (x > 0)
			    System.out.println ("Tambien se encontro el mismo numero en la posicion: " + i);
			x = 1;
		    }
		}
		if (x == 0)
		{
		    System.out.println ("Numero no encontrado");
		}
	    }
	    /*if (resp == 4)
	    {
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    vectoraux [i] = (int) vectoraux [i];
	       }
	       for (int i = 0 ; i < 100 ; i++)
		{
		    for (int j = 0 ; j < vectoraux.length - 1 ; j++)
		   {
			if (vectoraux [j] < vectoraux [j + 1])
		{
	       double temp = vectoraux [j];
		    vectoraux [j] = vectoraux [j + 1];
	     vectoraux [j + 1] = temp;
	    }
		    }
		}
		conttemp = 0;
		for (int i = 0 ; i < vectoraux.length ; i++)
		{
		    if (vectoraux [i] != 0)
			conttemp++;
		}
		vector = new double [conttemp];
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vectoraux [i] != 0)
			vector [i] = vectoraux [i];
		}
	    }*/
	    if (resp == 5)
	    {
		if (conttemp == 0)
		    System.out.print ("Lista Vacia");
		vector = new double [conttemp];
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vectoraux [i] != 0)
			vector [i] = vectoraux [i];
		}
		int[] apa = new int [100];
		for (int i = 0 ; i < 100 ; i++)
		    apa [i] = 9999;
		double tempj = .000000000001;
		for (int i = 0 ; i < conttemp ; i++)
		{
		    for (int j = 0 ; j < conttemp ; j++)
		    {
			if (j > i)
			{
			    if (vector [i] == vector [j])
			    {
				vector [j] = vector [j] + (tempj * (i + 1));
			    }
			}
		    }
		    tempj = tempj * 10;
		}
		double ap[] = new double [vector.length];
		for (int i = 0 ; i < vector.length ; i++)
		    ap [i] = vector [i];
		for (int j = 0 ; j < vector.length ; j++)
		{
		    vector2 [j] = vector [j];
		}
		for (int i = 0 ; i < 1000 ; i++)
		{
		    for (int j = 0 ; j < vector.length ; j++)
		    {
			if (vector2 [j] > vector2 [j + 1])
			{
			    double temp = vector2 [j + 1];
			    vector2 [j + 1] = vector2 [j];
			    vector2 [j] = temp;
			}
		    }
		}
		for (int i = 0 ; i < vector.length ; i++)
		{
		    if (vector [i] != 0)
		    {
			for (int j = 0 ; j < vector.length ; j++)
			{
			    if (i == j)
			    {
				//System.out.print("  [1]");
				if (vector [i] == vector2 [vector.length])
				{
				    if (vector [i] != 0)
				    {
					System.out.print ("\nVector[" + i + "]=" + (int) vector [i]);
					System.out.print ("-->[/]");
				    }
				}
				else
				{
				    for (int a = 0 ; a < vector.length ; a++)
				    {
					if (vector [a] > ap [i])
					{
					    if (apa [i] == 9999) //0
					    {
						apa [i] = a;
					    }
					    else
					    {
						if (vector [a] < vector [apa [i]])
						{
						    apa [i] = a;
						}
					    }
					}
				    }
				    if (vector [apa [i]] != 0)
				    {
					System.out.print ("\nVector[" + i + "]=" + (int) vector [i]);
					System.out.print ("-->[" + apa [i] + "]");
					double menor = 10000;
					for (int x = 0 ; x < vector.length ; x++)
					{
					    if (menor > vector [x])
						menor = vector [x];
					}
					if (menor == vector [i])
					    System.out.print ("<-----Menor");
				    }
				}
			    }
			}
		    }
		}
	    }
	    if (resp == 6)
	    {
		System.exit (69);
	    }
	    if (resp != 1 && resp != 2 && resp != 3 && resp != 4 && resp != 5 && resp != 6)
	    {
		System.out.println (">>OPCION INVALIDA<<");
	    }
	    System.out.println ("\n");
	}
	while (resp != 7);
    }
}
//Fin del programa Listas *SE NECESITA LA CLASE LEER* (se adjunta al final de documento)
-----------------Fin de Listas---------------------------
-----------------Inicio de Cola--------------------------
//Inicio del programa Cola *NECESITA LA CLASE LEER* (se adjunta al final de documento)
import java.io.*;
public class Cola
{
    public static class ClaseCola
    {
    int max= 5;
	int cola[] = new int [max];
	int top, acum = 0, acum2 = 1, var = 0;
	public ClaseCola ()//constructor de la clase
	{
	    top = 0;
	}
	public void EliminarDato ()
	{
	    if (top == 0)//Si top vale 0 la cola esta vacia y por lo tanto se sale con break y no hace nada
	    {
		System.out.println ("Cola vacia");
		return;
	    }
	    for(int i=0;i<4;i++)//Elimina el primer elemento de la cola y pone u cero al final de la cola
	    {
	    	cola[i]=cola[i+1];
	    }
	    cola[4]=0;
	    top--;
	}
	public void InsertarDato () throws Exception
	{
		int dato;
	    if (top == max)//Si la pila esta llena no inserta el dato
	    {
		System.out.println ("Cola llena");
		return;
	    }
	    else if (acum2 <= 0)//Si es el primer dato que se va a insertar
	    {
	    	System.out.print ("Dato a insertar: ");
		    dato = getInt ();
		cola [var] = dato;
		var++;
		acum2++;
	    }
	    else//Si no es el primer dato pero todavia hay espacio libre en la cola
	    {
	    	System.out.print ("Dato a insertar: ");
		    dato = getInt ();
		cola [top] = dato;//inserta el dato
		top++;
	    }
	    System.out.println ("Dato insertado");//Mensaje de confirmacion
	    return;
	}
	public void MostrarCola ()
	{
	    if (top == 0)//Si top vale 0 no hay datos en la cola pero de todos modods muestra la cola
		System.out.println ("Cola Vacia");
	    for (int i = 0 ; i < max ; i++)//for que muestra la cola
		System.out.println ("Cola[" + i + "]=" + cola [i]);
	}
    }
    static ClaseCola Cola = new ClaseCola ();
    public static void main (String args[]) throws Exception
    {
	int op = 0;
	do
	{
	    op = 0;
	       System.out.println( "1.- Mostrar Cola" );
	       System.out.println( "2.- Insertar" );
	       System.out.println( "3.- Remover" );
	       System.out.println( "4.- Fin" );
	    op = getInt ();   
		if(op==1)   
			 Cola.MostrarCola ();	  
		if(op==2)   
			  Cola.InsertarDato();  
		if(op==3)   
			 Cola.EliminarDato ();  
		if(op==4)   
			 System.exit(0);  	 	  
	}
	while (op != 0);
    }
    public static int getInt () throws IOException
    {
	InputStreamReader isr = new InputStreamReader (System.in);
	BufferedReader br = new BufferedReader (isr);
	String s = br.readLine ();
	return Integer.parseInt (s);
    }
}
//Fin del programa Cola *SE NECESITA LA CLASE LEER* (se adjunta al final de documento)
-----------------Fin de Cola-----------------------------
-----------------Inicio de Árbol------------------------
//Inicio del programa Arbol *SE NECESITA LA CLASES NODO B y ARBOLBINARIO * (se adjunta al terminar esta clase)
import java.io.*;
public class ArbolBin
{
	NodoB Padre;
	NodoB Raiz;
	public ArbolBin(){
		Raiz = null;
	}
	public void insertaNodo(int Elem){
		if(Raiz == null)
			Raiz = new NodoB(Elem);
		else
			Raiz.insertar(Elem);
	}
	public void preorden (NodoB Nodo){
		if(Nodo == null)
			return;
		else{
			System.out.print (Nodo.dato + " ");
			preorden (Nodo.Hizq);
			preorden (Nodo.Hder);
		}
	}
	public void postOrden (NodoB Nodo){
		if(Nodo == null)
			return;
		else{
			postOrden (Nodo.Hizq);
			postOrden (Nodo.Hder);
			System.out.print (Nodo.dato + " ");
		}
	}
	public void inorden (NodoB Nodo){	
		if(Nodo == null)
			return;
		else{
			inorden (Nodo.Hizq);
			System.out.print(Nodo.dato + " ");
			inorden (Nodo.Hder);
		}
	}
   public int altura (NodoB Nodo){ 
	if (Nodo==null)
         return -1;
    else
         return 1+Math.max(altura(Nodo.Hizq),altura(Nodo.Hder));
	}
public int tamaño (NodoB Nodo){
    if (Nodo==null)
       return 0;
    else
      return 1+tamaño(Nodo.Hizq)+tamaño(Nodo.Hder);
}
public void buscar (int Elem, NodoB A){
		if(A == null | A.dato == Elem){
			System.out.print(A.dato + " ");
			return;
		}
		else{
			if(Elem>A.dato)
				buscar(Elem, A.Hder);
			else
				buscar( Elem, A.Hizq);
		}
	}
public static void main (String[]args)throws IOException
{
		ArbolBin A = new ArbolBin();//Aki se introcucen los datos, puede agregar mas nodos por si kiere xD
		BufferedReader entrada=new BufferedReader(new InputStreamReader(System.in));
		int nodo=0,dim=0,cont=0;
		System.out.print("Dimencion del arbol : ");
		dim=Integer.parseInt(entrada.readLine());
		do
		{
		System.out.print("Ingrese un dato : ");
		nodo=Integer.parseInt(entrada.readLine());
		A.insertaNodo(nodo);
		cont++;
		}while(dim>cont);
		System.out.print("El recorrido en Preorden es: ");
		A.preorden (A.Raiz);
		System.out.println();
		System.out.print("El recorrido en Inorden es: ");
		A.inorden (A.Raiz);
		System.out.println();
		System.out.print("El recorrido en Postorden es: ");
		A.postOrden (A.Raiz);
		System.out.println();
		System.out.println("La altura del arbol es: " + A.altura (A.Raiz));	
		System.out.println("La cantidad de \"nodos\" que posee el arbol es: " + A.tamaño(A.Raiz));
  }
}
//Fin del Arbol *SE NECESITA LA CLASES NODO B y ARBOLBINARIO * (se adjunta al terminar esta clase)
-----------------Fin de Árbol----------------------------
-----------------Inicio de NODO B---------------------
//Inicio de NODO B *COMPLEMENTO DE LA CLASE ÁRBOL * (se adjunta al terminar esta clase)
public class NodoB
{
	int dato;
	NodoB Hizq, Hder;
	//Constructores
	NodoB (int Elem)
		{
		dato = Elem;
		NodoB Hizq, Hder = null;
	}
	NodoB (){
		NodoB Hizq, Hder = null;
	}
public void insertar(int Elem){
		if(Elem < dato){
			if (Hizq == null)
				Hizq = new NodoB(Elem);
			else
				Hizq.insertar(Elem);
		}
		else{
			if (Elem > dato){
				if (Hder == null)
					Hder = new NodoB(Elem);
				else
					Hder.insertar(Elem);
			}
		}
	}
}
-----------------Fin de NODO B------------------------
-----------------Inicio de ARBOLBINARIO---------
//Inicio de NODO B *COMPLEMENTO DE LA CLASE ÁRBOL * 
import java.io.*;
public class ArbolBinario
{
	NodoB Padre;
	NodoB Raiz;
	public ArbolBinario()
	{
		Raiz = null;
	}
	public void insertaNodo(int Elem)
		{
		if(Raiz == null)
			Raiz = new NodoB(Elem);
		else
			Raiz.insertar(Elem);
	}
	public int altura (NodoB Nodo)
   	{ 
	if (Nodo==null)
         return -1;
    else
         return 1+Math.max(altura(Nodo.Hizq),altura(Nodo.Hder));
	}
	public int tamaño (NodoB Nodo)
	{
    	if (Nodo==null)
       	return 0;
    	else
      	return 1+tamaño(Nodo.Hizq)+tamaño(Nodo.Hder);
	}
	public static void main (String[]args)throws IOException
	{
		ArbolBin A = new ArbolBin();//Aki se introcucen los datos, puede agregar mas nodos por si kiere xD
		BufferedReader entrada=new BufferedReader(new InputStreamReader(System.in));
		int nodo=0,dim=0,cont=0;
		System.out.print("Dimencion del arbol : ");
		dim=Integer.parseInt(entrada.readLine());
		do
		{
		System.out.print("Ingrese un dato : ");
		nodo=Integer.parseInt(entrada.readLine());
		A.insertaNodo(nodo);
		cont++;
		}while(dim>cont);
		System.out.println("La altura del arbol es: " + A.altura (A.Raiz));	
		System.out.println("La cantidad de \"nodos\" que posee el arbol es: " + A.tamaño(A.Raiz));
  		}
	}
//NODO B *SE NECESITAN LAS CLASES ARBOLBIN, NODO B y ARBOLBINARIO * para su funcionamiento( en la misma carpeta) 
-----------------Fin de ARBOLBINARIO-------------
-----------------Inicio de LEER-------------------------
//Inicio de NODO B *COMPLEMENTO DE LA CLASE ÁRBOL * 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Leer{
 public static String dato()
  {
  String sdato=" ";
  try{
	 InputStreamReader isr=new InputStreamReader(System.in);
	 BufferedReader flujoE = new BufferedReader(isr);
	 sdato=flujoE.readLine();
	 //caracterSolo = entrada.readLine().charAt(0);
	 }
  catch (IOException e)
	{
	System.out.println("Error "+e.getMessage());
	}
  return sdato;
  }
   public static char datoChar()
  {
       char dato=' ';
  try{
	 InputStreamReader isr=new InputStreamReader(System.in);
	 BufferedReader flujoE = new BufferedReader(isr);
	 dato =flujoE.readLine().charAt(0);
	 }
  catch (IOException e)
	{
	System.out.println("Error "+e.getMessage());
	}
  return dato;
  }
 public static int datoInt()
  {
  return Integer.parseInt(dato());
  }
  //De aqui para abajo es la tarea....  Si existe un metodo "parse"
  //Para las clases Float,Double, Short y Long.
 public static float datoFloat()
  {
  return Float.parseFloat(dato());      
  }
 public static long datoLong()
  {
  return Long.parseLong(dato());
  }
 public static short datoShort()
  {
  return Short.parseShort(dato());      
  }
 public static double datoDouble()
  {
  return Double.parseDouble(dato());    
  }
}
//Fin de  clase leer( en la misma carpeta)  donde se utilize
-----------------Fin de LEER----------------------------
=Estructura de Base de Datos LINKS de descarga =
-> Download
=ProgSistem=
