Diccionario, - Tabla de búsqueda_lineal (tabla look-up) - estructura de datos La tabla de búsqueda_lineal economiza almacenamiento a expensas de la efectividad o velocidad de acceso a la tabla. Consiste en almacenar de forma consecutiva cada elemento con su clave. Y para encontrar un elemento de la tabla se iría analizando la clave hasta que coincidiera, realizándose a continuación la operación solicitada.
Por ejemplo, en el caso del centro escolar anterior se utilizaría, como clave del alumno un número identificativo (por ejemplo el número de matrícula, el DNI si es posible, etc.) único para cada alumno, que se incorporaría con el nombre y apellidos y otra información de interés del alumno.
TABLA LINEAL DE ALUMNOS
24365 Alonso Fernández, Javier
23200 Alvarez Martínez, Luisa
… …
32200 Zuazu Pérez, Fernando
34405 Bustos Soto, María
El acceso a un determinado alumno consistiría en ir comparando el número identificativo del alumno con su clave en la tabla hasta encontrarlo. Por ejemplo, si se solicitan los datos del alumno «32 200», se entraría por el principio de la tabla y se compararía este valor con las claves 24 365, 23 200, …, hasta encontrar la 32 200 que corresponde al alumno Zuazu Pérez, Fernando.
Importa notar la simplicidad que presenta añadir nuevos alumnos a la tabla; bastará con incluirles en la primera posición vacía de la tabla. El dar de baja un alumno consistiría simplemente en poner a cero la clave e información de ese elemento de la tabla.
Como se ve, el hecho de que las inserciones se realicen en cualquier punto de la tabla que esté vacío produce una tabla que no tiene ningún orden en sus claves, hecho que retarda mucho la búsqueda.
La función que trata una tabla de búsqueda_lineal, como la que se acaba de describir, tendría la siguiente codificación:
búsqueda_lineal (tabla_centro, operación, clave, información):
Inicio_búsqueda_lineal
Si operación=1 (búsqueda), 2 (actualización), 3 (eliminación) ó 4 (inserción)
Entonces
I=1
T= Falso
Mientras (I£longitud de la tabla) y (T=Falso)
Si (tabla_centro [I,1]=clave) o (tabla_centro [I,1]=0)
Entonces
Si tabla_centro [I,1]= clave
Entonces
Si operación=1 // búsqueda
Entonces
información=tabla_centro [I,2]
Si no
Si operación=2 //
actualización
Entonces
tabla_centro [I,2]= información
Si no
Si operación=3 // eliminar
Entonces
tabla_centro [I,1]=tabla_ centro [I,2]=0
Si no // inserción
Mostrar “error. elemento ya insertado”
Retorna 1
Fin_si
Fin_si
Fin_si
T= Cierto
Si no
Si operación=4 //inserción
Entonces
tabla_centro [I,1]= clave
tabla_centro [I,2]= información
T= Cierto
Fin_si
Fin_si
Si no
I=I+1
Fin_si
Fin_mientras
Si T= Falso
Entonces
Mostrar “error.-elemento no encontrado”
Retornar 2
Si no // operación correcta
Retorna 0
Fin_si
Si no
Mostrar “Operación no implementada”
Retornar 3
Fin_si
Fin_búsqueda_lineal
La función búsqueda_lineal tiene los mismos cuatro argumentos que la de acceso directo descrita anteriormente.
— La tabla_centro es, en este caso, una matriz de dos dimensiones, y vendrá definida como:
tabla_centro: matriz [1…205] [2] de strings de caracteres
— Operación, señala la operación a realizar en la tabla:
1. Se busca un elemento y se obtiene su información (nombre y apellidos).
2. Se actualiza la información del elemento.
3. Se elimina un elemento de la tabla. Se pone su clave e información a cero.
4. Se inserta (añade) un alumno a la tabla. Recordar que la inserción se realiza en el primer hueco (con clave e información a cero) que tenga la tabla.
otro valor. Es una operación errónea, no existe.
— Clave. Es el número identificativo de cada alumno, y ocupa la primera columna de la tabla.
— Información. Es el nombre y apellidos de cada alumno y ocupa la segunda columna de la tabla. Al igual que en el caso del acceso _directo, si la operación es de búsqueda (1) el campo información recibe el contenido de la «tabla_centro»; si es de actualización (2) el valor de información se incorpora a la «tabla_centro», y si es de inserción (4) el valor de la clave y de información pasan a la «tabla_centro». Durante la operación de eliminación (3), el contenido de información no tiene ninguna relevancia.
La función búsqueda_lineal recibe estos cuatro argumentos, y si la operación es una búsqueda (1), actualización (2), eliminación (3) o inserción (4), empieza a localizar la clave desde el principio de la «tabla_centro» (I=1) hasta el final de la tabla (I_longitud de la tabla).
Si encuentra al elemento clave, realiza la operación solicitada si el valor de la operación es una búsqueda, actualización o eliminación del elemento. En el caso de que la operación sea una inserción, muestra un mensaje de «error.-elemento ya insertado» ya que al existir la clave quiere decir que en esa posición está ya el alumno por lo que no se puede volver a insertar ese alumno, y finaliza la ejecución de la función retornando un 1.
Si encuentra una clave vacía (existe un hueco) y la operación es una inserción, entonces coloca en esa posición el valor de la clave y de la información de un nuevo alumno (tabla_centro [I, 1]= clave, y tabla_centro [I, 2]= información), y finaliza el proceso haciendo T= Cierto.
Si en esa posición de la tabla no encuentra el elemento clave, pasa a la siguiente fila de la tabla (I=I+1) para volver a repetir las mismas operaciones. Si alcanza el final de la tabla sin encontrar el elemento buscado, entonces muestra el mensaje de «error- elemento no encontrado», y finaliza la ejecución de la función retornando un 2.
Por último, si la operación solicitada no es una búsqueda, actualización, eliminación o inserción de un alumno, muestra el mensaje «operación no implementada» y finaliza la ejecución retornando un 3.
Y si la operación se ha realizado correctamente entonces retorna un 0.
Pero ¿para qué sirve el valor de retorno que devuelve la función? Pues, simplemente para comunicar al programa principal, que utiliza esta función, qué ha ocurrido durante el proceso de búsqueda.
Por ejemplo, un programa principal que utilice esta función sería el siguiente:
// Buscar elementos de una tabla y visualizarlos en pantalla
Inicio
tabla_centro: matriz [1..205] [2] de strings de caracteres
Mientras haya_operaciones
Mostrar en pantalla: ¿ Indique la operación que desea realizar, y para finalizar teclee un 0 ?
Leer operación
Si operación=0
Entonces
Mostrar “Fin de la búsqueda”
Stop
Si no
Si operación=1 // búsqueda
Entonces
Leer clave
búsqueda_lineal (tabla_centro, operación, clave, información)
Si el retorno=0
Entonces
Mostrar “búsqueda realizada:” clave e información
Si no
Mostrar “la búsqueda de la clave no se ha podido realizar”
Fin_si
Si no
Si operación=2 // actualizar
Entonces Leer clave e información
búsqueda_lineal (tabla_centro, operación, clave, información)
Si el retorno=0
Entonces
Mostrar “actualización realizada.”
Si no
Mostrar “la actualización de la clave no se ha podido realizar”
Fin_si
Si no
Si operación=3 // eliminación
Entonces
Leer clave búsqueda_lineal (tabla_centro, operación, clave, información)
Si retorno=0
Entonces
Mostrar “se ha eliminado el alumno”, clave
Si no
Mostrar “la eliminación de la clave no se ha podido realizar”
Fin_si
Si no
Si operación=4 // inserción
Entonces
Leer clave e información
búsqueda_lineal (tabla_centro,operación, clave, información)
Si el retorno=0
Entonces
Mostrar “se ha incorporado el alumno”, clave e información
Si no
Mostrar “la incorporación del alumno (clave) no ha sido posible”
Fin_si
Si no
Mostrar “la operación que se solicita no es correcta”
Fin_si
Fin_si
Fin_si
Fin_si
Fin_si
Fin_mientras
Fin
Este programa define primero la «tabla_centro» de 205 alumnos, con la clave y la información de cada alumno. Seguidamente, solicita por la pantalla de la computadora ¿qué operación se desea realizar?
El usuario del programa escribe un 1, 2, 3 ó 4 si desea realizar una operación de búsqueda, actualización, eliminación o inserción, o un 0 si desea finalizar la ejecución del programa.
En el caso de que la operación sea de búsqueda (1), el programa solicita leer la clave. Seguidamente llama a la función búsqueda_lineal, codificada anteriormente, y si retorna un 0 quiere decir que la búsqueda de ese alumno ha sido correcta y visualiza la clave y la información del alumno; en caso contrario, muestra un mensaje de error.
Si la operación es una actualización (2) o una inserción (4), el programa pide leer la clave y la información a actualizar o insertar del alumno. Posteriormente, llama a la función búsqueda_lineal y si ésta retorna un 0, muestra por pantalla que la actualización o inserción han sido correctas. Si el retorno ha sido diferente de 0, visualiza que la operación no ha sido posible.
Si la operación es una eliminación (3) es decir, dar de baja a un alumno, entonces el programa pide leer la clave del alumno a dar de baja y llama a la función búsqueda_lineal. Si la función retorna 0 (eliminación correcta), el programa muestra por pantalla que se ha eliminado al alumno y su clave. En caso contrario, visualiza un mensaje de error.
El lector habrá podido comprobar que el programa se ha codificado con varias instrucciones condicionales dobles del tipo: «Si Entonces… Si no». Evidentemente, se podría haber utilizado una instrucción condicional múltiple del tipo: «Según operación…», reduciendo con ello la codificación, como se hizo en la tabla de acceso directo. No obstante, se ha querido hacer así para que el lector vea mejor la secuencialidad del programa.
Las tablas organizadas con búsqueda_lineal presentan las siguientes características:
— Es muy sencillo realizar la inserción y eliminación de un elemento. Basta con encontrar el primer hueco para la inserción, o crear un hueco en el caso de la eliminación, sin preocuparse de nada más.
— La búsqueda y actualización resultan muy costosas porque hay que ir chequeando clave tras clave hasta encontrar la solicitada. Este es un proceso muy caro, lo que hace que este tipo de tablas no sean muy utilizadas en informática. Interesa recordar que en las tablas de acceso directo la búsqueda es inmediata ya que al primer acceso a la tabla se encuentra el elemento solicitado; mientras que en este tipo de tabla la búsqueda se hace interminable si la tabla es muy grande.Enciclopedia, México, Colima, Revista Electronica Fumarola, Noticias LeeColima, Lee Colima