Está en la página 1de 37

ALGORITMOS Y ESTRUCTURAS DE DATOS (APUNTE TEORICO)

Pura
Asignación Funcionales
Expresión Algebraicas Contador
Simples Incrementales
Acumulador
Acción Elemental
Acciones
Acción con nombre
Simples
Estructuradas Condicionales Alternativa
Selección Múltiple
Mientras (PRE-TEST.)
Cíclicas Repetir (Post-Test)
Para (Manejada por contador)

Acciones Simples

Asignación: Es la acción que da el valor de una expresión a una variable (acción de transferir un
contenido). El operador de asignación es “:=”.
En toda transferencia existe un emisor y un receptor:

RECEPTOR:= EMISOR
Solo una variable puede ser receptor en la acción de asignación. El emisor puede ser una constante, una
variable o una expresión. El emisor se evalúa y ese valor se almacena en la variable simple que se
encuentra a la izquierda del operador de asignación.
La forma general de una acción de asignación es:

VARIABLE:= EXPRESION
El valor que se la asigna a la variable deberá ser del mismo tipo que la expresión. Las variables toman los
valores que se les asignan hasta que cambien mediante otra acción de asignación.
Expresión: Es la reunión de datos (constantes y variables) llamados operando, relacionados mediante
operadores.

Operadores:
Unimodales: OP (operador) Esto es lo que se conoce como funciones.
Bimodales: Operando1 OP Operando2
Expresiones Aritméticas:
 Suma
 Resta
 Multiplicación
 División
División
DIV: división entera (sin parte decimal)
MOD: modulo (resto de la división entera)
Para dividir con reales se utiliza el operador /. Los valores reales se suman, restan y multiplican igual que
los valores enteros. DIV y MOD no tienen sentido cuando se aplican a los reales. Si un operando es real y el
otro es entero, se convierte el valor entero en real antes de que se ejecute la acción. Si se utiliza el
operador / entre dos operandos enteros, los dos operandos se convierten a real antes de efectuar la
división. El resultado es un valor real. Se puede asignar un valor del tipo entero a una variable del tipo real.
En el cuadro se muestra cual es el tipo de resultado dependiendo de los operadores que se utilicen y el tipo
de dato de los operandos:

OPERANDO
OPERADOR Real Real Entero Entero
Real Entero Real Entero
+ Real Real Real Entero
- Real Real Real Entero
* Real Real Real Entero
/ Real Real Real Real
DIV ERROR ERROR ERROR Entero
MOD ERROR ERROR ERROR Entero
Precedencia de los operadores:
Reglas de Precedencia:
 Los operadores que tienen mayor precedencia se procesan
primero, después se continúa de izquierda a derecha con los operadores que tienen la misma precedencia.
 Si hay paréntesis en una expresión, primero se evalúa la
expresión entre paréntesis (estos pueden hacer variar las reglas de precedencia)
Orden de Precedencia
1. ^ (elevación a la potencia)
2. -, + operadores de signo, menos y mas unitarios
3. *, /, DIV, MOD
4. +, - suma y resta

Se aplican de izquierda a derecha

Funciones Internas: Son operadores especiales. Las funciones internas tienen una alta prioridad cuando
aparecen en alguna expresión, superior, a la del operador de potenciación.
 ABSO(X)  REDOND(X)
 SQRT(X)  SQR(X)
 LN(X)  SIN(X)
 LOG(X)  COS(X)
 EXP(X)  TAN(X)
 TRUNC(X)
El valor de TRUNC(X) es el mayor entero T talque | T | <= | X |
El valor de REDOND(X) es el mayor entero T talque | T | <= | X + 0,5 |

Expresiones Lógicas o Booleanas


Una expresión booleana puede ser:
1. Una variable booleana.
2. Una expresión booleana seguida de un operador booleano seguida de una expresión.
3. Una expresión booleana seguida de un operador booleano seguida de otra expresión booleana.
Una variable booleana es una variable declarada del tipo lógica. Su contenido puede ser verdadero o falso.
 Operadores Relacionales: mediante la comparación de dos valores, se asegura que una relación
existe entre ellos. Los operadores relacionales son:
= (igual), <> (distinto), <= (menor o igual), >= (mayor o igual), < (menor), > (mayor).
 Operadores Booleanos: Los operadores booleanos comparan números o letras. Los mismos son
representados a través de símbolos especiales “^” (y = conjunción), “v” (o = disyunción) y “No” (negación),
los cuales se definen solo para las expresiones booleanas.
Operadores Bimodales: “^”, “v”
Operadores Unimodales: “No”
Precedencia de los operadores lógicos:
1. No (Negación)
2. ^ (Conjunción)
3. v (Disyunción)
Los operadores relacionales tienen una precedencia menor que todos los demás operadores, incluyendo
los operadores aritméticos y boléanos.

El orden de precedencia de todos los operadores seria


1. No (Negación)
2. *, /, DIV, MOD, Y (Conjunción)
3. +, -, o (Disyunción)
4. <, <=, >, >=, <>
Los operadores de la misma línea tienen la misma precedencia. Si hay más de un operador con la misma
precedencia en una expresión, los operadores se evalúan de izquierda a derecha.

Acción elemental es la ejecución de un acontecimiento elemental. Una acción elemental aparece en un


algoritmo por su nombre. La lectura de este nombre por parte del ejecutante es interpretada como
“provocar” el acontecimiento asociado a este nombre.

Acciones Estructuradas

Acción con nombre: Es la incorporación de un nombre al repertorio de acciones. Para incorporar un


nombre al repertorio de acciones, preciso proporcionar el nuevo nombre, la especificación de la acción y el
texto que constituye la descripción.
Se escribe:
Acción NOMBRE es
Acción 1;
Acción 2;

Acción n;
Fin Acción
Se identifica un cierto encadenamiento de acciones con un nombre.

Condicionadas
Simple: Es la ejecución condicional de una acción. La composición condicional permite expresar que no es
necesario provocar un cierto acontecimiento más que bajo una cierta condición.
Se escribe:
Si CONDICION entonces
ACCION x
Fin Si
La ejecución de este texto provoca en primer lugar, la observación de la certeza de la condición. Si esta
observación conduce a una respuesta cierta, la acción es ejecutada a continuación de la observación. Por el
contrario, si la condición da como resultado falso, la observación termina la ejecución.
Alternativa: Es la ejecución alternativa de una entre dos acciones. La composición alternativa permite
expresar que debe provocarse un acontecimiento bajo cierta condición u otro acontecimiento bajo la
condición contraria.
Se escribe:
Si CONDICION entonces
ACCION 1
Sino
ACCION 2
Fin Si
La ejecución de este texto provoca en primer lugar la observación de la certeza de la condición. Esta
observación es seguida de la acción 1 si la condición tiene resultado cierto, o la acción 2 si la condición
tiene por resultado falso.
Selección Múltiple: Es la ejecución condicional de una entre varias acciones. La composición selectiva
permite vincular la ejecución de una acción a la observación de una condición. Se asocia un conjunto de
acciones y un conjunto de condiciones que se excluyen mutuamente.
Se escribe:
Según INDICADOR Hacer
Valor 1: Acción 1;
Valor 2: Acción 2;

Valor n: Acción n;
Otro: Acción n +1;
Fin Según
El conjunto de las condiciones esta enteramente definido por el conjunto de los valores que puede tomar
el indicador. La ejecución del texto provoca la búsqueda en la lista de los valores de aquel que corresponde
al valor observado del indicador. Esta búsqueda es seguida de la ejecución asociada a dicho valor. Se
ejecutará una acción de entre todas las que se enumeran. Es necesario que el indicador tenga en el
momento de su observación un valor del conjunto enumerado en la composición. La acción N+1 se asocia
en todos los casos en los cuales el indicador no pertenece al conjunto de los N valores explícitamente
enumerados.

Repetitivas, Iterativas o Colectivas:


Es la ejecución múltiple de una sola acción. La composición iterativa permite expresar que se debe
provocar un cierto acontecimiento una o más veces consecutivamente.
El número de ejecuciones de la acción no se expresa directamente. De hecho, la condición que aparece en
el algoritmo indica la observación que debe hacerse para que cese la iteración.

Repetir: La ejecución de este texto provoca sucesivamente la ejecución de la acción, a continuación, la


observación de la condición y así sucesivamente hasta que el resultado de la condición sea cierto. Es decir,
se ejecuta la acción mientras la condición sea falsa. Si la llama también estructura de POST-TEST porque la
observación de la condición se realiza después de la ejecución de la acción- La acción se ejecuta por lo
menos una vez.
Se escribe:
Repetir
Acción
Hasta que CONDICION

Mientras: Esta forma de composición iterativa permite agrupar los procesos en los cuales una acción es
ejecutada cero, una o más veces. La condición que aparece en el algoritmo indica la observación que debe
hacerse para que continúe la iteración. La acción es ejecutada mientras la condición sea verdadera. Se la
llama también estructura de PRE-TEST porque la condición es testeada antes de la ejecución de la acción.
La acción se va a ejecutar como mínimo cero veces. La condición del mientras siempre esta negada el
repetir.
Se escribe:
Mientras CONDICION Hacer
Acción
Fin Mientras
Manejada por contador
Se escribe:
Para VC:= VI Hasta VF [Incremento: I] Hacer
Acción
Fin Para
Donde:
VC: Es una variable de tipo numérico. Es llamada variable de control.
VI, VF, e I: son variables de tipo numérico, constantes de tipo numérico o expresiones aritméticas. VI recibe
el nombre de valor inicial, VF recibe el nombre de valor final e I es el incremento que se expresa cuando es
distinto de 1. El valor de I puede ser positivo o negativo, pero no puede ser cero.
En este caso sabemos el número de veces que se va a ejecutar una acción.
 Si el incremento es positivo VI < VF
 Si el incremento es negativo VI > VF
Dentro del para no es correcto modificar el valor de la variable de control (VC). Cuando salgo del para la
variable VC queda indefinida.
En el mientras y el repetir la variable condicional debe ser alterada dentro del ciclo por instrucción del
algoritmo a diferencia del para que no puede ser alterada dentro del ciclo.

Clasificación según la cantidad de ciclos:


Las estructuras PRE-TEST y POST-TEST son estructuras indefinidas porque no podemos saber cuantas veces
va a repetir el ciclo.
La estructura manejada por contador es definida porque antes de la ejecución ya sabemos cuantas veces
se va a repetir el ciclo.

Clasificación de las estructuras según sus elementos:


 Puras: Cuando todos los elementos son de la misma especie. (Lo que no quiere decir que sean
iguales). Las estructuras puras son: POST-TEST y la manejada por contador.
 Impuras: Es cuando se descarta un elemento (el que no cumple la condición y hace salir del
algoritmo) PRE-TEST.
Definidas
Tipo de secuencias por cantidad:
Indefinidas

Secuencias

Diremos que un conjunto de objetos esta organizado en forma de secuencia si es posible definir las
nociones siguientes: conjunto de caracteres con continuidad física con las siguientes caracteristicas:
 Primer objeto de la secuencia: Un objeto del conjunto, llamado primero se distingue de los demás.
El acceso a este elemento permite el acceso posterior a todos los demás elementos de la fila. Es la puerta
de entrada a los demás elementos.
 Relación sucesora entre los objetos: Todo objetos de la secuencia (salvo el ultimo) precede a uno
de los demás objetos (su sucesor). Esta relación entre dos objetos de la secuencia permite construir el
acceso a todos los elementos de la misma, empezando por el primer elemento, para el cual se dispone de
un acceso especial, el paso al siguiente permite enumerar a todos los elementos de la secuencia una vez y
solo una vez, esta enumeración termina con el acceso al elemento final. En la relación sucesora se
establece el primer elemento y a partir de él se pueden encontrar sus sucesores.
 Caracterización del fin de secuencia o condición de fin: Debe estar definido un indicador de fin de
secuencia: caracteriza el elemento final, en particular, permite detener la enumeración de la secuencia por
observación de la característica del último elemento. Cuando una secuencia es finita, existe último
elemento, por lo que la condición de fin es automática; mientras que cuando una secuencia es infinita se
utiliza una marca de fin, la cual es un elemento extraño que no pertenece a la secuencia que se utilizará.
 Finitud: La finitud de una secuencia puede ser conocida o no. Puede estar determinada por la
cantidad de elementos o por una marca de fin. Todas las secuencias deben ser finitas, por los que deben
estar acotadas por una condición de fin, para asó evitar entrar en un bucle infinito.
 Secuencia Pura: Cumple con todas las condiciones de secuencia y tiene último elemento. Utiliza
estructuras puras y se trata el último elemento. Para el manejo de este tipo de secuencia se utiliza la
estructura POST-TEST cuya sintaxis es un repetir. Se la utiliza para que trate el último elemento. Con este
tipo de estructuras se realizan n acciones como máximo y 1 como mínimo.
 Secuencia Impura: Cuando la condición de fin es un elemento extraño, es decir que se tiene una
marca de fin se esta en presencia de una secuencia impura. La estructura utilizada para este tipo de
secuencias es PRE-TEST. El último elemento no es tratado, es por ello que se utiliza como estructura de
control un PRE-TEST cuya sintaxis es un mientras. Con este tipo de estructuras se realizan n-1 acciones
como máximo y 0 como mínimo.

Características Complementarias de una secuencia:


Orden: Existe un orden cuando la relación sucesora es estricta entre el 1er elemento y el que sigue.
El orden nos permite determinar el tipo de ciclo a utilizar. La relación sucesora no es necesario que sea
univoca, basta que nos diga a donde pertenece el próximo elemento.
Completitud: Es una característica que no se puede suponer, tiene que estar definida en el planteo del
problema. (Lo mismo para el orden)
Estas características antes mencionadas modifican la estructura del algoritmo.

Ejemplos
1) Secuencia de 100 Nº naturales (mostrarlos)
Para i:=0 hasta 99 hacer
INGRESAR(N)
ESC(N)
Fin Para
2) Secuencia de 100 Nº naturales ordenados completos a partir del 0
Para x:=0 hasta 99 hacer
ESC(x)
Fin Para

Acceso Secuencial: Es el acceso secuencial a los elementos de una secuencia. Se accede por el primer
elemento y para alcanzar el i-ésimo elemento se deberá recorrer los (i-1)- esimos elementos anteriores.

Máquina de Caracteres: La misma es una procesadora de cinta de caracteres.


Se dispone de una caja que vista desde el exterior, presenta:

Ventana 4 Secuencia

Arrancar Avanzar

 Una ventana
 Dos botones indicativos: ARRANCAR (ARR: Inicio de la cinta) y AVANZAR (AVZ: Carácter
siguiente)

En todo momento el único carácter de la cinta al cual la maquina proporciona acceso es el que permanece
ante la ventana. Al mismo lo llamaremos carácter en curso.
AVZ: Hace desplegar la cinta por la ventana en una casilla, siempre en el mismo sentido, y proporciona
acceso al siguiente carácter de la cinta.
ARRANCAR Y AVANZAR: Estas dos acciones seguidas permiten acceder al primer elemento de la secuencia.
El proceso mas común que se puede realizar con una secuencia es el de enumeración, como así también
búsquedas de uno o varios elementos.

Enumeración de secuencias, búsqueda asociativa: Toda iteración puede ser interpretada como la
enumeración de alguna secuencia. En tal enumeración se accede a cada uno de los objetos de la secuencia
una vez y solo una, y para cada uno se ellos se aplica un tratamiento único que depende básicamente del
objeto.
 Tratamiento En Curso: Es el tratamiento correspondiente de cada uno de los objetos distintos del
último de la secuencia.
 Tratamiento Final: Es el tratamiento que corresponde al elemento final de la secuencia.
Un tratamiento de descrito bajo la forma de una acción compuesta. Ciertas enumeraciones son
particulares por el hecho de que el tratamiento en curso es vacío y de que no se enumera toda la
secuencia: la enumeración se detiene en el primer elemento de la secuencia que posee una característica
dada. A este tipo de enumeración lo designamos con el término de BÚSQUEDA ASOCIATIVA (del 1er
elemento de la secuencia que cumple con una propiedad dada). Se la designa asociativa porque lo que
caracteriza al elemento buscado es una propiedad y no el lugar donde se encuentra.

Esquema 1: tratamiento final <> tratamiento en curso


ENUMERACION
Esquema 2: tratamiento final = tratamiento en curso
SECUENCIA

Interna: Cambia el tratar elemento


BUSQUEDA
Externa o Extraída: Comparte prioridad en condición de fin =
búsqueda asociativa. Una vez encontrado el
elemento no hace falta seguir buscando.

Esquemas de enumeración de Secuencias:


El acceso a los elementos de la secuencia: Puede ser descrito en término de las siguientes acciones:
”OBTENER PRIMER ELEMENTO”; proporciona el acceso al primer elemento de la secuencia.
”OBTENER ELEMENTO SIGUIENTE”; proporciona el acceso al siguiente elemento de uno dado.
Suponemos además que la obtención del primer elemento puede expresarse en termino de dos acciones
mas elementales: “INICIAR ADQUISICION” y “OBTENER ELEMENTO SIGUIENTE”.

Acción OBTENER PRIMER ELEMENTO es: Acción OBTENER PRIMER ELTO es:
Inicializar adquisición; ARRANCAR (S);
Obtener elemento siguiente; AVANZAR (S, V);
Fin Acción. Fin Acción.
 El tratamiento de los elementos de la
secuencia viene descrito en termino de las acciones siguientes:
“TRATAR ELEMENTO”: que describe el tratamiento en curso.
“TRATAR ELEMENTO FINAL”: que describe el tratamiento del elemento final.
“INICIALIZAR TRATAMIENTO”: que describe el conjunto de las operaciones que deben ejecutarse antes de
que empiece la enumeración, para que el encadenamiento de los tratamientos (en curso y final)
proporcionen el resultado esperado.
ESQUEMA 1: El tratamiento final es lógicamente distinto del tratamiento en curso.
Su principio es describir mediante una iteración lo que es común a todos los elementos distintos del
ultimo, la iteración se detiene cuando se reconoce el ultimo elemento, y ello antes de ser tratado, lo cual
se realiza aparte.

Acción ESQUEMA1 es:


Inicializar tratamiento;
Inicializar Adquisición;
Obtener elemento siguiente;
Mientras ELEMENTO NO FINAL hacer
Tratar elemento;
Obtener elemento siguiente;
Fin Mientras
Tratar elemento final;
Fin Acción.

Inicializar tratamiento puede ser por ejemplo: poner los contadores y acumuladores a cero.
Inicializar Adquisición: ARRANCAR (S)
Obtener elemento siguiente: AVANZAR (S, V)

ESQUEMA 2: El tratamiento final es idéntico al tratamiento en curso. Su principio es agrupar el tratamiento


de todos los elementos, comprendido el último, dentro de la enumeración. La condición de fin es el
encuentro del último elemento, pero la observación de la condición se realiza después de tratar el
elemento.

Acción ESQUEMA2 es:


Inicializar tratamiento;
Inicializar Adquisición;
Repetir
Obtener elemento siguiente;
Tratar elemento;
Hasta que ELEMENTO FINAL
Fin Acción

ESQUEMA DE BUSQUEDA: Se desea pasar de un elemento al siguiente hasta que se produzca una de las
dos condiciones:
 Se ha encontrado el elemento que tiene
la propiedad buscada (la búsqueda ha tenido éxito).
 Se ha encontrado el elemento final
antes de haber encontrado el elemento buscado. En tal caso puede suceder que el elemento buscado sea
el final, Si no es así la búsqueda no ha tenido éxito.

Para expresar por medio de un esquema tomamos las siguientes convenciones:


“ELEMENTO HALLADO”: significa que el elemento en curso tiene la propiedad buscada.
“TRATAR ELEMETO HALLADO”: describe el conjunto de operaciones que deben ser ejecutadas una vez
encontrado el elemento.
“TRATAR AUSENCIA”: describe el conjunto de operaciones que deben ejecutarse en caso de que la
búsqueda no tenga éxito.

Acción BÚSQUEDA _ ASOCIATIVA es:


Inicializar tratamiento;
Inicializar Adquisición;
Mientras ELEMENTO NO HALLADO ^ ELEMENTO NO FINAL hacer
Obtener elemento siguiente;
Fin Mientras
Si ELEMENTO HALLADO entonces
Tratar elemento hallado;
Sino
Tratar ausencia;
Fin Si

Subsecuencias: Son secuencias de menor nivel que pertenecen a una secuencia mayor. Se pueden
presentar dos maneras: Una en forma encadenada y otra en forma anidada o jerarquizada.
Palabra: Secuencia no blanca que termina en un blanco. Es una secuencia de caracteres no blancos. Es una
secuencia impura.
Palabra con contenido: conjunto de caracteres distintos de blanco (<> “ ” ^ <> “.”).
Es una secuencia impura y la marca de fin es “ ” o “.”.
Palabra vacía: Conjunto de caracteres iguales a blanco = “ ”. Secuencia impura.
Oración: Secuencia de palabras.
AVANZAR (S, V);
Mientras V <> “ ” hacer
Mientras V = “ ” ^ V <> “.” hacer
AVANZAR (S, V);
Fin Mientras
Mientras V = “ ” hacer
AVANZAR (S, V);
Fin Mientras
Fin Mientras

Secuencias encadenadas: Existe un elemento que sirve de puente


Contador/Acumulador (Etapas)
 Puesta inicial - fuera del ciclo
 Incremento/Decremento – dentro del ciclo
 Emisión – fuera del ciclo

INCLUYENTE: Mientras NFS (S1) v NFS (S2) hacer


----------
----------
Fin Mientras
Ciclos Combinados
EXCLUYENTE: Mientras NFS (S1) ^ NFS (S2) hacer
---------
---------
Fin Mientras
Mientras NFS (S1) hacer
---------
---------
Fin Mientras
Mientras NFS (S1) hacer
---------
---------
Fin Mientras
Registros

Campo: Es una agrupación de datos simples con un objetivo (aportar mayor información). Cada campo
tiene que recibir un nombre y tendrá su tipo y tamaño propio.

Campo Continente: Es un campo formado por contenido. El mismo está compuesto por campos más
pequeños en su interior.

Campo Contenido: Requiere que se le de tamaño y tipo. Depende de un campo mayor.

Registro: Es una agrupación de campos continentes y contenido. Es una estructura compuesta de un


numero fijo de componentes llamados campos, cada uno de los ellos viene definido por su nombre y su
tipo (no necesariamente tienen que ser todos del mismo tipo). También podemos decir que es un
agrupamiento de datos de distinto formato y contenido.
La menor unidad de información de un registro se denomina campo.
Lo llamamos registro porque contiene información referida a una entidad. Es una estructura estática y
compleja que se almacena en memoria interna.

Representación de un Registro:
Lineal, Gráfica o Esquemática: Consiste en la continuidad de celdas, donde cada dato tiene su rectángulo.
La continuidad determina la relación lógica que existe entre los campos. Entre campos de contenidos
distintos existen separaciones.
FECHA
DIA MES AÑO

Jerárquica o Arbórea: Es puramente gráfica, se utiliza en diseños globales y viene por traslado de la
representación de los sistemas. Trabaja con nodos de información. Arbórea = modal.

Nodos: Son rectángulos que representan una entidad física - lógica.


Raíz: Representa una entidad mayor que posee nodos dependientes.
Independientes: Son falsos nodos raíces. Son entidades mayores que no poseen dependencia
Elementales: Son nodos dependientes de otros que ya es imposible subdividirlos o no se justifica su
subordinación.
Subordinados: Son aquellos que dependen de otros y pueden no tener subdivisión o descendencia. Un
nodo elemental es subordinado.
Los nodos están relacionados por líneas de flujo. La diferencia entre cada nodo esta dado por su aplicación.
Cuando su tamaño está definido totalmente en
el ambiente ya no puede ser alterado de
ninguna forma.
Variable: Es aquel que posee un tamaño
incierto.
Por Enumeración: Se tienen varios formatos de
registros. En el archivo se definen varios
registros de longitud fija. Es la aglutinación de
varios registros.
Por Ocurrencia: Los registros tienen una
longitud mínima y máxima. El tamaño varío
entre dos valores. Presenta un solo formato y se
tiene incluido un arreglo. Dentro del mismo se tiene una parte COMUN que es igual a todos los registros.
Variable es el arreglo.
Nexo: (es una variable) es la que une al parte común con la variable. Generalmente es un contador.

COMUN NEXO VARIABLE

MATERIA
LEGAJO APYNOM DOMICILIO CANT MATERIA 1
43
COD FECHA NOTA
COM

UN NEXO VARIABLE = ARREGLO

Restricciones
Recorrido: Creación:
Si cant > 0 entonces Si cant < 43 entonces
Para x:=1 hasta cant hacer cant:= cant +1
------ MAT (cant):= -----
Fin Para Fin Si
Fin Si

Cuando no se puede seguir bajando, la lectura se realiza de izquierda a derecha. Una estructura lineal es la
representación comprimida de una jerarquía y una representación jerárquica es la representación
expandida de una lineal. Los únicos nodos a los cuales se le indica tamaño y topología son los nodos
elementales.

Por nivel o literario: Es la representación jerárquica de los datos donde cada nodo o cada elemento ocupa
un reglon de escritura y las relaciones de dependencia o subordinación se notan por el uso de sangría.
ALUMNO = Registro
Legajo: N (6)
DATOS
APYNOM
Apellido: AN (20)
Nombre: AN (20)
DATOS_NAC
FECHA
Dia: N (2)
Mes: N (2)
Año: N (4)
Lugar: AN (30)
Fin Registro

Selector de campo: Para poder acceder a los componentes de una variable registro, se utiliza una
expresión denominada selector de campo. Esta expresión esta formada por el nombre de la variable
registro y el nombre del campo al cual se desea acceder, separado por un punto “.”. Por ejemplo
REG.CAMPO, donde REG representa una variable registro y CAMPO es el nombre del campo al cual se
quiere acceder.
La componente accedida (de un registro) por el selector de campo puede ser tratada igual que cualquier
otra variable del mismo tipo.
Esquema general para el tratamiento de registros:
Acción REGISTRO es:
Ambiente:
REG = Registro
Campo1: tipo 1
Campo2: tipo 2
.
CampoN: tipo n
Fin Registro
ARCH: Archivo secuencial de REG
REG_ARCH: REG
Algoritmo
ABRIR (ARCH)
LEER (ARCH, REG_ARCH)
Mientras NFDA (ARCH) hacer
Con REG_ARCH hacer
<TRATO>
Fin Con
LEER (ARCH, REG_ARCH)
Fin Mientras
<EMITIR>
<CERRAR ARCHIVOS>
Fin Acción.

Archivos o Ficheros

Es una colección de datos que se encuentra almacenada en una memoria externa permanente.
La estructura del fichero se caracteriza porque su cardinalidad es infinita. Por esta razón no hace falta dar
la longitud del fichero. Pero su cardinalidad es potencialmente infinita ya que está condicionada a la
capacidad de la memoria externa.
Un archivo es una estructura de datos que consta de una secuencia de componentes que son todos del
mismo tipo.
A todo archivo hay que darle un nombre y un tipo.

Definición del Ambiente

ALUMNO = Registro
Legajo: N (6)
ApyNom: AN (30)
Domicilio: AN (30)
Fin Registro
ALU: Archivo secuencial de ALUMNO
REG_ALU: ALUMNO

Verbos para el manejo de archivos: Como es una aplicación de secuencia se puede trazar un paralelismo
entre ambos.

ABRIR_E / ABRIR_S (ALU)


LEER (ALU, REG_ALU)
GRABAR / ESCRIBIR (ALU, REG_ALU)
CERRAR (ALU)
Organización: Hace referencia a como se almacenarán los datos. La organización es permanente, ya que
una vez definida no se la puede alterar. Es la principal característica de un archivo.

Secuencial

Organización
Relativa
Directa

Indexada

Secuencial: Implica continuidad fisica entre los regitros, que es inamovible. En los archivos
secuenciales se graba registro por registro, en el mismo orden en el que ingresan (es decir uno a
continuación del otro).
Para acceder a un registro en particular, ya sea para leer o grabar, ay que pasar por todos los registros que
se encuentran delante del mismo.
Si un archivo secuencia es abierto para la lectura no se lo puede utilizar para escribir y viceversa. Una vez
almacenado, el archivo es inalterable.
Se lo utiliza en determinados momentos y se debe guardar en un disco nuevo ya que no puede evitar
sectores defectuosos.
Para el proceso de actualización se deberá abrir de lectura el archivo original, introducir la novedad y
guardad en un segundo archivo que fue abierto para escritura.

Organización Directa Relativa: Antes de empezar a trabajar se debe definir su tamaño, quedando
asi totalmente reservado su espacio. La desventaja es que se debe predecir el espacio.
Los registros se graban ordenados por una clave (campo) determinado. El programador debe ordenar
primero el archivo y luego grabarlo. Por más que no exista un registro para guardar en una clave
determinada, ésta igualmente deber ser guardada para mantener el orden que permite el acceso directo.
Se puede acceder en forma directa o secuencial.
El muy seguro por ser inviolable

Organización Directa Indexada: El archivo tiene dos áreas: un área de datos, con los datos
propiamente dichos, y un área de índices.
Se crea una clave de índices, que es una tabla, donde se anotan los lugares libres y la ubicación de los
registros. Los espacios se utilizan de acuerdo a este índice y tienen la libertad de crecer.
Para buscar un registro en primer lugar se accede al área de índices, y se busca el índice correspondiente al
registro buscado, luego se accede al lugar indicado y se busca dentro de ese bloque.
Para mejorar la velocidad de lectura de las claves de los registros que se encuentran en ese índice, se lo
ordena de una forma determinada, aunque no se modifique la ubicación física de los registros. La
desventaja radica en que a medida que se modifica el archivo, el índice se desordena y debe ser reindexado.
Se utiliza el espacio establecido más el espacio que utiliza el índice.

Accesos: Es la forma en que se van a recuperar (leer) los registros.

Secuencial: Para acceder a un determinado registro se debe pasar primero por todos los anteriores.
Cabe aclarar que todo archivo independientemente de su organización puede ser accedido de forma
secuencial.

Al Azar: El acceso directo solo es posible si el archivo tiene una organización directa,
es decir, que deberá poseer un índice por medio del cual se accederá directamente al
registro mediante su clave.
Directa:

Dinámica o Mixta: Primero se accede al azar y luego de forma secuencial (no al


reves), para esto se debe conocer la clave del 1er elemento que busco y a partir de
allí realizar una búsqueda secuencial.

Procesos con Archivos:

UNITARIOS GENERICOS
O
INDIVIDUALES CORTE DE CONTROL

PROCESOS CON
ARCHIVOS
ACTUALIZACION

MULTIPLES
O DIRECTA
COMPUESTOS MEZCLA O APAREO
INDIRECTA

INCLUYENTE
CICLOS
EXCLUYENTE

Individual: Es aquel en el cual interviene un solo archivo de entrada, pudiendo haber o no uno de
salida. La característica fundamental es que el control de finalización del proceso va a estar dado por el fin
del archivo de entrada. “hay un archivo que controla el fin del proceso”.

 GENERICOS: Algunos de estos procesos son, crear, leer registros, escribir registros,
búsqueda, partición.

Carga o Generación: Es el proceso que se


encarga de la creación y carga de los archivos,
en este proceso los que mas tiempo lleva es verificar la consistencia
de la información. Congruencia y consistencia
(interna y externa).
Consistencia: Leer un dato desde un archivo o
pantalla y verificar que cumpla las características de la salida. Dicho
proceso se debe realizar con la carga de datos.
Congruencia: Comparar los datos de un mismo registro y ver que se cumple (ej.:
comparación de fechas). Comparar que un valor este dentro de un rango determinado.

 EMISION DE LISTADO O PADRON: Siempre existe un archivo de entrada, y la salida


siempre es impresa. Los controles se realizan con contadores. Para que
los contadores sean eficientes el archivo debe estar ordenado. Se toma
cada registro se lo lee y se lo imprime. Emisión de volumen muy
importante de papel. El archivo de entrada debe ser consistente y puede
ser o no congruente. Es imprescindible que el archivo se encuentre
ordenado.

CONTE DE
para emitir totalizadores parciales o cualquier otra acción del mismo tipo.
Normalmente implica un padrón.

Existen
tantos
niveles de
corte como
campos
tenga la
clave
compleja.
Los cortes se
producen
por cambio
de contenido
en los
distintos
niveles de la
clave
compleja.
Para realizar un corte de control es necesario que el archivo este ordenado de
acuerdo a una clave compleja, es decir una clave formada por varios campos, entre
los cuales existe una relación jerárquica (relación de inclusión).
Para cada nivel de corte, existe una variable contador o acumulador, que es la que se
emite cuando se efectúa el corte de ese nivel. Los contadores o acumuladores tienen
dos momentos de inicializacion:
 Al comienzo del algoritmo (comun para todos)
 En forma individual cuando se produce el corte correspondiente.
En todo procedimiento de corte control, se produce una comparación entre el campo
actual y un campo anterior (del mismo tipo, pero con distinto contenido), por eso
debe coexistir la información del campo clave actual y del campo clave anterior, esta
ultima es una variable auxiliar, que debe recibir el contenido de la clave, para
guardarlo como anterior.
En el proceso en si (lo que esta dentro del mientras) antes de tratar el registro se
pregunta si se ha producido un corte. Esto se efectua mediante un anidamiento de
preguntas (si anidados) , desde el nivel de corte mayor, hacia el nivel de corte menor.
En caso de una respuesta afirmativa, se produce el corte de nivel correspondiente, lo
que obliga a efectuar el proceso de emision de los totales de los niveles de corte
menor, hacia el que produjo el corte.

Acción CORTE CONTROL es:


ALGORITMO
Abrir_E (Arch);
Leer (Arch, Reg_Arch);
INICIALIZAR_ACUMULADORES;
RESGUARDAR_CLAVES;
Mientras NFDA (Arch) hacer
VER_CORTE;
TRATAR_REGISTRO;
Leer (Arch, Reg_Arch);
Fin Mientras
CORTE_N;
EMITIR_TOTALES;
Cerrar (Arch);
Fin Acción.

Subacción VER_CORTE es:


Si Resg_clave_n <> Reg_Arch.clave entonces
CORTE_N;
Sino
Si Resg_clave_n-1 <> Reg_Arch.clave entonces
CORTE_N-1;
Sino
Si Resg_clave_n-2 <> Reg_Arch.clave entonces
CORTE_N-2;
Fin Si
Fin Si
Fin Si
Fin Subaccion.

Subaccion CORTE_N es:


CORTE_N-1;
Emitir_Totales_CorteN;
Acumular_Totales;
Inicializar_Totales_CorteN;
Resguardar_Clave_CorteN;
Fin Subacción.
 ESTADISTICAS: Es el único proceso que no requiere ningún requisito para
el archivo de entrada. Busca emitir una tabla de valores, la emisión es pequeña, pero se tiene
un fuerte proceso de cálculo. La emisión se realiza al final del proceso. Se aconseja agregar
un indicador que alerte al usuario del estado del proceso. La tabla de valores puede verse
como una matriz.

Múltiple: Es aquel en el cual existe por lo menos de archivos de entrada, pudiendo existir varios
archivos de salida. La finalización del proceso se maneja con la técnica de apareo. El apareo de archivos
requiere que aunque los archivos de entrada tengan estructuras distintas deben tener en su estructura un
elemento común, conocido como clave de apareo. La clave debe ser única (unicidad de clave).
Técnica de Apareo: Existe una clave o campo que sirve como conector entre los archivos. Si la clave
se encuentra al principio de ambos archivos se dice que la clave es primaria, pero si se encuentra en otra
posición la clave es secundaria.
Se utilizan ciclos combinados:
 Incluyentes ^
 Excluyentes v

Si existe un archivo mas importante, se lo puede utilizar para formar un ciclo falso – unitario.
En la mayoría de los casos se trata de evitar los ciclos combinados.

 MEZCLA O APAREO: Es la reunión de dos o más archivos en uno solo, intercalando sus
registros de acuerdo a un criterio determinado. Los archivos de entrada deben estar
ordenados por la clave de apareo.
Tipo de Apareo

DIRECTA (homogénea): Todos los archivos intervinientes tienen el mismo


formato del registro y el número de registros del archivo de salida es la
sumatoria de los registros de todos los archivos de entrada. En casi todos los
lenguajes existe una función MERGE que realiza la mezcla, solo se deben
especificar los archivos de entrada y el tipo de salida que se desea.

INDIRECTA (heterogénea): Los archivos de entrada tienen formatos diferentes


y se debe definir el formato del archivo de salida, pudiendo ser
completamente diferente al formato de los archivos de entrada.
Si en la mezcla se determina un archivo de mayor importancia entonces el
proceso se puede realizar como un proceso unitario en lugar de un o
combinado.
La cantidad de registros del archivo de salida es indeterminada ya que no se
puede establecer una relación numérica en función de sus elementos.
 ACTUALIZACION: Significa incorporar, modificar o eliminar información de un archivo
mayor (o maestro) y se utilizan como minimo dos archivos de entrada y uno de salida.

Maestro
Entrada
Movimiento
Archivos
Nuevo Maestro
Salida o
Maestro Actualizado
ACTUALIZACION
Individual (parcial o Particular)
Tipos de Actualización
Combinada (o General)
Normalmente no existen más de dos archivos de entrada (casi siempre secuenciales).
 MAESTRO: Es el archivo de estructura mayor y es el que va a sufrir actualización. Por
su periodicidad puede ser:
Maestro Histórico: Contiene información desde la implantación del sistema en
la organización o desde el nacimiento de la entidad. Es muy difícil de
mantener ya que crece día a día.
Maestro Diario o Común: Contiene parte de la información del maestro
histórico. Es la información que la entidad necesita rutinariamente.

 MOVIMIENTOS: Es el archivo de estructura menor o igual al de el maestro, y debe


contener como mínimo el campo clave de apareo, para poder realizar la
actualización.

Altas: Incorporación de un nuevo registro al archivo maestro mantenientdo la


unicidad de claves, en general.

Modificación: Corresponde a la existencia de un egistro del maestro en el cual se


desea modificar parte o todo su tipo contenido, exceptuando su campo clave
MOVIMIENTOS
Bajas: Corresponde a la eliminación física o lógica de un registro del maestro.
 Baja Física: Consiste en eliminar totalmente contenido y clave del registro del
archivo maestro.
 Baja Lógica: Consiste en señalar o marcar el registro como eliminado pero sin
eliminarlo del maestro. La baja lógica requiere un código de estado que es un
campo que se le agrega al registro.

Tipos de Actualización: Modificaciones

INDIVIDUAL (parcial o particular): un archivo de movimientos individual es aquel que contiene


movimientos de un solo tipo.
GENERAL O COMBINADA: un archivo de movimientos general contiene registros de los tres tipos de
movimientos: Altas, Bajas y.

Actualización Secuencial:
Proceso Diferido o Batch: Es batch porque los movimientos
están en un archivo. Los errores se corrigen cada cierto
periodo de tiempo. Se corrigen normalmente antes de la
próxima actualización.
Es un proceso seguro ya que puede ser cuantificado; se puede
decir si fue bueno o malo y donde se produjo el error.
El maestro actualizado es correcto si:

#Reg. MAE_ACTUAL = #Reg. MAESTRO + #ALTAS - #BAJAS

#ERRORES = #ALTASI + #BAJASI + #MODIFICACIONESI


#Reg. MOVIMIENTO = #ALTASCI + #BAJAS CI +
#MODIFICACIONES CI

Esquema General para la Actualización Unitaria (1 registro del maestro --- 1 registro de mov)
Acción ACTUALIZACIÓN _ UNITARIA es:
Ambiente
Reg1 = Registro
Clave: tipo
Campo1: tipo
Campo2: tipo
Fin Reg.

Reg2 = Registro
Clave: tipo
Cod_Mov: {“A”,”B”,”M”}
Campo1: tipo
Campo2: tipo
Fin Reg.
Mae: Archivo secuencial de Reg1.
Mov: Archivo secuencial de Reg2
Sal: Archivo secuencial de Reg1.
Reg_sal: Reg1
Reg_mae: Reg1
Reg_mov: Reg2

Algoritmo
<ABRIR ARCHIVOS>
LEER_MAE;
LEER_MOV;
Mientras Reg_mae.clave <> HV ^ Reg_mov.clave <> HV hacer
Si Reg_mae.clave < Reg_mov.clave entonces /* Maestro sin movimiento
Reg_sal:= Reg_mae;
ESCRIBIR (Sal, Reg_sal);
LEER_MAE

Sino
Si Reg_mae.clave = Reg_mov.clave entonces /* Maestro con movimiento
<PROCESOS _ IGUALES>
Sino
<PROCESOS _ DISTINTOS>
Fin Si
Fin Si
Fin Mientras.
<CERRAR ARCHIVOS>
Fin Acción.

Subacción LEER_MAE es:


Leer (Mae, Reg_mae);
Si FDA (Mae) entonces
Reg_mae.clave:= HV;
Fin Si
Fin Subacción.

Subacción LEER_MOV es:


Leer (Mov, Reg_mov);
Si FDA (Mov) entonces
Reg_mov.clave:= HV;
Fin Si
Fin Subacción.

Subacción PROCESOS _ IGUALES es:


Si Reg_mov.Cod_Mov = “A” entonces
Escribir (“ERROR ALTA EXISTENTE”);
Sino
Si Reg_mov.Cod_Mov = “B” entonces
<PROCESO _ MODIF>
Sino
/* Baja Lógica */
Reg_mae.marca_baja:= MARCA;
Fin Si
Fin Si
Reg_sal:= Reg_mae;
ESCRIBIR (Sal, Reg_sal);
LEER_MAE;
LEER_MOV;
Fin Subacción.

Subacción PROCESOS _ MODIF es:


Si Reg_mov.Campo1 <> “” entonces
Reg_mae.Campo1:= Reg_mov.Campo1;
Fin Si
Si Reg_mov.Campo2 <> “” entonces
Reg_mae.Campo2:= Reg_mov.Campo2;
Fin Si

Si Reg_mov.CampoN <> “” entonces


Reg_mae.CampoN:= Reg_mov.CampoN;
Fin Si
Fin Subacción.

Subacción PROCESOS _ DISTINTOS es:


Si Reg_mov.Cod_Mov = “M” entonces
Escribir (“ERROR MODIFICACION INEXISTENTE”);
Sino
Si Reg_mov.Cod_Mov = “B” entonces
Escribir (“ERROR MODIFICACION INEXISTENTE”);
Sino
Reg_sal.Campo1:= Reg_mov.Campo1;
Reg_sal.Campo2:= Reg_mov.Campo2;

Reg_sal.CampoN:= Reg_mov.CampoN;
ESCRIBIR (Sal, Reg_sal);
Fin Si
Fin Si
LEER_MOV;
Fin Subacción.

Esquema General para la Actualización por Lote (1 reg. del maestro --- 1 o mas reg. de mov)

Acción ACTUALIZACIÓN _ POR _ LOTE es:


Ambiente
Reg1 = Registro
Clave: tipo
Campo1: tipo
Campo2: tipo
Fin Reg.
Reg2 = Registro
Clave: tipo
Cod_Mov: {“A”,”B”,”M”}
Campo1: tipo
Campo2: tipo
Fin Reg.
Mae: Archivo secuencial de Reg1.
Mov: Archivo secuencial de Reg2
Sal: Archivo secuencial de Reg1.
Reg_sal, Reg_mae, Aux: Reg1
Reg_mov: Reg2

Algoritmo
<ABRIR ARCHIVOS>
LEER_MAE;
LEER_MOV;
Mientras Reg_mae.clave <> HV ^ Reg_mov.clave <> HV hacer
Si Reg_mae.clave < Reg_mov.clave entonces /* Maestro sin movimiento
Reg_sal:= Reg_mae;
ESCRIBIR (Sal, Reg_sal);
LEER_MAE

Sino
Si Reg_mae.clave = Reg_mov.clave entonces /* Maestro con mov.
Aux:= Reg_mae;
Mientras Aux.clave = Reg_mov.clave entonces
PROCESOS _ IGUALES>
LEER_MOV;
Fin Mientras
Reg_sal:= Aux;
ESCRIBIR (Sal, Reg_sal);
LEER_MAE
Sino
Aux.clave:= Reg_mov.clave;
Aux.Campo1:= Reg_mov.Campo1;
Aux.Campo2:= Reg_mov.Campo2;

Aux.CampoN:= Reg_mov.CmpoN;
Aux.marca_baja:= “”;
LEER_MOV;
Mientras Aux.clave = Reg_mov.clave entonces
PROCESOS _ IGUALES>
LEER_MOV;
Fin Mientras
Reg_sal:= Aux;
ESCRIBIR (Sal, Reg_sal);
LEER_MAE
Fin Si
Fin Si
Fin Mientras.
<CERRAR ARCHIVOS>
Fin Acción.

Subacción LEER_MAE es:


Leer (Mae, Reg_mae);
Si FDA (Mae) entonces
Reg_mae.clave:= HV;
Fin Si
Fin Subacción.

Subacción LEER_MOV es:


Leer (Mov, Reg_mov);
Si FDA (Mov) entonces
Reg_mov.clave:= HV;
Fin Si
Fin Subacción.

Subacción PROCESOS _ IGUALES es:


Si Reg_mov.Cod_Mov = “A” entonces
Escribir (“ERROR ALTA EXISTENTE”);
Sino
Si Reg_mov.Cod_Mov = “B” entonces
<PROCESO _ MODIF>
Sino
/* Baja Lógica */
Reg_mae.marca_baja:= MARCA;
Fin Si
Fin Si
Fin Subacción.

Subacción PROCESOS _ MODIF es:


Si Reg_mov.Campo1 <> “” entonces
Reg_mae.Campo1:= Reg_mov.Campo1;
Fin Si
Si Reg_mov.Campo2 <> “” entonces
Reg_mae.Campo2:= Reg_mov.Campo2;
Fin Si

Si Reg_mov.CampoN <> “” entonces


Reg_mae.CampoN:= Reg_mov.CampoN;
Fin Si
Fin Subacción.
Actualización Indexada: Existe un archivo (el maestro) que debe ser indexado. Se denomina indexado ya
que es un archivo que puede ser leído y sobrescrito, además se caracteriza porque permite acceder a
cualquier registro en forma directa a
través de una tabla de índices. La
misma consta de dos entradas, una de
clave y otra de ubicación o lugar física
del registro, dicha tabla se almacena
en memoria y esta siempre ordenada
en forma secuencial.
Se debe indexar solo por la clave o
campo clave ya que es muy costoso
mantener un archivo indexado debido
a que cada vez que se da de alta un
registro se actualiza la tabla de índices.
La actualización se realiza mediante un proceso Batch. El archivo de movimientos es el que controla el fin
de la actualización (ciclo unitario). Se lee únicamente el archivo de movimientos mientras que al maestro
se lo abre de entrada /salida.

Acción ACTUALIZACIÓN _ INDEXADA es:


Ambiente
Reg1 = Registro
Clave: tipo
Campo1: tipo
Campo2: tipo
Fin Reg.

Reg2 = Registro
Clave: tipo
Cod_Mov: {“A”,”B”,”M”}
Campo1: tipo
Campo2: tipo
Fin Reg.
Mae: Archivo de Reg1 indexado por clave.
Mov: Archivo secuencial de Reg2
Reg_mae: Reg1
Reg_mov: Reg2

Algoritmo
ABRIR E/S (Mae);
ABRIR E (Mov);
Leer (Mov, Reg_mov);
Mientras NFDA (Mov) hacer
Reg_mae.clave:= Reg_mov.clave;
Si EXISTE
Si Reg_mov.Cod_Mov = “A” entonces
Escribir (“ERROR ALTA EXISTENTE”);

Sino
Si Reg_mov.Cod_Mov = “M” entonces
<PROCESO _ MODIF>
REESCRIBIR (Mae, Reg_Mae);
Sino
/* Baja Lógica */
Reg_mae.marca_baja:= MARCA;
REESCRIBIR (Mae, Reg_Mae);
Fin Si
Fin Si
Sino
Si Reg_mov.Cod_Mov = “M” entonces
Escribir (“ERROR MODIFICACION INEXISTENTE”);
Sino
Si Reg_mov.Cod_Mov = “B” entonces
Escribir (“ERROR MODIFICACION INEXISTENTE”);
Sino
Reg_mae.Campo1:= Reg_mov.Campo1;
Reg_mae.Campo2:= Reg_mov.Campo2;

Reg_mae.CampoN:= Reg_mov.CampoN;
ESCRIBIR (Mae, Reg_mael);
Fin Si
Fin Si
Fin Si
Leer (Mov, Reg_mov);
Fin Mientras.
<CERRAR ARCHIVOS>
Fin Acción.

Subacción PROCESOS _ MODIF es:


Si Reg_mov.Campo1 <> “” entonces
Reg_mae.Campo1:= Reg_mov.Campo1;
Fin Si
Si Reg_mov.Campo2 <> “” entonces
Reg_mae.Campo2:= Reg_mov.Campo2;
Fin Si

Si Reg_mov.CampoN <> “” entonces


Reg_mae.CampoN:= Reg_mov.CampoN;
Fin Si
Fin Subacción.

Actualización Interactiva IN-SITU (al


momento): Se cuenta con una
Terminal (PROCESO INTERACTIVO) ya
que no existe un archivo de
movimiento. Como es una Terminal,
aquí se encuentra un usuario
inteligente (tiene poder para decidir).
Quien corrige los errores es el usuario.
Este proceso termina cuando la
Terminal termina de funcionar.
Cuadro Comparativo

Archivos Secuenciales Archivos Indexados


Poseen acceso secuencial y para acceder al Poseen acceso secuencial y directo a cualquier
último elemento se debe acceder a todos los registro.
anteriores.
Son estructuras estáticas, que una vez creadas Son estructuras dinámicas que pueden crecer o
no se pueden ampliar. No hace falta dar su reducirse (no hace falta dar su longitud al
longitud. crearlos)
Los registros se almacenan secuencialmente en Los registros de estos archivos se almacenan en
memoria con adyacencia física. memoria con adyacencia lógica y no física.
Para insertar un registro hay que crear un
archivo nuevo

ARREGLOS

Es una estructura de datos en la que se almacena una colección de datos del mismo tipo.
Son datos estructurados internos estáticos.
Se caracteriza por:
 Llevan un NOMBRE único para todo el grupo.
 Almacenar los elementos del arreglo en posiciones continuas de memoria.
 Cada elemento del arreglo se identifica con un INDICE y se accede en forma directa (no secuencial)
 Cada valor o elemento del arreglo se llama COMPONENTE y las operaciones simples se aplican a
los procesos (instrucciones de asignación o de entrada/salida)
 La definición de la cantidad de componentes del arreglo esta dada por la LONGITUD.
 La cantidad de índices indica la dimensión del arreglo.

Un arreglo de una dimensión (vector o lista) es un tipo de dato estructurado de elementos finitos, tamaño
finito y elementos homogéneos.
Definición
nombre _ arreglo: Arreglo [tipo de índice] de tipo
nombre _ arreglo: Identificador valido
Tipo de índice: Puede ser del tipo ordinal: carácter o lógico, un tipo numerado o subrango. Existe un
elemento por cada valor del tipo índice.
tipo: Describe el tipo de cada elemento del vector. Todos los elementos de un vector son del mismo tipo.

Dimensión 1, Longitud 5

Uso del índice de un Arreglo


Cada referencia a un arreglo incluye el nombre y el índice encerrado con corchetes: el índice determina
que el elemento se procesa.

Operaciones con Arreglo (vectores o listas)


Los vectores no puede leer/escribir con una sola operación. La lectura/escritura de un arreglo de hace
elemento a elemento y para poder realizarlos se debe visualizar los componentes del mismo, a través de
estructuras repetitivas.

El arreglo es una herramienta auxiliar cuya estructura se almacena en memoria interna, por lo que es
volátil. No es una estructura básica. Presenta continuidad física y la repetición es establecida por medio de
un intervalo.
 Repetitiva: Se establece por medio de un intervalo. Definida como la secuencia. Los elementos
pueden ser simples datos, campos o archivos. Se debe definir cuantas veces se va a definir la
estructura. El nombre necesita de un valor posicional.
 Estática: Su tamaño se conoce a priori, ya que el mismo se establece en la definición.
 Memoria Interna: Se almacena en la memoria interna. Se lo debe preservar en la memoria para
almacenar la cantidad definida de datos.

Definición: 1 2 3 80
Dni Dni Dni ….. Dni

A: Arreglo [1...80] de N (8)

 Acceso Variable: Nombre (variable) Ej. A (i)

Para i:=1 hasta 80 hacer


Leer (NRO);
A (i):= NRO;
Fin Para

 Acceso Puntual: Nombre (valor posicional) Ej. A (1). Se debe escribir el nombre del arreglo y el valor
posicional.

Leer (NRO);
A (1):= NRO;
Leer (NRO);
A (2:= NRO;
.
.
Leer (NRO);
A (80)= NRO;

Arreglos Bidimensionales
Son arreglos de dos índices, pueden ser ordinales o de tipo subrango, se los conoce con el nombre de tabla
o matriz.
Los tipos de índices no necesitan ser subrango del mismo tipo.

La Dimensión 2 se conoce como un matriz.

Dimensión 2
Longitud 4 * 5 = 20

Declaración de Arreglos Bidimensionales


Ident: Arreglo [ind1, ind2] de tipo elemento
Ejemplo
Curso: Arreglo [A...D] [1...5] de N (8)

Arreglos Tridimensionales
Son arreglos de tres índices, pueden ser ordinales o de tipo subrango.
Los tipos de índices no necesitan ser subrango del mismo tipo.
La Dimensión 3 se conoce como un cubo

I Filas

........

s
na
u m
o l
JC
Procesos con Arreglos K Placas
Recorridos:
Total: Se utiliza una estructura manejada por contador para recorrer todo el arreglo.
 Lógico: Cuando el rango de movimiento es igual al rango de la definición. Es el recorrido lógico de la
matriz. Nos vamos posicionando desde el 1er elemento hasta el último. Se lo denomina recorrido
total ya que nos posicionamos en todos los elementos de un arreglo. Es el proceso más eficiente ya
que coinciden los rangos.

Para x:=“A” hasta “D” hacer


Para y: = 1 hasta 80 hacer
Curso (x, y):=0;
Fin Para
Fin Para

 Ilógicos: Es cuando se contradice el rango de la definición. En el mismo se dan más cálculos de


memoria que en el lógico. No es eficiente ya que el tiempo de ejecución es mayor.

Para y:=1 hasta 80 hacer


Para x:=“A” hasta “D” hacer
Curso (x, y):=0;
Fin Para
Fin Para
Parcial: Se accede a algunos datos, como mínimo dos.

Proceso de Carga o Inicialización

INICIALIZACION: Se hace un recorrido total asignando un primer valor a cada elemento.


Generalmente se usa para poner a cero las posiciones del arreglo con el objeto de utilizarlos como
acumuladores.

CARGA: Consiste en colocar contenidos en el arreglo, capturados desde el exterior. Son contenidos
variables que varían de uno a otro. Los mismos son capturados desde un archivo o desde el exterior.

Ordenamiento
Consiste en disponer de un conjunto (ESTRUCTURA) de datos en algun determinado orden con
respecto a uno de los campos de elementos del conjunto.
 ORDENACION INTERNA: Cuando estan en un arreglo.
 ORDENACION EXTERNA: Cuando estan en un archivo.

Una lista se dice que esta ordenada por la clave K, si la lista esta en orden ascendente o descendente en
relación a esta clave.
Dos criterios a tener en cuenta para determinar cual es el mejor algoritmo:
 Tiempo menor de ejecución en computadora
 Menor numero de instrucciones

Los tipos de ordenación son:


1. DIRECTOS: Lista pequeña, algoritmo sencillo (burbuja, selección, inserción)
2. INDIRECTOS: Lista grande (shell ordenación rápida, ordenación por mezcla)

METODOS DE ORDENAMIENTO
Directa
Inserción
Binaria
Simples,
Directos o Selección Directa
elementales
Directo o Burbuja
Intercambio Directo con (test de comp. Y cota)
Metodo de Sacudida

METODOS DE
ORDENACION

Inserción (con incrementos decrecientes Shell)


Indirectos
Avanzados o Selección (orden. Según un árbol o método de la criba
o del montículo heapsort)
Logarítmicos
Intercambio (orden. Por part. Met. Rápido Quicksort)

Ordenamiento por Burbuja: El algoritmo de intercambio directo se basa en el principio de comparar e


intercambiar pares de elemento adyacentes hasta que todos estén ordenados.
Se los conoce generalmente como método de la “burbuja” porque si se mira al arreglo como si estuviera
en posición vertical, en lugar de horizontal, los elementos se consideran burbujas en un depósito de agua,
con pesos acordes con sus claves.
En cada pasada una burbuja asciende hasta el nivel de peso que le corresponde.
El algoritmo de intercambio directo admite algunas mejoras:
 Puede ocurrir que a partir de una cierta pasada esta no tenga ningún efecto sobre el orden de los
elementos por estar estos ya ordenados. La mejora entonces, consiste en controlar se han
producido intercambios en una pasada. Una última pasada sin intercambios es necesaria para que
el algoritmo termine; entonces este es el caso de intercambio directo con test de comprobación.
 Esta mejora puede aumentar, si se controla, además de si se ha producido un cambio, el índice
(posición) del último intercambio. Es claro que los elementos por debajo de este índice ya están
ordenados. En consecuencia las pasadas subsiguientes se harán hasta ese índice, por lo que este es
el caso de intercambio con test de comprobación y cota. También llamado “burbuja mejorado”.
 Otra mejora: puede ocurrir que haya una sola burbuja mal ubicada en el extremo derecho del
arreglo. Este elemento se situara en la posición correcta en una pasada. O puede suceder que haya
una sola burbuja mal ubicada en el extremo izquierdo del arreglo, este elemento se situara en su
posición correcta a un ritmo de una posición por pasada. Esto sugiere una tercera mejora: la
alternancia en la dirección de dos pasadas. Este es el caso del método de la sacudida. Pero todas
estas mejoras reducen el número de comparaciones y no el número de movimientos.

A pesar de todas estas mejoras el método de intercambio directo es el más lento de los tres métodos de
ordenamiento.

Acción INTERCAMBIO _ DIRECTO es


Ambiente
Const.
N=500
Var.
a: Arreglo [1..N] de enteros
aux: entero
i, j: índice
Algoritmo
Para i:= 1 hasta N-1 hacer
Para j:=1 hasta N-i hacer
Si a[j] > a[j+1] entonces
aux:= a[j];
a[j]:= a[j+1];
a[j+1]:= aux;
Fin Si
Fin Para
Fin Para
Fin Acción

Ordenamiento por Selección Directa: Este método se basa en los siguientes principios:

a) Encontrar el elemento con clave mínima


b) Intercambiarlo con el primero

A continuación estas operaciones se repiten con los elementos n-1, n-2, etc., restantes, hasta que quede
un único elemento, el mayor.
Este método es en cierta forma opuesto al de inserción directa: Este considera en cada paso, un único
elemento en la secuencia origen y todos los elementos de la secuencia destino para encontrar el lugar de
inserción, mientras que el de selección directa considera a todos los elementos de la secuencia origen para
encontrar el elemento con la clave mínima y depositarlo como elemento siguiente de la secuencia destino.
Como conclusión podemos afirmar que en general el método de selección directa es más rápido que el de
inserción directa. Pero en el caso en que el arreglo este ordenado o casi ordenado puede resultar más
rápido el de inserción.
La hipótesis utilizada en este método es: tengo un arreglo ordenado hasta la posición (i-1), busco el menor
desde la posición i hasta la última, lo insertamos en la posición a[i] y luego incrementamos i.

Acción SELECCION _ DIRECTA es


Ambiente
Const.
N=500
Var.
a: Arreglo [1..N] de enteros
aux: entero
i, j: índice
Algoritmo
Para i:= 1 hasta N-1 hacer
Min:=i;
Para j:=i+1 hasta N hacer
Si a[j] < a[Min] entonces
Min:=j;
Fin Si
Fin Para
aux:= a[Min];
a[Min]:= a[i];
a[i]:= aux;
Fin Para
Fin Acción

Ordenamiento por Inserción Directa: Los elementos están divididos conceptualmente en una secuencia
origen ai…. an una secuencia destino a1…. ai-1. En cada caso, empezando con i=2, e incrementado i de uno en
uno, se toma el elemento (x) de la secuencia origen y se lo transfiere a la secuencia destino insertándolo en
el sitio adecuado. En el proceso de encontrar el sitio adecuado, conviene alternar comparaciones y
movimientos, es decir “dejar caer x”, comparándolo con el elemento inmediato precedente a j, como
consecuencia se inserta x o se mueve a j a su derecha y se continúa con el inmediato por la izquierda, según
el mismo proceso. Observemos que en este proceso de “caída” existen dos condiciones diferentes de
terminación:
1) Se encuentra un elemento aj con clave menor que la de x.
2) Se alcanza el extremo izquierdo de la secuencia destino

Acción INSERCION _ DIRECTA es


Ambiente
Const.
N=500
Var.
a: Arreglo [1..N] de enteros
aux, x: entero
i, j: índice
Algoritmo
Para i:= 2 hasta N hacer
x:=a[i];
a[0]:=x; j:= i-1;
Mientras (x < a[j]) hacer
a[j+1]:= a[j];
j:= j-1;
Fin Mientras
a[j+1]:= x;
Fin Para
Fin Acción

Búsqueda

Es producir un recorrido sobre un arreglo con el fin de detectar un contenido particular. Tendrá dos
estados posibles éxito o fracaso.
Lineal
METODOS Lineal con Centinela
Dicotómica o Binaria

Búsqueda Lineal:
PURA O SIMPLE: Consiste en recorrer todo el arreglo desde el valor inicial hasta el
final, comparando cada elemento con el valor buscado. Al finalizar la búsqueda se deberá informar donde
se encontró el elemento en caso de que la búsqueda haya tenido éxito o la no existencia del elemento en
caso contrario. Este método se aplica tanto a arreglos ordenados como desordenados.
La búsqueda no finaliza al encontrar la primera ocurrencia sino que permite encontrar múltiples
ocurrencias. Apunta a la multiplicidad de éxitos.
Los éxitos se trabajan dentro del ciclo y los fracasos fuera.
Número de comparaciones como máximo: tantas como elementos hay en el arreglo (recorre todo el arreglo
aunque el elemento se haya encontrado en la primera posición)

Acción BUSQUEDA _ LINEAL es Acción BUSQUEDA _ LINEAL es


Ambiente Ambiente
Const Const
N=500 N=500
Var Var
A: Arreglo [1.. N] de enteros A: Arreglo [1.. N] de enteros
pos, x: entero Encontrado: Booleano
i : índice x: entero
Algoritmo i : índice
Leer (x); Algoritmo
pos:= 0; Leer (x);
Para i.= 1 hasta N hacer Encontrado:= FALSO
Si A[i] = x entonces Para i.= 1 hasta N hacer
pos:= i; Si A[i] = x entonces
Fin Si <tratar éxito>
Fin Para Encontrado:= VERDADERO;
Si pos > 0 entonces Fin Si
Escribir (“Esta en la posición:”, pos); Fin Para
Sino Si No Encontrado entonces
Escribir (“Elemento no encontrado”); <tratar ausencia>
Fin Si Fin Si
Fin Acción Fin Acción

CON CENTINELA: El recorrido no es total, la búsqueda finaliza cuando se encuentra la


primera ocurrencia o bien cuando se encuentra el primer elemento mayor al buscado (cuando el arreglo
esta ordenado).
El número de comparaciones es incierto, pero como mínimo hasta que se encuentre el elemento, lo que
obliga a que el ciclo sea manejado por una condición.
Este tipo de métodos se lo puede utilizar tanto en arreglos ordenados como desordenados. En el caso de
estar ordenados se lo puede optimizar y es mucho más eficiente.
Es muy lento cuando el número de elementos del arreglo es grande y no admite búsquedas múltiples.

Acción BUSQUEDA _ LINEAL _ CENTINELA es


Ambiente
Const
N=500
Var
A: Arreglo [1.. N] de enteros
x: entero
i : índice
Algoritmo
Leer (x);
i:= 1;
Mientras i < N ^ A[i] <> x hacer
i:= i + 1;
Fin Mientras
Si A[i] = x entonces
Escribir (“Encontrado”);
Sino
Escribir (“No encontrado”);
Fin Si
Fin Acción
Búsqueda Dicotómica o Binaria: Una búsqueda binaria se basa en el principio “Divide y Vencerás”.
Consiste en dividir o fraccionar el arreglo e ir comparando el elemento central con el valor buscado. A
medida que se avanza en la búsqueda se analizan partes más pequeñas de arreglo. Cada vez que se realiza
la búsqueda se descarta el 50% de las posiciones que se esta analizando (campo de búsqueda). Se avanza
de a saltos.
Al iniciar la búsqueda nos debemos posicionar en la mitad del arreglo (se calcula con el rango definido en el
ambiente). Se descarta uno de las dos mitades de acuerdo a si el valor del elemento buscado es mayor o
menor que el elemento central y se calcula el punto medio de la otra mitad.
La búsqueda finalizará cuando se encuentra el valor deseado o bien cuando se anula el intervalo de
búsqueda.
Numero máximo de comparaciones Log2 N.
La búsqueda lineal es mas rápida cuando el numero de elementos del arreglo es pequeño (se tienen menos
operaciones, asignaciones y líneas de escribir). La diferencia con la binaria se evidencia cuando crece el
número de elementos en el arreglo.
Acción BUSQUEDA _ BINARIA es
Ambiente
Const
N=500
Var
A: Arreglo [1.. N] de enteros
x, izq, der, me: entero
Algoritmo
Leer (x);
izq:= 1; der:= N; me:= TRINC ((izq + der) / 2)
Mientras A[me] <> x ^ izq < der hacer
Si A[me] < x entonces
izq:= me +1;
Sino
der:= me -1;
Fin Si
me:= TRINC ((izq + der) / 2)
Fin Mientras
Si A[me] = x entonces
Escribir (“Encontrado”);
Sino
Escribir (“No encontrado”);
Fin Si
Fin Acción

RECURSIVIDAD

Es la propiedad por la cual un programa puede llamarse así mismo para realizar una tarea.
Un objeto es recursivo si forma parte de si mismo o se define en función de si mismo. El poder de la
recursividad reside en la posibilidad de definir un número infinito de objetos mediante un enunciado finito.
De igual forma un número infinito de operaciones de cálculo puede describirse mediante un programa
recursivo finito.
La facultad de variar su tamaño es la propiedad característica de las estructuras recursivas que claramente
las distingue de las estructuras fundamentales (arreglos, conjunto de registros). Por lo tanto no es posible
asignar una cantidad fija de memoria para una estructura definida recursivamente, en consecuencia se
realiza una asignación dinámica de memoria.

Características
 Una llamada así misma.
 Una condición de fin.
 Tiende a reemplazar una estructura repetitiva.
 Se requiere mucha memoria para almacenar datos en una pila.
 Secuencia de muy pocos pasos.

La recursividad es un proceso rápido pero que ocupa mucho espacio en memoria. Un caso recursivo puede
plantearse siempre de una forma iterativa, aunque un caso iterativo no siempre tiene una solución
recursiva.
No debe usarse la recursividad si el problema o los datos no están definidos en forma recursiva, si existe
otra solución obvia por iteración es conveniente optar por la iteración.
La recursividad se asemeja a la iteración ya que ambos tienen condición de fin, en muchos casos la solución
recursiva es mas corta que la iterativa.

Solución Recursiva: Se plantean partes de resultado, se descompone el problema en partes menores.


Solución Iterativa: Da el resultado final del problema.

El único fin de la recursividad es manejar árboles ya que son estructuras recursivas por excelencia.

La recursividad se da en dos niveles

A nivel de datos Definición recursiva


A nivel de acción Función o Procedimiento recursivo

Datos Recursivos: Es cuando un objeto se define en funcion de si mismo. Se define un objeto infinito
mediante un objeto finito. Ej. LISTAS
P: Puntero a NODO
NODO: Registro
Dato: AN (20)
Prox: Puntero a NODO
Fin Registro

Acciones Recursivas: Implica una funcion o procedimiento que se invoca a si mismo, condicionado
mediante un tope, marca o condición de fin.
Las acciones se definen en versiones (acciones) más pequeñas de sí mismas.

Caso Base o Solución Base: Es aquel que puede ser resuelto de forma iterativa

PLANTEO Condición de fin


RECURSIVO
Caso General o Recursivo: Es una versión menor del problema, que no se puede
resolver de forma iterativa. Se lo debe descomponer hasta llegar al caso base.

Ejemplo:
xn = x.x.x.x…x Caso Base

N veces
n
x = x.x.x.x…x

N-1 veces
n
x = x.x.x.x…x

N-2 veces

xn = x.x(n-1) Caso Recursivo

n = 0 , Xn = 1 Caso Base
n
X
n>0, xn = x.x(n-1) Caso Recursivo

Condición de fin: n decrementa hasta ser = 0

Acción POTENCIA (X, N) es


Si N = 0 entonces
POTENCIA:=1;
Sino
POTENCIA:= POTENCIA (X, N-1);
Fin Si
Fin Acción

Tipos de Recursividad
DIRECTA: Un subprograma se llama así mismo una o mas veces. Es más fácil de reconocer.
INDIRECTA: Un subprograma A llama a otro B y este a su vez llama a A.

Ventajas y Desventajas
 No utilizar recursividad a menos que tenga un medio para terminar la llamada.
 No es conveniente su uso cuando hay una solución obvia por iteración.
 Es conveniente cuando los datos o el problema que debe manifestarse están definidos en forma
recursiva.
 No utilizar cuando hay limitaciones de memoria.
 No utilizar cuando no hay ventajas claras.
 La solución iterativa normalmente es más sencilla y más eficiente.

Función Recursiva Procedimiento Recursivo


Acción FACTORIAL (N: entero) es Acción INVERSO (N: entero) es
Si N = 0 entonces ESC (N mod 10);
FACTORIAL:=1; Si N>= 10 entonces
Sino INVERSO (N div 10);
FACTORIAL:= N * FACTORIAL (N-1) Fin Si
Fin Si Fin Acción
Fin Acción

Devuelve solo 1 resultado Puede devolver uno o varios resultados

LISTAS LINEALES

Son estructuras flexibles, ya que, pueden crecer y reducirse y, los elementos, pueden ser accedidos o
insertados, en cualquier posición dentro de la mima, como así también eliminados. En una lista los
elementos están linealmente ordenados de acuerdo con su posición dentro de ella. Cada elemento esta
compuesto de uno o más campos y cada campo puede ser un dato simple o estructurado.
Se diferencian de los arreglos por ser una estructura dinámica indefinida, es decir, se podrán almacenar
datos (agregar elementos) hasta la infinidad, siempre y cuando se dispongan de lugares libres en la
memoria. Continuidad Lógica.
Los elementos de la lista se pueden almacenar en cualquier lugar de la memoria. Cada elemento tiene la
dirección del siguiente. Es necesario conocer la dirección del primer elemento para poder acceder a los
demás, este tiene un puntero llamado Prim.
Las listas se recorren secuencialmente, debido a que no tienen continuidad física. El último elemento tiene
un puntero nulo denominado Nill (nulo).
IMPLEMENTACION DE LISTAS LINEALES

Almacenamiento Encadenado: Consiste en utilizar un esquema flexible, en el cual, cada elemento contiene
un puntero (indicador) que apunta al próximo elemento de la lista. No es necesario que los elementos que
son lógicamente adyacentes, ocupen posiciones contiguas de memoria, es decir físicamente uno detrás del
otro. Este almacenamiento permite aprovechar mejor la memoria. En este caso, los elementos o
componentes (NODOS) de la lista son variables dinámicas, las cuales se crean solo cuando se necesitan.

Variables Dinámicas: Es una variable simple o una estructura de datos creada en tiempo de ejecución y
accedida mediante un puntero.

NODO: Es un campo de información y la única manera de acceder a el es mediante un puntero.

Puntero: Es una variable simple (estática) utilizada para almacenar la dirección de memoria de una variable
dinámica.

La ventaja de poder crear variables en tiempo de ejecución es que no necesitamos crear nada más de los
que realmente necesitamos.
El tipo puntero es un tipo simple, pero no es un tipo estándar y, en consecuencia debe ser declarado en
cada programa. Para definir un puntero en el ambiente hacemos:

P: puntero a Nodo
Nodo = Registro

Fin Registro.

Donde Nodo es un tipo de dato (por ejemplo registros). P apunta a un espacio de memoria donde queda se
encuentra ese NODO. Las variables a las que apuntara P se crearan dinámicamente. Esto es que se crearan
variables del mismo tipo de dato al que apunta P siempre que se necesiten durante la ejecución del
programa. Para acceder a las variables recientemente creadas que no tienen nombre sino que son
referenciadas mediante una variable puntero, usamos una de las siguientes expresiones:
P^, *P
*P: Representa el valor almacenado hacia donde “apunta” P

Creación de una variable dinámica: Las variables dinámicas no aparecen en una declaración explicita de
variables, ni pueden ser, directamente referenciadas por su nombre. Una variable dinámica se genera por
medio de un procedimiento estándar, que llamaremos NUEVO (P), donde P es una variable puntero.
NUEVO (P): Crea una variable del tipo a la que su parámetro apunta y devuelve la dirección de esta variable
en el parámetro. Su parámetro es siempre una variable puntero.
Es decir que el procedimiento NUEVO (P) busca un lugar libre de memoria y lo reserva para almacenar un
elemento de la lista.

Listas Particularizadas: Son las PILAS y COLAS, que son en realidad una restricción de acceso a una
estructura de datos.
 PILAS: Es una estructura de datos en la cual todas las inserciones y eliminaciones se realizan por el
mismo extremo (extremo superior o tope de la pila). En una pila siempre sale el elemento que ha
sido insertado último. Por eso también se la llama estructura LIFO (last in, first out). Las pilas se
utilizan siempre que se quiere recuperar una secuencia de elementos en el orden inverso al que
fueron obtenidas.
 COLAS: Es también una estructura de datos; en las cuales las operaciones básicas de añadir y
eliminar elementos se realiza en los extremos de la lista. También es una estructura en la cual el
primero en entrar es el primero en salir. Por eso también se la llama estructura FIFO (first in, first
out). Las colas se utilizan siempre que se quiere recuperar una secuencia de elementos en el mismo
orden en que se genero.

Listas Simplemente Encadenadas: Es una secuencia de nodos que se encuentra enlazada cada uno con el
siguiente mediante un enlace o puntero. Cada elemento de una lista simplemente enlazada debe tener dos
campos: Un campo (info.) que contiene el valor de ese elemento y un campo (puntero interno) que indica la
posición del siguiente elemento de la lista. La marca de fin de la lista es Nill. El puntero externo también
recibe el nombre de cabecera, (Prim), e indica donde comienza la lista. El último elemento contiene una
dirección que permite saber que el recorrido termina. La marca de fin en este caso se establece a través
del concepto de nulidad.

PRIM
M

NILL

Listas Doblemente Enlazadas: Es una lista que posee dos punteros externos, uno apunta al primer nodo de
la lista (Prim) y el otro al ultimo de la misma (Ult). Su estructura de nodos contiene dos campos de enlace
(Punteros internos) donde el predecesor es enlace izquierdo y el sucesor enlace derecho.
ULT
PRIM
M

NILL NILL

Listas Circulares: Es una lista en la que el puntero siguiente al ultimo elemento apunta hacia el primer
elemento. Esta lista se caracteriza por no existir el puntero nulo, no existe ni primer ni último elemento
(pero se debe elegir obligatoriamente un puntero externo a un nodo de la lista). Esta lista permite que se
acceda a un nodo desde cualquier otro.

PRIM
M

También podría gustarte