public NodoCaracter(string dato) { _dato = dato; hIzq = null; hDer = null; }
//Eliminar (POP-PILA). eliminar el último en entrar. public NodoCaracter eliminarPopPila() { NodoCaracter temp = ultimo; if (ultimo == null) { return(null); } else { ultimo = ultimo.anterior; return(temp); //while (temp.siguiente != null) //{ // temp = temp.siguiente; //} //temp = temp.anterior; //ultimo = temp.siguiente; //temp = ultimo; //temp.siguiente = null; //ultimo = temp; //return temp; } }
//Resolver ecuación por método Pre Orden. public int resolverEcuacionPreOrden() { Lista pila = new Lista(); string cadena = preOrden(); pila.crearListaEcuacion(cadena); Lista pilaDeNumeros = new Lista(); NodoCaracter temp = pila.regresarUltimo(); while (temp != null) { int num1 = 0, num2 = 0, resultado = 0; if (temp.dato == "*") { num1 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); num2 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); resultado = num1 * num2; NodoCaracter resu = new NodoCaracter(resultado.ToString()); pilaDeNumeros.agregarPush(resu); } else if (temp.dato == "/") { num1 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); num2 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); resultado = num1 / num2; NodoCaracter resu = new NodoCaracter(resultado.ToString()); pilaDeNumeros.agregarPush(resu); } else if (temp.dato == "+") { num1 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); num2 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); resultado = num1 + num2; NodoCaracter resu = new NodoCaracter(resultado.ToString()); pilaDeNumeros.agregarPush(resu); } else if (temp.dato == "-") { num1 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); num2 = Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato); resultado = num1 - num2; NodoCaracter resu = new NodoCaracter(resultado.ToString()); pilaDeNumeros.agregarPush(resu); } else { pilaDeNumeros.agregarPush(temp); } temp = temp.anterior; } return(Convert.ToInt32(pilaDeNumeros.eliminarPopPila().dato)); }
//Resolver ecuación por método Post Orden. //Mostrar Arbol de forma fea. (PRIVADO)_____________________________________________________________________________________ private string mostrarArbolPrivate(NodoCaracter nRaiz) { string cadena = ""; if (nRaiz != null) { cadena += nRaiz.ver(); //Raiz cadena += mostrarArbolPrivate(nRaiz.hIzq); //Izquierda cadena += mostrarArbolPrivate(nRaiz.hDer); //Derecha } return(cadena); }
//Post Orden (PRIVADO).___________________________________________________________________________________________________ private string postOrdenPrivate(NodoCaracter nRaiz) { string cadena = ""; if (nRaiz != null) { cadena += postOrdenPrivate(nRaiz.hIzq); //Izquierda cadena += postOrdenPrivate(nRaiz.hDer); //Derecha cadena += nRaiz.ToString(); //Raiz } return(cadena); }
//Eliminar inicio._________________________________________________________________________________________________ public void eliminarInicio() { if (inicio == null || inicio.siguiente == null) { inicio = null; ultimo = null; } else { inicio = inicio.siguiente; inicio.anterior = null; } }
//__________________________________________________________________________________________________________________________ /// <summary> /// Muestra todos los productos en el vector. /// </summary> /// <returns></returns> public string mostrarLista() { string cadena = ""; NodoCaracter temp = inicio; while (temp != null) { cadena += temp.ToString(); temp = temp.siguiente; } return(cadena); }
//Eliminar (POP-COLA). eliminar el primero en entrar. public NodoCaracter eliminarPopCola() { NodoCaracter temp = inicio; if (inicio == null) { return(null); } else { inicio = inicio.siguiente; return(temp); } }
//Agregar (PUSH). public void agregarPush(NodoCaracter nuevoCar) { if (inicio == null) { inicio = nuevoCar; ultimo = nuevoCar; } else { NodoCaracter temp = inicio; while (temp.siguiente != null) { temp = temp.siguiente; } temp.siguiente = nuevoCar; //nuevoCar.anterior = temp; ultimo = nuevoCar; } }
//Crear Lista de la ecuación._______________________________________________________________________________________________ public void crearListaEcuacion(string ecuacion) { for (int i = 0; i < ecuacion.Length; i++) { NodoCaracter caracterNew = new NodoCaracter(ecuacion[i].ToString()); if (inicio == null)//En caso de no tener ningun Nodo, agrega al primer Nodo en inicio. { inicio = caracterNew; ultimo = caracterNew; } else//busca el último Nodo con un siguiente en null para poder agregar. { NodoCaracter temp = inicio; while (temp.siguiente != null) { temp = temp.siguiente; } temp.siguiente = caracterNew; caracterNew.anterior = temp; ultimo = caracterNew; } } }
public Lista() { inicio = null; ultimo = null; }
//Llenar Árbol._____________________________________________________________________________________________________________ public void llenarArbol(string ecuacion) { Lista listaEcuacion = new Lista(); listaEcuacion.crearListaEcuacion(ecuacion); raiz = listaEcuacion.regresarInicio(); NodoCaracter temp = raiz; //Multiplicación y División.-------------------------------------------------------------------------------------------- while (temp != null) { if (temp.dato == "*" || temp.dato == "/") { if (temp.hIzq == null && temp.hDer == null) { temp.hIzq = temp.anterior; temp.hDer = temp.siguiente; //Unión del siguiente. NodoCaracter temp2 = temp.siguiente.siguiente; if (temp2 != null) { temp2.anterior = temp; temp.siguiente = temp2; } else { temp.siguiente = null; } //Unión del anterior. temp2 = temp.anterior.anterior; if (temp2 != null) { temp.anterior = temp2; temp2.siguiente = temp; } else { listaEcuacion.eliminarInicio(); } } } temp = temp.siguiente; } //Suma y Resta.--------------------------------------------------------------------------------------------------------- temp = listaEcuacion.regresarInicio(); while (temp != null) { if (temp.dato == "+" || temp.dato == "-") { if (temp.hIzq == null && temp.hDer == null) { temp.hIzq = temp.anterior; temp.hDer = temp.siguiente; //Unión del siguiente. NodoCaracter temp2 = temp.siguiente.siguiente; if (temp2 != null) { temp2.anterior = temp; temp.siguiente = temp2; } else { temp.siguiente = null; } //Unión del anterior. temp2 = temp.anterior.anterior; if (temp2 != null) { temp.anterior = temp2; temp2.siguiente = temp; } else { listaEcuacion.eliminarInicio(); } } } temp = temp.siguiente; } raiz = listaEcuacion.regresarInicio(); }
public Arbol() { raiz = null; }