void Normalize(XMFLOAT3* vector) { float largo = Largo(vector); vector->x /= largo; vector->y /= largo; vector->z /= largo; }
void ListaEnlazada<T>::Borrar(nat pos) { assert(pos < Largo()); if (pos == 0) { primero = primero->sig; if (Largo() == 1) ultimo = nullptr; } else { if (pos == Largo() -1) { if (posActual < Largo() - 1) ultimo = nodoActual; else ultimo = primero; while (ultimo->sig->sig) ultimo = ultimo->sig; ultimo->sig = nullptr; } else { if (posActual >= pos) { posActual = 0; nodoActual = primero; } while (posActual < pos - 1) { posActual++; nodoActual = nodoActual->sig; } nodoActual->sig = nodoActual->sig->sig; } } if (posActual == pos) nodoActual = nodoActual->sig; else if (posActual > pos) posActual--; largo--; }
void ListaEnlazada<T>::AgregarEn(const T& e, nat pos) { assert(pos <= Largo()); if (pos == 0) { primero = new NodoLista<T>(e, primero); if (!ultimo) { ultimo = nodoActual = primero; posActual = 0; } else posActual++; } else if (pos == Largo()) { ultimo->sig = new NodoLista<T>(e); ultimo = ultimo->sig; } else { if (posActual >= pos) { posActual = 0; nodoActual = primero; } while (posActual - 1 < pos) { posActual++; nodoActual = nodoActual->sig; } pNodoLista nuevo = new NodoLista<T>(e, nodoActual->sig); nodoActual->sig = nuevo; nodoActual = nuevo; posActual = pos; } largo++; }
T& ListaEnlazada<T>::ElementoEn(nat pos) { assert(pos < Largo()); if (pos == 0) return primero->dato; else if (pos == Largo() - 1) return ultimo->dato; if (posActual > pos) { posActual = 0; nodoActual = primero; } while (posActual < pos) { nodoActual = nodoActual->sig; posActual++; } return nodoActual->dato; }
bool TablaHashAbierto<C,V,FHash>::EstaLlena() const { return fc < (static_cast<float>(Largo()) + 1) / arreglo.Largo; }