예제 #1
0
        public bool existeHorizontal(string x, string y, Unidad unidad)
        {
            //Se crea la cabezera en y
            listaVertical.insertar(x);

            //Se crea el nuevo nodo
            NodoM nuevo = new NodoM();

            nuevo.x      = x;
            nuevo.y      = y;
            nuevo.unidad = unidad;

            NodoM aux = listaHorizontal.buscar(y);

            aux = aux.abajo;

            bool agregado = false;

            while (aux != null)
            {
                if (esMayor(aux.x, x) < 0)
                {
                    aux = aux.abajo;
                }
                else
                {
                    nuevo.abajo      = aux;
                    nuevo.arriba     = aux.arriba;
                    aux.arriba.abajo = nuevo;
                    aux.arriba       = nuevo;
                    agregado         = true;
                    tamaño++;
                    break;
                }
            }
            if (!agregado)
            {
                aux = listaHorizontal.buscar(y);
                aux = aux.abajo;
                while (aux.abajo != null)
                {
                    aux = aux.abajo;
                }
                nuevo.arriba = aux;
                aux.abajo    = nuevo;
                tamaño++;
            }

            NodoM auxV = listaVertical.buscar(x);

            auxV.derecha    = nuevo;
            nuevo.izquierda = auxV;
            tamaño++;

            return(true);
        }
예제 #2
0
        public bool existeVertical(string x, string y, Unidad unidad)
        {
            listaHorizontal.insertar(y);

            NodoM nuevo = new NodoM();

            nuevo.x      = x;
            nuevo.y      = y;
            nuevo.unidad = unidad;

            NodoM auxV = listaVertical.buscar(x);

            auxV = auxV.derecha;
            bool agregado = false;

            while (auxV != null)
            {
                if (esMayor2(auxV.y, y) < 0)
                {
                    auxV = auxV.derecha;
                }
                else
                {
                    nuevo.derecha          = auxV;
                    nuevo.izquierda        = auxV.izquierda;
                    auxV.izquierda.derecha = nuevo;
                    auxV.izquierda         = nuevo;
                    tamaño++;
                    agregado = true;
                    break;
                }
            }

            if (!agregado)
            {
                auxV = listaVertical.buscar(x);
                auxV = auxV.derecha;
                while (auxV.derecha != null)
                {
                    auxV = auxV.derecha;
                }
                nuevo.izquierda = auxV;
                auxV.derecha    = nuevo;
                tamaño++;
            }

            NodoM aux = listaHorizontal.buscar(y);

            aux.abajo    = nuevo;
            nuevo.arriba = aux;
            tamaño++;

            return(true);
        }
예제 #3
0
 public bool insertar(string x, string y, string subtipo, string usuario)
 {
     if (!x.Equals("") && !y.Equals("") && !subtipo.Equals(""))
     {
         y       = y.ToUpper();
         subtipo = subtipo.ToLower();
         Unidad unidad = new Unidad(subtipo, usuario);
         if (!unidad.subtipo.Equals(""))
         {
             return(insertar(x, y, unidad));
         }
     }
     return(false);
 }
예제 #4
0
        public bool insertar(string x, string y, Unidad unidad)
        {
            if (esVacia())
            {
                listaVertical   = new ListaDobleV();
                listaHorizontal = new ListaDobleH();

                NodoM nuevo = new NodoM();
                nuevo.unidad = unidad;
                nuevo.x      = x;
                nuevo.y      = y;

                listaVertical.insertar(x);
                listaHorizontal.insertar(y);

                NodoM encabezadoVertical   = listaVertical.buscar(x);
                NodoM encabezadoHorizontal = listaHorizontal.buscar(y);

                encabezadoVertical.derecha = nuevo;
                encabezadoHorizontal.abajo = nuevo;

                nuevo.arriba    = encabezadoHorizontal;
                nuevo.izquierda = encabezadoVertical;

                tamaño++;
                return(true);
            }
            else
            {
                if (listaVertical.buscar(x) != null && listaHorizontal.buscar(y) != null)
                {
                    return(existenAmbosEncabezados(x, y, unidad));
                }
                else if (listaVertical.buscar(x) == null && listaHorizontal.buscar(y) != null)
                {
                    return(existeHorizontal(x, y, unidad));
                }
                else if (listaVertical.buscar(x) != null && listaHorizontal.buscar(y) == null)
                {
                    return(existeVertical(x, y, unidad));
                }
                else if (listaVertical.buscar(x) == null && listaHorizontal.buscar(y) == null)
                {
                    return(noExisten(x, y, unidad));
                }
            }
            return(false);
        }
예제 #5
0
        public bool noExisten(string x, string y, Unidad unidad)
        {
            listaHorizontal.insertar(y);
            listaVertical.insertar(x);

            NodoM nuevo = new NodoM();

            nuevo.x      = x;
            nuevo.y      = y;
            nuevo.unidad = unidad;

            NodoM aux  = listaHorizontal.buscar(y);
            NodoM auxV = listaVertical.buscar(x);

            aux.abajo    = nuevo;
            auxV.derecha = nuevo;

            nuevo.arriba    = aux;
            nuevo.izquierda = auxV;
            tamaño++;
            tamaño++;

            return(true);
        }
예제 #6
0
        public bool existenAmbosEncabezados(string x, string y, Unidad unidad)
        {
            //Se busca el nodo en la posición x,y
            NodoM nodo = obtenerNodo(x, y);

            //Si el nodo existe, se agrega el nuevo nodo con relación a este.
            if (nodo != null)
            {
                NodoM nuevo = new NodoM();
                nuevo.x      = x;
                nuevo.y      = y;
                nuevo.unidad = unidad;

                return(agregarANodo(nodo, nuevo));
            }
            //Si no existe un nodo en las coordenadas x,y
            else
            {
                //-----------------------PARA INSERTAR EN Y----------------------//

                //Se crea el nuevo nodo
                NodoM nuevo = new NodoM();
                nuevo.x      = x;
                nuevo.y      = y;
                nuevo.unidad = unidad;

                //Se busca el encabezado en donde se va a insertar
                //y se recorre hacia abajo buscando la posicion en y a insertar
                NodoM aux = listaHorizontal.buscar(y);
                aux = aux.abajo;
                bool agregado = false;
                while (aux != null)
                {
                    if (esMayor(aux.x, x) < 0)
                    {
                        aux = aux.abajo;
                    }
                    else
                    {
                        //Se inserta si se encuentra la posición correcta en y
                        nuevo.abajo      = aux;
                        nuevo.arriba     = aux.arriba;
                        aux.arriba.abajo = nuevo;
                        aux.arriba       = nuevo;
                        tamaño++;
                        agregado = true;
                        break;
                    }
                }

                //Si no se agregó, se agrega hasta abajo del encabezado
                if (!agregado)
                {
                    aux = listaHorizontal.buscar(y);
                    aux = aux.abajo;

                    while (aux.abajo != null)
                    {
                        aux = aux.abajo;
                    }

                    nuevo.arriba = aux;
                    aux.abajo    = nuevo;
                    tamaño++;
                }

                //-----------------------PARA INSERTAR EN X----------------------//

                //Se recorre buscando la posición correcta en X
                NodoM auxV = listaVertical.buscar(x);
                auxV     = auxV.derecha;
                agregado = false;
                while (auxV != null)
                {
                    if (esMayor2(auxV.y, y) < 0)
                    {
                        auxV = auxV.derecha;
                    }
                    else
                    {
                        //Si se encuentra se inserta
                        nuevo.derecha          = auxV;
                        nuevo.izquierda        = auxV.izquierda;
                        auxV.izquierda.derecha = nuevo;
                        auxV.izquierda         = nuevo;
                        tamaño++;
                        agregado = true;
                        break;
                    }
                }

                //Si no se insertó, se inserta al final del encabezado vertical
                if (!agregado)
                {
                    auxV = listaVertical.buscar(x);
                    auxV = auxV.derecha;

                    while (auxV.derecha != null)
                    {
                        auxV = auxV.derecha;
                    }

                    auxV.derecha    = nuevo;
                    nuevo.izquierda = auxV;
                    tamaño++;
                }
                return(true);
            }
            return(false);
        }