Beruflich Dokumente
Kultur Dokumente
Pila
Una pila, también denominada sistema último-dentro primero-fuera (LIFO), es una
lista lineal en la cual las inserciones y extracciones tienen lugar sólo por un
extremo llamado cúspide.
Cola
Una cola, también denominada sistema primero-dentro primero-fuera (FIFO), es
una lista lineal en la cual las extracciones se realizan siempre por un extremo
llamado frente y las inserciones por el extremo contrario llamado final de la lista.
Grafos
Los datos contienen, en algunos casos, relaciones entre ellos que no es
necesariamente jerárquica. Por ejemplo, supongamos que unas líneas aéreas
realizan vuelos sólo entre ciudades conectadas por líneas. La estructura de datos
que refleja esta relación recibe el nombre de grafo.
Búsqueda
Implica la localización de un registro caracterizado por una determinada clave o
también el acceso a todos los registros que cumplan una o más condiciones.
Inserción
Cuando añadimos nuevos registros a la estructura.
Eliminación
Operación de borrado de un registro de la estructura.
Ordenación
Es la operación de clasificar los registros conforme a un orden lógico determinado
(por ejemplo, alfabéticamente, de acuerdo a una clave de nombre, o numérica, de
acuerdo a alguna clave de número, tal como número de Seguridad Social o de
inventario).
Mezcla
Es la operación de combinar dos archivos previamente ordenados en uno único
que también lo está.
Una estructura de datos es una colección de datos que pueden ser caracterizados por su
organización y las operaciones que se definen en ella. Las estructuras de datos son muy
importantes en los sistemas de computadora. Los tipos de datos más frecuentes utilizados en
los diferentes lenguajes de programación son: datos simples estándar entero (integer) real
(real) carácter (char) lógico (boolean) definido por el programador subrango (subrange) (no
estándar) enumerativo (enumerated) datos estructurados estáticos arrays (vectores/matrices)
registros (record) ficheros (archivos) conjuntos (set) cadenas (string) dinámicos listas
(pilas/colas) listas enlazadas árboles grafos Los tipos de datos simples o primitivos significan
que no están compuestos de otras estructuras de datos; los más frecuentes y utilizados por
casi todos los lenguajes son: enteros, reales y carácter (char), siendo los tipos lógicos, subrango
y enumerativos propios de lenguajes estructurados como Pascal. Los tipos de datos
compuestos están construidos basados en tipos de datos primitivos; el ejemplo más
representativo es la cadena (string) de caracteres. Los tipos de datos simples pueden ser
organizados en diferentes estructuras de datos: estáticas y dinámicas. Las estructuras de datos
estáticas son aquellas en las que el tamaño ocupado en memoria se define antes de que el
programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa.
Estas estructuras están implementadas en casi todos los lenguajes: array (vectores/tablas-
matrices), registros, ficheros o archivos (los conjuntos son específicos del lenguaje Pascal). Las
estructuras de datos dinámicas no tienen las limitaciones o restricciones en el tamaño de
memoria ocupada que son propias de las estructuras estáticas. Mediante el uso de un tipo de
datos específico, denominado puntero, es posible construir estructuras de datos dinámicas
que son soportadas por la mayoría de los lenguajes que ofrecen soluciones eficaces y efectivas
en la solución de problemas complejos —Pascal es el lenguaje tipo por excelencia con
posibilidad de estructuras de datos dinámicos—. Las estructuras dinámicas por excelencia son
las listas —enlazadas, pilas, colas—, árboles —binarios, árbol-b, búsqueda binaria— y grafos.
La elección del tipo de estructura de datos idónea a cada aplicación dependerá esencialmente
del tipo de aplicación y, en menor medida, del lenguaje, ya que en aquellos en que no está
implementada una estructura —por ejemplo, las listas y árboles no los soporta COBOL—
deberá ser simulada con el algoritmo adecuado, dependiendo del propio algoritmo y de las
características del lenguaje su fácil o difícil solución. Una característica importante que
diferencia a los tipos de datos es la siguiente: los tipos de datos simples tienen como
característica común que cada variable representa a un elemento; los tipos de datos
estructurados tienen como característica común que un identificador (nombre) puede
representar múltiples datos individuales, pudiendo cada uno de éstos ser referenciado
independientemente.
Representación de un algoritmo
Una vez que se ha elegido la mejor alternativa para solucionar el problema o reto para el
que se crea el algoritmo es el momento de representarlo siguiendo alguno de estos
métodos:
Diagramas de Flujo
A continuación se muestran una serie de símbolos útiles para llevar a cabo este tipo de
representaciones.
Fuente: Slideshare de Paco González Caballero
En este documento (ver) encontrarás una serie de reglas y ejemplos para crear
algoritmos y diagramas de flujo.
Pseudocódigo
El Pseudocódigo es sin duda de las representaciones más utilizadas. Es una forma de
expresar el algoritmo utilizando el lenguaje natural, comprensible para cualquier
persona, pero añadiendo ciertas instrucciones típicas de los lenguajes de programación.
No existe una sintaxis estándar para el pseudocódigo, pero como hemos comentado, en
el pseudocódigo se reflejan las instrucciones típicas de los lenguajes de programación,
como las instrucciones condicionales:
SI condición ENTONCES
instrucciones/pasos a realizar si se cumple la
condición
SI NO
instrucciones/pasos a realizar si NO se cumple
la condición
FIN SI
REPETIR n veces
instrucciones/pasos a realizar
FIN REPETIR
Se insistirá mucho en seguir unas "normas de estilo" que hagan más comprensible
el código fuente de un programa. Es responsabilidad del alumno seguirlas, pero
todos los buenos programadores las siguen, no es una "pijada", realmente ayuda a
programar mejor.
Vamos a adelantar una serie de conceptos que veremos con más detalle en
próximos artículos. Una variable es una "entidad" que utilizaremos para almacenar
información durante la ejecución de un programa. El contenido de una variable
puede modificarse asignándole un valor. Por ejemplo, si quisiéramos que una
parte del programa se ejecutase si el valor de una variable es 5, en pseudocódigo
lo escribiríamos:
variable_1 := 3;
(* grupo de instrucciones 1 *)
si (variable_1 = 5) entonces
hacer
_____(* grupo de instrucciones 2 *)
fin_hacer
en_otro_caso
hacer
_____(* grupo de instrucciones 3 *)
fin_hacer
¿Se ejecutaría el "grupo de instrucciones 2"? Eso no lo sabemos, depende del valor
que tome la variable variable_1 en el momento de evaluar si es igual o no a 5. Es
por esto por lo que se dice que la ejecución de los programas es dinámica.
Dependiendo de las condiciones en las que se ejecute un programa, obtenemos un
resultado u otro. De todas formas, ya veremos más adelante "de qué va todo esto".