1. Universidad Nacional de Lomas de Zamora
Apunte teórico: Técnicas de Programación –
Pseudocódigo: Estructuras de datos.
Facultad de Ingeniería
Curso 111 Mil
Profesor Alejandro Canosa
2. Alejandro Canosa, Universidad Nacional de Lomas de Zamora
Curso 111Mil, 2017
2
Recursividad:
Un algoritmo recursivo es un algoritmo que va a ir dividiendo el problema y lo va a ir resolviendo
hasta la partícula más pequeña, por ejemplo, una función de factorial, sabemos que:
𝑋! = 𝑋 ∗ (𝑋 − 1) ∗ (𝑋 − 2) … ∗ 1
𝑋! = 𝑋 ∗ (𝑋 − 1)!
ENTERO factorial(ENTERO numero)
Si (numero == 1) entonces
DEVOLVER 1
SINO
DEVOLVER numero * factorial(numero-1) //multiplico el numero al factorial del número –
//1, véase la propiedad de arriba
En el algoritmo escrito previamente la función va a empezar por el numero N que se le pase, si N
es distinto de 1, va a multiplicar el valor que devuelva la función factorial pero con N – 1, y así va a
pasar hasta que se llegue al 1, cuando se llega al 1, se devuelve 1 y así se van devolviendo todos
los valores hasta llegar a la primer función invocada.
El proceso se ve ilustrado de la siguiente manera:
Es como bajar y subir una escalera, empiezo desde mi valor inicial y voy invocando la función con
su decremento de 1 en 1 hasta llegar al valor 1, de ahí devuelvo 1 y voy subiendo la escalera y
devolviendo los valores hasta llegar al primer valor usado que es N.
Se podría usar otro ejemplo con las potencias (no contempla todos los casos posibles, es solo para
potencias enteras y positivas y además mayores a 0):
ENTERO potencia(ENTERO número, ENTERO exponente)
3. Alejandro Canosa, Universidad Nacional de Lomas de Zamora
Curso 111Mil, 2017
3
SI (exponente == 1)
DEVOLVER número //devuelvo el numero ya que se eleva a la 1
SINO
DEVOLVER número * potencia(número, exponente – 1)
Ejemplo: 23
= 2 * 2* 2
ESTRUCTURAS DE DATOS
LISTAS:
Las listas son colecciones abstractas de un tipo de datos, parecidos o iguales a los vectores según
sea el caso (de hecho un vector es una lista si es dinámico, es decir, si puede cambiar su longitud)
Hay varios tipos de listas:
Listas enlazadas de forma simple: Cada nodo o elemento de la lista contiene un puntero
(dirección de memoria) al nodo siguiente (si es el último no tiene puntero)
Listas enlazadas de forma doble: Cada nodo o elemento tiene un puntero tanto para el
nodo siguiente como para el nodo previo.
Sets: que no contienen datos duplicados y no están ordenados.
ArrayList: es un array implementado como lista el cual tiene una longitud variable y puede
usar los métodos que usa una lista (La lista está definida en la clase List en Java y ArrayList
puede usar los métodos y operaciones de esta clase, en el módulo de Orientación a
Objetos se entrará más en detalle con esto).
Largo etcétera.
Operaciones:
Insertar al final (append en inglés)
Eliminar elemento
Insertar en un índice especifico (cuidado con usar un índice fuera de la lista)
Insertar entre 2 elementos
Verificar si está vacía.
Cuando se declara una lista se define el tipo de dato que contendrá (solo puede contener UN tipo
de dato, como el array) y el nombre de la misma.
Lista <ENTERO> números //sintaxis de pseudocódigo
List <Integer> números = new ArrayList<Integer>(); //Lista de tipo ArrayList de enteros (JAVA)
4. Alejandro Canosa, Universidad Nacional de Lomas de Zamora
Curso 111Mil, 2017
4
Otra manera de recorrer la lista, además de usar los bucles WHILE, DO WHILE y FOR (Mientras,
hacer mientras y para) se puede usar FOR EACH (Para cada)
PARA CADA:
Es un bucle en el cual se recorren TODOS los elementos de un vector o lista determinado, sin
definir una condición o hasta que valor se quiere llegar, simplemente recorre en totalidad las
estructuras mencionadas (NOTA: no se tiene que borrar ningún elemento mientras se recorre la
lista). La sintaxis el PARA CADA es la siguiente:
PARA CADA (TIPO DATO) (NOMBRE VARIABLE TEMPORAL) EN (NOMBRE LISTA/VECTOR)
//acá dentro se escriben las instrucciones del bucle
FIN PARA CADA
En PARA CADA también se usa una variable temporal la cual es el elemento actual que estoy
recorriendo, este debe ser del mismo tipo de la lista (si la lista es de enteros, la variable tiene que
ser entera, a menos que se haga lo que se llama “castear”). Entonces:
LISTA <ENTERO> lista = [1, 2, 3, 4, 5]
PARA CADA ENTERO elemento EN lista
IMPRIMIR(elemento) //se imprime el elemento en el que estoy parado
FIN PARA CADA
//acá la variable elemento no existe más ya que fue definida solamente para el bucle.
COLAS:
La cola es una estructura de datos de tipo FIFO (First in First out) la cual almacena los datos de
manera que el primero que ingresamos (el dato más antiguo) sea el primero en salir, a diferencia
de la lista y los vectores, la cola no puede ser recorrida, solo puede accederse a 1 elemento a la
vez. La cola tiene las siguientes operaciones:
Encolar (agrego elemento a la cola)
Desencolar (obtengo primer elemento a la cola. NOTA: una vez que desencolo, el
elemento ya no está más en la cola)
Frente (obtengo información del elemento que esta primero pero no lo saco de la pila)
Ejemplos de cola en la vida real pueden ser cola del banco, una cola de pedidos en un delivery o
restaurante, etc.
5. Alejandro Canosa, Universidad Nacional de Lomas de Zamora
Curso 111Mil, 2017
5
PILAS:
La pila es una estructura de datos de tipo LIFO (Last in First out), es decir, el último dato que se
ingresa (el más reciente) es el primero en salir. Al igual que la cola solo se accede a 1 elemento por
vez y este elemento deja de estar en la Pila una vez que se accede al mismo. La pila tiene las
siguientes operaciones:
Push (ingresa un elemento en la pila)
Pop (obtiene el último elemento ingresado, una vez que se obtiene, ya no está dentro de
la pila)
Top (obtiene información del último elemento ingresado pero no lo quita de la pila)
Vacía (devuelve Verdadero si la pila esta vacía)
Un ejemplo simple es una pila de libros, yo no puedo sacar el libro de abajo sin que se caigan los
de arriba (ya que están apoyados en el de abajo), por ende saco los libros de arriba primero (los
últimos que se apilaron) hasta llegar al libro de abajo.
SINTAXIS PARA PILAS Y COLAS:
PILA <TIPO> NOMBRE
COLA <TIPO> NOMBRE //las pilas y colas siempre se crean vacías.
EJERCICIOS:
1. Crear una Lista de texto y rellenarla con 5 nombres, recorrerla de manera secuencial
imprimiendo los nombres
2. Crear una cola e ingresar los números (1, 2, 6 ,8 , 24) en ese orden, imprimir cada uno de
los elementos de la cola mientras se recorre
3. Crear una pila e ingresar los números (13, 28, 2, 3, 1) en ese orden, imprimir cada uno de
los elemento se la pila mientras se recorre.
4. Desencolar todos los elementos de una cola, si uno de estos elementos es 0, terminar de
desencolar ahí y dejar los datos restantes de la cola (Nota: el 0 tiene que seguir en la cola).
5. Eliminar todos los elementos que tengan el número 0 en una lista usando PARA CADA.
6. Escribir una función recursiva que a partir de un número dado se haga sumatoria desde
ese número hasta el 1. Ejemplo: si ingreso el 5, hacer 5 + 4 + 3 + 2 + 1.