dato / i

Correcciones comunes a TPs de Algoritmos (incomplete)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Redimensionar en el momento correcto

dato opened this issue · comments

Si se desea redimensionar un arreglo cuando este alcanza su capacidad máxima (por ejemplo, pila_apilar, o alguna primitiva del hash) ¿qué es mejor: hacerlo antes o después de realizar la escritura? Esto es, entre A y B, cuál es preferible:

// Opción A

tabla[cant] = x;
cant++;

if (cant == capacidad) {
    if (!redimensionar(tabla, ...))
        return false;
}

return true;

O bien:

// Opción B

if (cant == capacidad) {
    if (!redimensionar(tabla, ...))
        return false;
}

tabla[cant] = x;
cant++;

return true;

La respuesta es que B es preferible, y les recomendamos que se paren a pensar por qué antes de leer la solución. (En particular, pueden intentar pensar qué puede ir mal en el caso A.)

Redimensionar ANTES de escribir (opción B) La opción B es la correcta. La opción A solo es correcta si la redimensión nunca falla. Si falla, entonces a la vez próxima directamente se escribirá en la siguiente posición del arreglo, donde no hay memoria válida reservada.)