You are on page 1of 33

Estructura de Datos

Lineales
Curso: Algoritmos y Estructura de Datos – Grupo C
Docente: I.S. César Augusto Guzmán Valle
Escuela Profesional de Ingeniería de Sistemas
Universidad Nacional Pedro Ruiz Gallo
Indice
 Abstracción de datos
 Utilización de un TDA
 Tipos de estructura de datos lineales
 Listas
 Pilas
 Colas

I.S. César A. Guzmán Valle 2


Abstracción de datos
 La abstracción nos permite simplificar el análisis y
resolución de un problema separando las características
que son relevantes de aquellas que no lo son.
 Una abstracción de datos, también denominada tipo de
dato abstracto, es un nuevo tipo de dato más un conjunto
de operaciones que permiten manipular objetos de dicho
tipo.
 La utilización de los TDA da lugar a programas que son:
 más legibles
 más fáciles de mantener
 y más fáciles de modificar

I.S. César A. Guzmán Valle 3


Utilización de un TDA
 Para poder utilizar un TDA, sin saber como está
representado internamente, es necesario
disponer de su especificación.

 Un TDA se divide en
dos partes:
 Especificación.
 Implementación.

I.S. César A. Guzmán Valle 4


Estructuras de Datos

Almacenamiento
Contiguo
Lineales
Estructuras Almacenamiento
de Datos No Contiguo
No lineales

I.S. César A. Guzmán Valle 5


Tipos de estructura de datos
lineales
 Listas
 Pilas y
 Colas
Estas estructuras de datos pueden ser:
 Estáticas (implementado con array) o
 Dinámicas (implementado con listas
enlazadas).

I.S. César A. Guzmán Valle 6


Listas
 Son estructuras de datos secuenciales de 0 o más elementos
de un tipo dado almacenados en memoria. Son estructuras
lineales, donde cada elemento de la lista, excepto el primero,
tiene un único predecesor y cada elemento de la lista,
excepto el último, tiene un único sucesor.
 El número de elementos de la lista se llama longitud. Si tiene
0 elementos se llama lista vacía.
 En una lista podemos añadir nuevos elementos o suprimirlos
en cualquier posición. Ejemplo implementado con array:

I.S. César A. Guzmán Valle 7


Tipos de listas
 No enlazada (array)
 Enlazada (objetos)
 Doblemente enlazada
(anterior apunta al
siguiente y viceversa)
 Circular (el último
apunta al primero)
A la vez pueden estar:
 Ordenada
 No ordenada

I.S. César A. Guzmán Valle 8


Operaciones sobre Listas

Algunas operaciones
son:
 Inserción
 Supresión
 Recorrido
 Ordenación
 Búsqueda
 Consulta

I.S. César A. Guzmán Valle 9


Aplicación de las listas
 Las listas son comunes en la vida diaria: listas de
alumnos, listas de clientes, listas de espera, listas de
distribución de correo, etc.
 Las listas son estructuras de datos muy útiles para los
casos en los que se quiere almacenar información de
la que no se conoce su tamaño con antelación.
 También son valiosas para las situaciones en las que
el volumen de datos se puede incrementar o
decrementar dinámicamente durante la ejecución del
programa.
 Cuando aplicamos restricciones de acceso a las listas
tenemos pilas y colas que son listas especiales.

I.S. César A. Guzmán Valle 10


Listas Enlazadas
 Una lista enlazada está formada por una
colección de elementos (denominados nodos)
tales que cada uno de ellos almacena dos
valores: un valor de la lista y un puntero o
referencia que indica la posición del nodo que
contiene el siguiente valor de la lista.
 Es necesario almacenar al menos la posición
del primer elemento.
 Es dinámica, su tamaño puede cambiar
durante la ejecución del programa.

I.S. César A. Guzmán Valle 11


Nodos de una lista enlazada
 Una lista enlazada es una sucesión de nodos en la
que a partir de un nodo se puede acceder al que
ocupa la siguiente posición en la lista. Esta
característica nos indica que el acceso a las listas
es secuencial y no indexado, por lo que para
acceder al último elemento de la lista hay que
recorrer los n-1 elementos previos (n es el tamaño
de la lista).
 Para que un nodo pueda acceder al siguiente y la
lista no se rompa en varias listas cada nodo tiene
que tener un puntero que guarde la dirección de
memoria que ocupa el siguiente elemento.

I.S. César A. Guzmán Valle 12


Esquema de una lista enlazada
 De esta forma un nodo se podría representar
esquemáticamente así:
Información
Nodo siguiente
 En el campo información se almacena el
objeto a guardar y nodo siguiente mantendrá
la conexión con el siguiente nodo.
Información Información Información

Nodo siguiente Nodo siguiente Nodo siguiente

I.S. César A. Guzmán Valle 13


Lista doblemente enlazada
 Son listas que tienen un enlace con el elemento siguiente y con el anterior. Una
ventaja que tienen es que pueden recorrerse en ambos sentidos, ya sea para
efectuar una operación con cada elemento o para insertar, actualizar y borrar. La
otra ventaja es que las búsquedas son algo más rápidas puesto que no hace
falta hacer referencia al
elemento anterior. Su
inconveniente es que
ocupan más memoria por
nodo que una lista simple.

I.S. César A. Guzmán Valle 14


Listas circulares (enlazadas)
 Son listas en el que el último elemento tiene
una referencia (enlace) con el primer
elemento (cabecera).
 Pueden ser listas simples o doblemente
circulares.

I.S. César A. Guzmán Valle 15


Pilas
 Es un tipo lineal de datos,
secuencia de elementos de un
tipo, una estructura tipo LIFO
(Last In First Out) último en
entrar primero en salir.
 Son un subconjunto de las
listas, en donde las
eliminaciones e inserciones se
dan en un solo extremo, de
manera tal que, el último
elemento es el único accesible.

I.S. César A. Guzmán Valle 16


Operaciones básicas con pilas
 Crear la estructura
 Insertar
 Eliminar
 Obtener un elemento
 Vacíar
 Mostrar los elementos

I.S. César A. Guzmán Valle 17


Aplicaciones de las pilas
Se utilizan en:
 Compiladores (parsers: reconocedores sintácticos de
los compiladores).
 Programación de sistemas (para registrar llamadas a
subprogramas, y recuperar los datos anteriores, o
recuperar los parámetros).
 Recuperación de elementos en orden inverso al que
fueron colocados (en un depósito, una pila de
contenedores, sillas, etc. ).
 Convertir notación infija a posfija o prefija.
 Implementación de recursividad.

I.S. César A. Guzmán Valle 18


Notación polaca (postfija)
 Para evaluar la expresión aritmética de:

 se sigue el indicado con las flechas


(según la prioridad de los operadores y
el uso de los paréntesis)
 Para eliminar esta dificultad, se hace una traducción de las
expresiones aritméticas a notación postfija, que se llama
también notación de cadena polaca (denominada así en honor
del matemático polaco Lukasiewicsz, quién la originó). Esta
notación tiene la ventaja de que las operaciones aparecen en
el orden en que se efectúan realmente la evaluación.

I.S. César A. Guzmán Valle 19


Notación postfija
 La idea básica detrás de la notación de cadenas polacas
es que los operadores se escriben al final y no en medio
de las expresiones. De manera que A + B se escribiría
como A B +. En esta forma, el operador + se considera
como una orden para sumar los valores de las dos
variables que lo preceden inmediatamente. Un ejemplo
puede ser:

 La clave de la traducción de notación infija a posfija es la


prioridad de los operadores: ( ), + -, * /, ^.

I.S. César A. Guzmán Valle 20


Notación postfija
 Reglas básicas para convertir expresiones infijas a posfijas:
1. Si el elemento es un ‘(‘ se coloca directamente en la pila de
operadores.
2. Si el elemento es un ‘)’, los operadores de la pila se transfieren uno
a uno, al extremo derecho de la expresión posfija hasta llegar a un
‘(‘. Este se saca pero no va a la salida.
3. Si el elemento localizado es una variable, se coloca
inmediatamente en el extremo derecho de la expresión posfija que
se está creando.
4. Si el elemento es un operador y es de menor precedencia que el
operador en la pila, el operador de la pila se saca y va a la salida,
continuando de esta manera hasta encontrar un ‘(‘ o hasta que el
operador de la pila sea de menor precedencia. Cuando esto
ocurre, el operador en turno se apila.

I.S. César A. Guzmán Valle 21


Conversión infija a postfija
 Ecuación cuadrática
 En infija

( ‘-b’ + ( b ^ 2 – 4 * a * c ) ^ ( 1 / 2 ) ) / ( 2 * a )
 En postfija

‘-b’ b 2 ^ 4 a c * * - 1 2 / ^ + 2 a * /

I.S. César A. Guzmán Valle 22


Algoritmo para evaluar una
expresión postfija
1. Implementar la pila
2. Repetir hasta encontrar el fin de la expresión postfija
 Tomar un carácter.
 Si el carácter es un operando colocarlo en la pila.
 Si el carácter es un operador entonces sacar los dos
valores del tope de la pila (operando2 operando1),
aplicar el operador (operando1 operador operando2)
y colocar el resultado en el nuevo tope de la pila.
Estructura de datos y organización de archivos. Mary E. Loomis. Prentice Hall. 2a Ed.
http://www.itlp.edu.mx/publica/tutoriales/estru1/33.htm
http://thales.cica.es/rd/Recursos/rd99/ed99-0636-03/notacion_polaca.html

I.S. César A. Guzmán Valle 23


Recursividad
 Algoritmo para hallar el factorial de un número mediante pilas
leer n;
   mientras n > 1
pila.apilar (n);
      n = n-1;
fin mientras
factorial = 1;
   mientras pila no está vacía
factorial = factorial * pila.desapilar ();
fin mientras

I.S. César A. Guzmán Valle 24


Encapsulación en pilas y colas
 Al igual que con las colas,
la implementación de las
pilas suele encapsularse,
es decir, basta con conocer
las operaciones de
manipulación de la pila
para poder usarla,
olvidando su
implementación interna.

I.S. César A. Guzmán Valle 25


Colas
 Es un tipo de dato lineal con
estructura FIFO (First In, First
Out), el primero que entra es el
primero que sale.
 Las colas son un subconjunto de
las listas, en donde las
eliminaciones se dan al
comienzo de la lista y las
inserciones al final.
Los elementos se procesan en el
orden como se reciben (similar a
la cola de impresión en redes).

I.S. César A. Guzmán Valle 26


Aplicaciones de las colas
Las colas, al igual que las pilas, resultan de aplicación
habitual en muchos problemas informáticos.
Su utilización es infinita, desde la simulación de una
cola formada frente a un cajero automático, hasta la
cola de impresión.
Quizás la aplicación más común de las colas es la
organización de tareas de un ordenador. Los
procesos forman colas para la utilización de los
recursos de un sistema computacional.

I.S. César A. Guzmán Valle 27


Tipos de colas
 Colas de prioridad: En ellas, los elementos se
atienden en el orden indicado por una prioridad
asociada a cada uno. Si varios elementos tienen
la misma prioridad, se atenderán de modo
convencional según la posición que ocupen.
 Existen dos formas de implementación:
 Añadir un campo a cada nodo con su prioridad.
Resulta conveniente mantener la cola ordenada por
orden de prioridad.
 Crear tantas colas como prioridades haya, y
almacenar cada elemento en su cola.

I.S. César A. Guzmán Valle 28


Cola de prioridad
 Una cola de prioridad es una
generalización de los conceptos de pila y
cola en la que, tras entrar en la cola, la
salida de los elementos no se basa
necesariamente en el orden de llegada
sino que se basa en un orden definido
entre ellos.

I.S. César A. Guzmán Valle 29


Algunas aplicaciones de
las colas de prioridad
 Gestión de procesos en un sistema operativo. Los procesos
no se ejecutan uno tras otro en base a su orden de llegada.
Algunos procesos deben tener prioridad (por su mayor
importancia, por su menor duración, etc.) sobre otros.
 Implementación de algoritmos voraces, los cuales
proporcionan soluciones globales a problemas basándose
en decisiones tomadas sólo con información local. La
determinación de la mejor opción local suele basarse en
una cola de prioridad.
 Algunos algoritmos sobre grafos, como la obtención de caminos o
árboles de expansión de mínimo coste, son ejemplos representativos
de algoritmos voraces basados en colas de prioridad.

I.S. César A. Guzmán Valle 30


Tipos de colas
 Bicolas: son colas en donde los nodos se pueden añadir y
quitar por ambos extremos; se les llama DEQUE (Double
Ended QUEue). Para representar las bicolas lo podemos
hacer con un array circular con Ini y Fin que apunten a
cada uno de los extremos. Existen dos variantes:
 Bicolas de entrada restringida: Son aquellas donde la
inserción sólo se hace por el final, aunque podemos
eliminar al principio o al final.
 Bicolas de salida restringida: Son aquellas donde sólo se
elimina por el final, aunque se puede insertar al principio y
al final.

I.S. César A. Guzmán Valle 31


Operaciones básicas con colas
 Crear la estructura
 Insertar
 Eliminar
 Obtener un elemento
 Vaciar
 Mostrar los elementos

I.S. César A. Guzmán Valle 32


Bibliografía
 Abstracción de datos
1. http://www14.uniovi.es/tutorED/abstraccion/abstraccionfr.html
 Estructura de Datos
2. http://www14.uniovi.es/tutorED/estlineales/estlineafr.html
3. http://www14.uniovi.es/tutorED/java-c++/java-c++fr.html
4. Como programar en Java. Deitel y Deitel.
 Listas
5. http://www14.uniovi.es/tutorED/estlineales/interlistafr.htm
6. http://oviedo3.ccu.uniovi.es/martin/EDI/ListPage.htm
 Listas, pilas y colas. Ejercicios
7. Fundamentos de programación. Libro de problemas. Luis
Joyanes Aguilar
8. http://old.algoritmia.net/listas.htm

I.S. César A. Guzmán Valle 33

You might also like