Vous êtes sur la page 1sur 122

ESTRUCTURA Y ORGANIZACIN DE DATOS

Unidad II
ESTRUCTURAS LINEALES

Competencias

Aplicar las principales estructuras de datos lineales.

Temas
2.1. 2.2. 2.3. 2.4. Listas. Pilas estticas y dinmicas. Colas estticas y dinmicas. Aplicaciones.

Bibliografa
Estructura de datos y organizacin de archivos. Mary E. S. Loomis
Pilas (Captulo 4 pgs. 57-61, 64-71) Colas (Captulo 5 pgs. 78-82, 85-97)

Data Structures and Algorithms in Java Michael T. Goodrich


(Captulos 3 y 5)

Bibliografa
Cmo programar en Java Deitel y Deitel
(Todos los temas sobre conceptos bsicos de programacin)

Object-Oriented Data Structures UsingJavaTM


Nell Dale Daniel T. Joyce Chip Weems (Linked Structures)

2.1 Listas enlazadas


Una definicin: Es un conjunto de datos no secuenciales, representados de forma tal que cada nodo apunta al siguiente elemento, es decir, se encuentran ligados o enlazados . (Loomis)

2.1 Listas enlazadas


Otra definicin: Es una coleccin lineal de objetos de una clase autorreferencia llamados nodos y conectados mediante enlaces de referencia.(Deitel y Deitel)

2.1 Listas enlazadas


Otra definicin: Es un TDA, dinmico, constituido por secuencia de elementos (nodos) organizados (no almacenados) uno tras otro (lista lineal), que se encuentran conectados mediante al menos una liga o enlace, que es una direccin o referencia a la memoria principal.

2.1 Listas enlazadas


Conceptos bsicos. Un nodo es un elemento de una lista ligada que tiene al menos un espacio para almacenar un dato y al menos un espacio para almacenar la referencia o direccin de memoria del siguiente elemento de la lista.

2.1 Listas enlazadas


NODO
Dato De Cualquier tipo Enlace/ Referencia/ Direccin

2.1 Listas enlazadas


EJEMPLOS DE LISTAS ENLAZADAS SIMPLES
5 7 14 NULL

inicio
A inicio A 9 G 5 H 15 NULL C D NULL

inicio

2.1 Listas enlazadas


DIRECCION VALOR

A inicio

NULL

A01

A02
. .

NULL

F05
F06
. .

A
9F7

inicio

9F7

9F8

A01

Memoria Principal (RAM)

2.1 Listas enlazadas


Algunas reglas: Es indispensable mantener una variable en el primer elemento de la lista (inicio). El ltimo elemento de la lista apunta o hace referencia a un valor nulo. Es opcional mantener una variable en el ltimo elemento de la lista.

2.1 Listas enlazadas

Se puede referenciar a cualquier elemento de la lista. El valor NULL sirve para indicar que NO hace referencia a algn lugar de la memoria. Cuando la lista an NO tiene nodos (vaca), inicio se inicializa con null (inicio = null).

2.1 Listas enlazadas


DIRECCION VALOR

A inicio

M fin

NULL

A01

M
. .

A02
F05 F06

NULL
A

fin

. .

9F7

inicio

9F7
9F8 999
. .

T
A01 FFF

Memoria Principal (RAM)

2.1 Listas enlazadas


Conceptos bsicos. El uso de listas enlazadas implica costos para el sistema:

Un espacio para la referencia o direccin. No poder acceder directamente a un elemento de la lista, a travs de un ndice.

2.1 Listas enlazadas


Tipos de listas enlazadas Existen diferentes tipos de listas enlazadas

Simples Dobles Circulares Multilistas

3.1 Listas enlazadas


Listas enlazadas simples

3.1 Listas enlazadas


Listas enlazadas dobles

3.1 Listas enlazadas


Listas enlazadas circulares

3.1 Listas enlazadas


Multilistas

2.1 Listas enlazadas

Son las listas en las que sus nodos estn enlazados nicamente con una liga. El recorrido de la lista es eficiente cuando se hace hacia un solo sentido de la misma.

2.1 Listas enlazadas


Operaciones bsicas con un nodo Crear nodo Asignarle valores Modificar sus valores Enlazar y desenlazar de la lista Buscar un nodo

2.1 Listas enlazadas


Operaciones bsicas con en una lista Crear la lista Insertar y eliminar nodos Recorrido de la lista

2.1 Listas enlazadas


Clase de autorreferencia: public class Nodo{ protected Object dato; protected Nodo siguiente; }

2.1 Listas enlazadas


Mtodos constructores: public Nodo(){ dato = null; siguiente = null;} public Nodo(Object d,Nodo n){ dato = d; siguiente = n; }

2.1 Listas enlazadas

Ejemplo de inicializacin de la lista: Nodo inicio; inicio = new Nodo(20,null); Con estas instrucciones se pone a inicio en el nodo que se solicit (el primero). El nodo tiene en dato 20 y en siguiente null.

2.1 Listas enlazadas


20 NULL

inicio

2.1 Listas enlazadas

Solicitar un nuevo nodo, darle valores.


5 NULL

temp

Enlazarlo al inicio de la lista


5 NULL
1

20

NULL

temp

inicio

2.1 Listas enlazadas

Solicitar un nuevo nodo, darle valores.


9 NULL

temp

Enlazarlo al final de la lista


20
2 1

NULL

inicio

NULL

temp

2.1 Listas enlazadas

Solicitar un nuevo nodo, darle valores.


5 NULL

temp

Enlazarlo al final de la lista


20 NULL

inicio

temp

2.1 Listas enlazadas

Hacer que inicio referencia al siguiente, o sea al que est despus de l.


20 9 5 NULL

inicio

El recolector de basura de Java se encarga de reutilizar al nodo sin referencia.

2.1 Listas enlazadas

Buscar el nodo que se encuentra antes del que se va a borrar.


9
1

20

NULL

inicio

temp

2.1 Listas enlazadas

Hacer que temp.siguiente sea igual a temp.siguiente.siguiente


20 9 7 5 NULL

inicio

temp

2.1 Listas enlazadas

Buscar el penltimo nodo.


20 9
1 2

NULL

inicio

temp

NULL

Hacer que apunte a null

2.1 Listas enlazadas


20 NULL

inicio

inicio.dato = 20; inicio.siguiente = null;

2.1 Listas enlazadas


20
9

NULL

inicio

inicio.siguiente.dato=9; inicio.siguiente.siguiente=null;

2.1 Listas enlazadas


20
9

NULL

temp

inicio

temp = inicio;

2.1 Listas enlazadas

La bsqueda consiste en hacer un recorrido secuencial desde el inicio de la lista hasta encontrar el elemento buscado. La comparacin se hace entre el dato a buscar y el dato del nodo visitado.

2.1 Listas enlazadas

El listado consiste en realizar un recorrido secuencial de la lista e ir mostrando los elementos de los nodos que se desean.

2.2 Pilas
Definicin: Es un TDA (Tipo de Dato Abstracto) Es un caso especial de una lista lineal en el cual, la insercin (push) y eliminacin (pop) son operaciones que solo pueden ocurrir en un extremo de la pila (tope de la pila).

2.2 Pilas
tope tope

tope

2.2 Pilas
Definicin: Tambin es conocida como estructura LIFO (Last In First Out) . El ltimo elemento que entra a la pila es el primero en salir.

2.2 Pilas

Se implementan con el uso de estructuras lineales


Estticas (vectores o arreglos) Dinmicas (listas enlazadas).

2.2 Pilas
push

tope tope

2.2 Pilas
pop

tope

tope

2.2 Pilas
Pila en arreglo (estticas)
tope 7 20 9 3 43 10
5 4 3 2 1 0

2.2 Pilas
Pila en lista enlazada (dinmicas)

10

43

20

7
tope

null

2.2 Pilas
Operaciones Creacin Insercin, push Eliminacin, pop Pila llena Pila vaca

2.2 Pilas estticas


Operaciones: Creacin
pila[6]
pila[5] pila[4]

int pila[] = new int[7]; int tope = -1;

pila[3]
pila[2]

pila[1]
pila[0] tope

2.2 Pilas estticas


Operaciones: Insercin, push
pila[6]
pila[5] pila[4]

tope++; pila[tope] = 5; tope ++; pila[tope] = 8; 3


tope

pila[3]
pila[2]

pila[1]
pila[0]

8
5

tope
tope tope

tope ++; pila[tope] = 3;

2.2 Pilas estticas


Operaciones: Extraccin, pop
pila[6]
pila[5] pila[4]

numero = pila[tope] ; tope --; numero =pila[tope]; tope--; 3


tope

pila[3]
pila[2]

pila[1]
pila[0]

8
5

tope
tope tope

2.2 Pilas estticas


Operaciones: Pila llena
pila[6]
pila[5] pila[4]

0
5 9

tope

Condicin que determina si la pila est llena

pila[3]
pila[2] pila[1] pila[0]

1 3 8
5

2.2 Pilas estticas


Operaciones: Pila vaca.
pila[6] pila[5] pila[4]

pila[3]
pila[2] pila[1] pila[0]

Condicin que determina si la pila est vaca


3 8 5
tope tope

tope
tope

Aplicaciones de pilas en programas.

Llamadas a subprogramas Recursividad Correspondencia de parntesis. Tratamiento de expresiones aritmticas.

Aplicaciones de pilas en programas.

Llamadas a subprogramas y recursividad

Correspondencia de parntesis
Una de las tareas del compilador es la de verificar que el programador ha especificado de forma correcta la sintaxis del lenguaje de programacin. Una pila se puede utilizar para facilitar el procedimiento.

Correspondencia de parntesis (procedimiento)


Se lee caracter por caracter, de izquierda a derecha, de la cadena que contiene la expresin, hasta terminar la cadena.
Cuando el caracter es un parntesis izquierdo (, se mete a la pila (push).

Correspondencia de parntesis (procedimiento)


Cuando el caracter es un parntesis derecho ), se revisa el contenido de la pila: Si la pila est vaca, no hay correspondencia y se finaliza. Si no est vaca, quiere decir que encontramos el par, y lo sacamos de la pila (pop).

Correspondencia de parntesis (procedimiento)


Cuando el caracter no es un parntesis derecho ni izquierdo, avanzamos al siguiente carcter.

Correspondencia de parntesis (procedimiento)


Cuando ya no hay caracteres que revisar en la cadena: Si la pila no est vaca, entonces no hay correspondencia, se finaliza. Si la pila est vaca, entonces hay correspondencia, se finaliza.

Tratamiento de expresiones aritmticas.


Otra de las tareas del compilador es la evaluacin de las expresiones aritmticas de los programas.
La evaluacin consiste en analizar cada uno de los caracteres que componen la expresin para que de acuerdo a los operadores y operandos proporcione un resultado final.

Tratamiento de expresiones aritmticas.


Entre otros mtodos para tal fin existen las notaciones infija, posfija y prefija. Estas notaciones son formas para acomodar la expresin de notacin infija (comnmente usada en las matemticas) a una notacin prefija o posfija para realizar los clculos.

Tratamiento de expresiones aritmticas.


Expresin en notacin infija: A+B
Expresin en notacin posfija AB+ Expresin en notacin prefija +AB

Tratamiento de expresiones aritmticas.


Para convertir las expresiones, los compiladores hacen uso de una pila, que sirve para ir convirtiendo la expresin a notacin prefija o posfija. Estas notaciones respetan la prioridad de operadores matemticos, as que se hace mas fcil obtener el resultado de la expresin.

Tratamiento de expresiones Aritmticas.


Dada una expresin en notacin infija, llevarla a notacin postfija usando pilas. Se usarn operandos de un caracter y los operadores +, -, /,*, (, )

Tratamiento de expresiones Aritmticas. (procedimiento)


Dada la expresin en notacin infija (5*4)+3
En notacin postfija quedara: 54*3+ Las expresiones en postfija, no tienen parntesis.

Tratamiento de expresiones Aritmticas.


Dada una cadena, que contiene una expresin en notacin infija. Se lee caracter por caracter, hasta terminar la cadena y tomar decisiones dependiendo del caracter encontrado. Utilizar una pila y una cadena resultado que contendr la expresin en posfija.

Tratamiento de expresiones Aritmticas.


Si el caracter es un operando (a, A, B, C, X, num, etc), inmediatamente se aade o concatena a la expresin resultado.
Si el caracter es un parntesis derecho, se sacan (pop), uno a uno, los elementos de la pila (operadores) que se concatenan a la expresin resultado hasta que aparezca un parntesis izquierdo.

Tratamiento de expresiones Aritmticas.


El parntesis izquierdo se saca de la pila (pop) pero no se concatena a la expresin resultado.
Si el siguiente caracter es parntesis izquierdo (, se introduce a la pila (push).

Tratamiento de expresiones Aritmticas.


Si el siguiente caracter es un operador (+, -, *, / ) se analiza el operador que se encuentra en el tope de la pila: Si tiene mayor prioridad que el que se encuentra en el tope de la pila, se introduce a la pila (push).

Tratamiento de expresiones Aritmticas.


Si el siguiente caracter en la cadena de entrada tiene igual o menor prioridad que el del tope de la pila, entonces se desapilan (pop) uno a uno los elementos de la pila hasta encontrar uno de menor prioridad, un parntesis izquierdo o la pila vaca Cuando esto suceda se apila el operador.

Tratamiento de expresiones Aritmticas.

Por ltimo, si es el ltimo caracter de la entrada, se saca (pop) todo lo que est en la pila enviando cada elemento a la cadena que es la expresin resultado.

Ejemplo
Llevar a postfija la siguiente expresin en notacin infija:

a + b * c + (d * e + f) * g

Ejemplo
Expresin en infija

a + b * c + (d * e + f) * g Primer carcter: es un operando Por lo tanto se aade a la Expresin resultado: a

Ejemplo
Expresin en infija

+ b * c + (d * e + f) * g Siguiente caracter: es un operador Por lo tanto se apila a


TOPE

Ejemplo
Expresin en infija

b * c + (d * e + f) * g

Siguiente caracter: es un Operando. Se aade a la expresin resultado: a b


TOPE

Ejemplo
Expresin en infija

* c + (d * e + f) * g

Siguiente caracter: es un Operador, por lo que se apila a b


TOPE

* +

Ejemplo
Expresin en infija

c + (d * e + f) * g

Siguiente caracter: operando, Se aade a la expresin resultado: a b c


TOPE

* +

Ejemplo
Expresin en infija

+ (d * e + f) * g Siguiente caracter: +operando, Caso Especial

b c

Se desapilan operadores hasta conseguir uno de menor o igual prioridad al operador ledo y se envan a la expresin resultado

TOPE

* +

Ejemplo
Expresin en infija

+ (d * e + f) * g

Caso Especial
a b c *

Se desapilan operadores hasta conseguir uno de menor o igual prioridad al operador ledo y se envan a la expresin resultado

TOPE

Ejemplo
Expresin en infija

+ (d * e + f) * g

Caso Especial
a b c * +

Se desapilan operadores hasta conseguir uno de menor o igual prioridad al operador ledo y se envan a la expresin resultado

TOPE

Ejemplo
Expresin en infija

+ (d * e + f) * g

Caso Especial

b c * +

Luego se apila el operador ledo

TOPE

Ejemplo
Expresin en infija

(d * e + f) * g

Siguiente carcter: un parntesis: Se apila.


a b c * +
TOPE

Ejemplo
Expresin en infija

d * e + f) * g

Siguiente carcter: un operando, Se aade a la expresin


a b c * + d
TOPE

Ejemplo
Expresin en infija

* e + f) * g Siguiente carcter: operador * Se apila aun cuando es de menor Prioridad que (

b c * + d
TOPE

Los parntesis no pueden desapilarse hasta que no aparezca un parntesis derecho

* (

Ejemplo
Expresin en infija

e + f) * g Siguiente carcter: e se Aade a la expresin

b c * + d e
TOPE

Los parntesis no pueden desapilarse hasta que no aparezca un parntesis derecho

* (

Ejemplo
Expresin en infija

+ f) * g Siguiente carcter: + , sacamos * de la pila y lo aadimos a la expresin, Apilamos +


TOPE

b c * + d e *

* (

Ejemplo
Expresin en infija

+ f) * g Siguiente carcter: + , sacamos * de la pila y lo aadimos a la expresin, Apilamos + a b c * + d e *


TOPE

Ejemplo
Expresin en infija

+ f) * g Siguiente caracter: + , sacamos * de la pila y lo aadimos a la expresin, apilamos +


TOPE

b c * + d e *

+ (

Ejemplo
Expresin en infija

f) * g

Siguiente caracter: f, se aade a la expresin resultado a b c * + d e * f

TOPE

+ (

Ejemplo
Expresin en infija

) * g Siguiente carcter: ) se desapilan todos los operadores hasta que aparezca Un parntesis izquierdo
TOPE

b c * + d e * f

+ (

Ejemplo
Expresin en infija

) * g Siguiente carcter: ) se Desapilan todos los operadores hasta que aparezca un parntesis izquierdo
TOPE

b c * + d e * f +

Ejemplo
Expresin en infija

) * g Siguiente caracter: ) se desapilan todos los operadores hasta que aparezca un parntesis izquierdo

b c * + d e * f +
TOPE

Ejemplo
Expresin en infija

* g

Siguiente caracter: *, se apila

b c * + d e * f +
TOPE

* +

Ejemplo
Expresin en infija

Siguiente carcter: g, se aade a la expresin resultado a b c * + d e * f + g


TOPE

* +

Ejemplo
Expresin en infija

Al quedar la cadena vaca, se desapilan todos los operadores y se aaden a la expresin resultado. a b c * + d e * f + g
TOPE

* +

Ejemplo
Expresin en infija

Al quedar la cadena vaca, se desapilan los operadores y se aaden a la expresin resultado. a b c * + d e * f + g *


TOPE

Ejemplo
Expresin en infija

Al quedar la cadena vaca, se desapilan los operadores y se aaden a la expresin resultado. a b c * + d e * f + g * +


TOPE

2.3 Colas (Queues)


Definicin: Es un TDA(Tipo de Dato Abstracto) Es un caso especial de una lista lineal en el cual, la insercin solo se puede dar en el final de la cola o fondo. y la eliminacin solo se puede dar en el inicio de la cola, o frente.

2.3 Colas (Queues)

frente

fondo

2.3 Colas (Queues)


Definicin: Tambin es conocida como FIFO (First In First Out) ya que el primer elemento que entra a la cola es el primero en salir.

2.3 Colas (Queues)


Definicin: Se implementa con el uso de estructuras lineales:

Estticas (arreglos o vectores) Dinmicas (listas enlazadas)

2.3 Colas (Queues)


Cola en arreglo (esttica)
fondo 7 20 9 3 43 10
5 4 3 2 1 0

frente

2.3 Colas (Queues)


Cola en lista enlazada (dinmica)

10
frente

43

20

7
fondo

null

2.3 Colas (Queues)


Las operaciones con colas son: Creacin Insercin Eliminacin Cola llena Cola vaca

2.3 Colas (Queues)


Existen tres tipos de colas: Colas simples Colas circulares Colas dobles

2.3 Colas (estticas)


Colas simples
3
5 3 5 2 8 7 4 11

fondo

2
8

fondo

frente

frente

2.3 Colas simples (estticas)


Colas simples En este tipo de colas, a pesar de tener espacios vacos (anteriores al frente), si el fondo es igual al total de elementos, aparenta estar llena.

2.3 Colas simples (estticas)


Creacin.
cola[6] cola[5] cola[4] cola[3] cola[2] cola[1]

int []cola = new int [7]; int fondo=-1; int frente = 0;

cola[0]

frente fondo

2.3 Colas simples (estticas)


Insercin.
cola[6]
cola[5] cola[4] fondo++; cola[fondo] = 5;

fondo++; cola[fondo] = 8;
fondo++; cola[fondo] = 3;

cola[3]
cola[2] cola[1] cola[0]

fondo

8
5

fondo
frente fondo fondo

2.3 Colas simples (estticas)


Extraccin.
cola[6]
cola[5] cola[4] numero = cola[frente] ; frente++;

cola[3]
cola[2] cola[1] cola[0]

frente

numero = cola[frente] ; frente++; numero = cola[frente] ; frente++;

fondo frente frente frente

8
5

2.3 Colas simples (estticas)


Cola vaca.
cola[6]
cola[5] cola[4] cola[3] cola[2] cola[1] cola[0] fondo

cola[6]
cola[5] cola[4]

cola[3]
cola[2] cola[1] frente cola[0]

frente fondo

Condicin que determina si la cola est vaca

2.3 Colas simples (estticas)


Cola llena.
cola[6]
cola[5] cola[4]

1
9 7

fondo

cola[6]

fondo

cola[5]
cola[4] cola[3]

9
7 5

cola[3]
cola[2] cola[1] cola[0]

5
3

Condicin que determina si la cola est llena

cola[2]
cola[1] frente cola[0]

frente

8
5

2.3 Colas circulares


Definicin: Es una variante de colas. Es una cola que resuelve el problema de las colas simples, en el que a pesar de tener espacio, aparenta estar llena. Ya que utiliza todos los espacios de la lista.

2.3 Colas circulares


frente fondo frente fondo

2.3 Colas circulares


Operaciones: Utiliza las mismas operaciones que las colas simples (creacin, insercin, eliminacin, cola llena, cola vaca). Pero varan las condiciones y las tareas de las operaciones insertar, eliminar y cola llena.

2.3 Colas dobles


Definicin: Es una variante de colas. Es una cola en las que las entradas y salidas se pueden dar en cualquiera de los dos extremos de la lista. Por su comportamiento se podra decir que funciona como pila y como cola simple.

2.3 Colas dobles


Definicin: Su implementacin es mucho mas eficiente si se utilizan listas doblemente enlazadas

2.3 Colas dobles

11

fondo

frente

2.3 Colas /aplicaciones

Sistemas operativos

Colas de atencin de procesos Colas de impresin Colas de paso de mensajes en procesos concurrentes Colas de paso de mensajes en redes

Sistemas de simulacin

Vous aimerez peut-être aussi