1
« en: Martes 1 de Abril de 2014, 09:41 »
Bueno, no se si te sirva la ayuda ahora, pero para el que la necesite ahi va.
Pre Condicion: Siempre que se trabajen con arreglos hay que llevar la cantidad logica ( o dimension Logica ) de los datos dentro del mismo.
Esto nos ayuda a saber la cantidad efectiva de datos que hay dentro del arreglo, y esto es practico para cuando queremos agregar mas datos al mismo y no pasarnos de la capacidad maxima.
Lo primero es ubicar el registro a eliminar y determinar en que posicion del arreglo ( o Array) se encuentra.
*Si el dato es el ultimo dentro de la dimension Logica del arreglo, lo que debemos hacer es decrementar la dimension Logica en 1, con esto estamos haciendo un borrado logico de los datos. Esto vale como borrado de datos. Ejemplo:
Buscar y borrar el numero '09' en el siguiente arreglo:
Antes del borrado.
Dimension Fisica del arreglo = 8
Dimension Logica = 6
Dato a borrar
↓
|_01_|_02_|_03_|_05_|_07_|_09_|____|____|
↑
Dim. Logica
Despues del borrado.
┌ Datos Basura ┐
|_01_|_02_|_03_|_05_|_07_|_09_|____|____|
↑
Dim. Logica
A partir de la Posicion siguiente a la Dim. Logica, los datos se consideran invalidos logicamente.
*Si el dato esta en otra parte que no sea en el final de la dimension Logica ( pero siempre comprendido dentro de la misma ), puedes sobreescribir los datos del registro buscado con el ultimo registro de la dimension Logica y luego decrementar la dimension en 1. Esto tambien vale como borrado, pero tendrias que volver a ordenar los datos para tenerlos ordenados de nuevo. Ejemplo:
Buscar y borrar el numero '02' en el siguiente arreglo:
Antes del borrado.
Dimension Fisica del arreglo = 8
Dimension Logica = 6
Dato a borrar
↓
|_01_|_02_|_03_|_05_|_07_|_09_|____|____|
↑
Dim. Logica
Sobreescribo el dato a borrar con el ultimo dato de la Dim. Logica ( es decir con el '09' ) y decremento en 1 la cantidad de datos.
Dimension Fisica del arreglo = 8
Dimension Logica = 5
Dato sobreescrito
↓ ┌ Datos Basura ┐
|_01_|_09_|_03_|_05_|_07_|_09_|____|____|
↑
Dim. Logica
*Por ultimo puedes tambien borrar de la siguiente manera. Determinas la posicion del registro a borrar y lo sobreescribes con el registro de la posicion siguiente, es decir, haces una superposicion de datos desde la posicion del registro a borrar hasta la dimension logica. Ejemplo sencillo:
Buscar y borrar el numero '05' en el siguiente arreglo:
Dimension Fisica del arreglo = 8
Dimension Logica = 6
Dato a borrar
↓
|_01_|_02_|_03_|_05_|_07_|_09_|____|____|
Tip: Puedes usar el indice del dato a borrar ( en este casi su indice es 4) y restarselo a la dim Logica( que es 6), esto te dara la cantidad de corrimientos de datos que debes hacer ( 6 - 4 = 2 corrimientos de datos ), es ideal para usarlo con un "For"
Determino la posicion del numero buscado, como resultado da que esta en la posicion 4.
Entonces desde la posicion 4 voy superponiendo los datos, es decir, en la posicion 4 copio los datos de la posicion 5, en la 5 copio los datos de la 6, y decrementas la dimension Logica en 1. Por lo tanto te quedaria asi el vector resultante
Dimension Fisica del arreglo = 8
Dimension Logica = 5
Superposicion de datos
← ←
|_01_|_02_|_03_|_07_|_09_|_09_|____|____|
↑ └ Datos Basura ┘
↑
Nueva Dim. Logica
Como se ve en la representacion, queda repetido el '09' dos veces, pero eso es inevitable. Pero tus datos verdaderos son los que estan comprendidos dentro de la dimension logica. Los datos despues de la misma los debes tratar como basura ya que no sirven, y nuevamente aqui estamos aplicando un "Borrado logico de datos".
Bueno, espero que se haya entendido la idea en general que trate de expresar. Tambien espero que te pueda servir de ayuda o a otra persona que este en la misma condicion.
Sin mas me despido, saludos!