En este capítulo definiremos un conjunto de funciones de uso general que pueden ser almacenadas en una biblioteca y utilizadas desde cualquier aplicación.
El conjunto de funciones que definiremos formará un nuevo tipo de datos para el manejo de las pistas, y si una aplicación quiere utilizar las mismas, puede hacerlo a través de este nuevo tipo de datos como si se tratara de funciones de la biblioteca estándar C. Empecemos por tanto a definir las pistas y sus funciones.
Un listado estará definido por dos demostradores, uno para indicar el primer componente y el otro para el último. Cada uno de los componentes de la lista tiene un puntero para indicar el componente junto a la saliva, el índice de información del componente y la prioridad, ya que es posible introducir los componentes por orden de prioridad. En el programa 1 aparece el contenido del fichero lista_def.h, donde se hace la lista y se define el componente.
A continuación se diseñarán y definirán las funciones de lista que precisarán las aplicaciones.
Desde el punto de vista del diseño, se debe especificar qué tipo de funciones serán y qué parámetros tendrán. Para empezar, necesitaremos la función de crear una lista vacía, que tenga como único parámetro el creado, el índice de la brisa. Para saber si se trata de una simple lista, tendremos una función booleana con un único parámetro, la función vacío. Como en las listas se añaden los componentes y se eliminan, las funciones principales serán añadirlos al final (sin tener en cuenta la prioridad) o añadirlos por orden de preferencia, y eliminar el primer componente o eliminar el primer componente de una determinada prioridad. Asociar, insertar, primera y salir a estas cuatro funciones les corresponderán los nombres y las características siguientes:
Las funciones diseñadas se reflejarán en el fichero lista_fun.h, ya que en las aplicaciones este fichero se utilizará para crear funciones sobre listas.
En los siguientes programas se ha iniciado la definición de las funciones 3 a 8, pudiendo todas ellas estar incluidas en un fichero o en ficheros separados. Al inicio de cada fichero deberá especificarse la sentencia #include lista_def.h.
En la figura 1 se refleja el estado normal, es decir, el elemento que se inserta no sea el primero o el último.
Las inversas de las funciones atar e insertar son la primera y salir, ya que en lugar de amarrar un elemento lo quitan.
Una vez compiladas estas funciones, es conveniente guardarlas en una biblioteca para facilitar el procedimiento de enlace cuando se referencian desde las aplicaciones. Las funciones del capítulo anterior no se ubicaban en una biblioteca porque estaban escritas para una aplicación concreta, pero el objetivo de las funciones de este capítulo es ofrecer un nuevo tipo de datos para cualquier aplicación, por lo que el procedimiento estándar es ubicarse en una biblioteca.
Cada sistema operativo de almacenamiento de módulos de objetos en las bibliotecas tiene un comando, tal y como se comentó en el capítulo 11.
Si la biblioteca está completa, vamos a ver cómo se pueden utilizar las funciones mencionadas guardadas en la biblioteca.
Lo explicaremos con un ejemplo. Pensemos que en la base de datos del capítulo anterior queremos listar los libros por fecha de publicación. Según lo indicado en el Programa 9, definiremos una lista y los componentes de la misma se situarán en la memoria dinámica.
Cada uno de los componentes o elementos de la Lista está compuesto por el demostrador adjunto, la fecha de publicación como prioridad y el índice para el libro correspondiente. Una vez completado el listado corriendo todos los libros, los componentes se sacarán y se imprimirán en orden.
Obsérvese que la lista y los elementos, que hasta ahora no tenían asignada memoria, se han definido en el programa principal, uno en la memoria estática y otro en la memoria dinámica. Por otro lado, no se realiza la gestión de las funciones asociadas a las listas, ya que el fichero lista_fun.h está incluido.
Al vincular el programa se hará referencia a la biblioteca a la que pertenecen las listas.