Bases de datos y estructuras de datos y algoritmos
Resolución de problemas o aplicaciones con programas de software
Modelo Vista Controlador
Conectar a una Base de Datos SQL Server sin plantillas
Estructuras de datos como
Binary Search Tree (BST) y High Binary Left Tree (HBLT)
import java.util.Queue;
import java.util.LinkedList;
public class BST
{
private NodoBST raiz;
private NodoBST tmp;
private NodoBST ant;
public BST(NodoBST nuevo){
if(raiz==null){
raiz = nuevo;
}
}
public BST(int arr[]){
for(int i=0; i<arr.length; i++){
insertar(new NodoBST(arr[i]));
}
}
public NodoBST getRaiz(){
return raiz;
}
public void setRaiz(NodoBST raiz){
this.raiz = raiz;
}
public void insertar(NodoBST nuevo){
if(raiz==null){
raiz=nuevo;
} else{
NodoBST temporal = raiz;
while(true){
if(nuevo.getInfo()<temporal.getInfo()){
if(temporal.getPunteroI()!=null){
temporal=temporal.getPunteroI();
} else{
temporal.setPunteroI(nuevo);
break;
}
}else{
if(temporal.getPunteroD()!=null){
temporal=temporal.getPunteroD();
} else{
temporal.setPunteroD(nuevo);
break;
}
}
}
}
}
public void recPreOrden(NodoBST raiz){
if(raiz!=null){
System.out.println(raiz.getInfo());
recPreOrden(raiz.getPunteroI());
recPreOrden(raiz.getPunteroD());
}
}
public void recOrden(NodoBST raiz){
if(raiz!=null){
recOrden(raiz.getPunteroI());
System.out.println(raiz.getInfo());
recOrden(raiz.getPunteroD());
}
}
public void recPosOrden(NodoBST raiz){
if(raiz!=null){
recPosOrden(raiz.getPunteroI());
recPosOrden(raiz.getPunteroD());
System.out.println(raiz.getInfo());
}
}
public void recNivel(){
Queue<NodoBST> cola = new LinkedList<NodoBST>();
NodoBST tmp = raiz;
cola.offer(tmp);
while(!cola.isEmpty()){
tmp = cola.poll();
System.out.println(tmp.getInfo());
if(tmp.getPunteroI()!=null){
cola.offer(tmp.getPunteroI());
}
if(tmp.getPunteroD()!=null){
cola.offer(tmp.getPunteroD());
}
}
}
private int grado(NodoBST nodo){
int cont = 0;
if(nodo.getPunteroI()!=null){
cont++;
}
if(nodo.getPunteroD()!=null){
cont++;
}
return cont;
}
public NodoBST buscar(int num){
NodoBST tmp = raiz;
while(tmp!=null){
if(tmp.getInfo()==num){
return tmp;
}else if(num<tmp.getInfo()){
ant = tmp;
tmp = tmp.getPunteroI();//busca a la izq
} else{
ant = tmp;
tmp = tmp.getPunteroD();//busca a la der
}
}
return tmp;
}
public NodoBST eliminaGrado0(int num){
NodoBST eliminado = buscar(num);
if(eliminado==raiz){
raiz = null;
}else if(ant.getPunteroI().getInfo()==num){
ant.setPunteroI(null);
}else if(ant.getPunteroD().getInfo()==num){
ant.setPunteroD(null);
}
return eliminado;
}
public NodoBST eliminaGrado1(int num){
NodoBST eliminado = buscar(num);
if(eliminado.getPunteroI()!=null){
tmp = eliminado.getPunteroI();
}else if(eliminado.getPunteroD()!=null){
tmp = eliminado.getPunteroD();
}
//tmp = hijo del eliminado
if(eliminado==raiz){
raiz = tmp;
}else if(ant.getPunteroI().getInfo()==num){
ant.setPunteroI(tmp);
}else if(ant.getPunteroD().getInfo()==num){
ant.setPunteroD(tmp);
}
eliminado.setPunteroI(null);
eliminado.setPunteroD(null);
return eliminado;
}
public NodoBST eliminaGrado2(int num){
NodoBST eliminado = buscar(num);
tmp = eliminado.getPunteroI();
while(tmp.getPunteroD()!=null){
tmp = tmp.getPunteroD();
}
if(eliminado==raiz){
raiz = tmp;
}else if(ant.getPunteroI().getInfo()==num){
ant.setPunteroI(tmp);
}else if(ant.getPunteroD().getInfo()==num){
ant.setPunteroD(tmp);
}
if(eliminado.getPunteroI()!=tmp){
tmp.setPunteroI(eliminado.getPunteroI());
}
if(eliminado.getPunteroD()!=tmp){
tmp.setPunteroD(eliminado.getPunteroD());
}
eliminado.setPunteroI(null);
eliminado.setPunteroD(null);
return eliminado;
}
}
import java.util.Queue;
import java.util.LinkedList;
/**
* High Binary Left Tree
*/
public class HBLT
{
private Queue<NodoL> cola = new LinkedList<NodoL>();
public HBLT(int [] arr){
for(int num : arr){
NodoL nodo = new NodoL(num);
nodo.setS(1);
nodo.setPtrI(new NodoL());
nodo.setPtrD(new NodoL());
cola.offer(nodo);
}
}
public NodoL acomodarMayorPrecedencia(){
while(cola.size()>1){
NodoL nodo1 = cola.poll();
NodoL nodo2 = cola.poll();
NodoL nodoAux;
if(nodo1.getInfo()<nodo2.getInfo()){
nodoAux = nodo1;
nodo1 = nodo2;
nodo2 = nodoAux;
}
if(nodo1.getPtrD().getInfo()==0){
nodo1.setPtrD(nodo2);
}else if(nodo1.getPtrD().getInfo()>nodo2.getInfo()){
nodo1.getPtrD().setPtrD(nodo2);
}else{
nodoAux = nodo1.getPtrD();
NodoL raiz = nodo1;
while(nodo2.getInfo()>nodoAux.getInfo()){
nodo1.setPtrD(nodo2);
nodo1 = nodo2;
nodo2 = nodo1.getPtrD();
nodo2.setS();
nodo1.setS();
}
nodo1.setPtrD(nodoAux);
nodoAux.setPtrD(nodo2);
nodo2.setS();
nodoAux.setS();
nodo1.setS();
if(nodo1.getPtrI().getS()<nodo1.getPtrD().getS()){
nodoAux = nodo1.getPtrI();
nodo1.setPtrI(nodo1.getPtrD());
nodo1.setPtrD(nodoAux);
nodoAux.setS();
}
nodo1 = raiz;
}
if(nodo1.getPtrI().getS()<nodo1.getPtrD().getS()){
nodoAux = nodo1.getPtrI();
nodo1.setPtrI(nodo1.getPtrD());
nodo1.setPtrD(nodoAux);
nodoAux.setS();
}
nodo2.setS();
nodo1.setS();
cola.offer(nodo1);
}
return cola.poll();
}
public NodoL acomodarMenorPrecedencia(){
while(cola.size()>1){
NodoL nodo1 = cola.poll();
NodoL nodo2 = cola.poll();
NodoL nodoAux;
if(nodo1.getInfo()>nodo2.getInfo()){
nodoAux = nodo1;
nodo1 = nodo2;
nodo2 = nodoAux;
}
if(nodo1.getPtrD().getInfo()==0){
nodo1.setPtrD(nodo2);
}else if(nodo1.getPtrD().getInfo()<nodo2.getInfo()){
nodo1.getPtrD().setPtrD(nodo2);
}else{
nodoAux = nodo1.getPtrD();
NodoL raiz = nodo1;
while(nodo2.getInfo() != 0 && nodo2.getInfo()<nodoAux.getInfo()){
nodo1.setPtrD(nodo2);
nodo1 = nodo2;
nodo2 = nodo1.getPtrD();
nodo2.setS();
nodo1.setS();
}
nodo1.setPtrD(nodoAux);
nodoAux.setPtrD(nodo2);
nodo2.setS();
nodoAux.setS();
nodo1.setS();
if(nodo1.getPtrI().getS()<nodo1.getPtrD().getS()){
nodoAux = nodo1.getPtrI();
nodo1.setPtrI(nodo1.getPtrD());
nodo1.setPtrD(nodoAux);
nodoAux.setS();
}
nodo1 = raiz;
}
if(nodo1.getPtrI().getS()<nodo1.getPtrD().getS()){
nodoAux = nodo1.getPtrI();
nodo1.setPtrI(nodo1.getPtrD());
nodo1.setPtrD(nodoAux);
nodoAux.setS();
}
nodo2.setS();
nodo1.setS();
cola.offer(nodo1);
}
return cola.poll();
}
}
Reflexión
Las diferentes estructuras de datos nos proporcionan un orden y un enlace entre todos los datos. Ejemplo más sencillos de estas estructiras son arrays, vectores, matrices; más complejos: Listas enlazadas(simples, dobles, circulares), pilas , colas , árboles binarios, entre otros.
De igual manera una base de datos trabaja con datos relacionados. Através de plantillas utilizamos el MVC en Visual Studio para generar consultas a la base de datos en una vista con texto, botones y etiquetas.
En resumen el MVC se estructura de la siguiente manera:
- El Modelo que contiene una representación de los datos que maneja el sistema, su lógica de negocio, y sus mecanismos de persistencia.
- La Vista, o interfaz de usuario, que compone la información que se envía al cliente y los mecanismos interacción con éste.
- El Controlador, que actúa como intermediario entre el Modelo y la Vista, gestionando el flujo de información entre ellos y las transformaciones para adaptar los datos a las necesidades de cada uno.