Sei sulla pagina 1di 42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Es t r uct ur a d e
D at os
Estructura de Datos

Bu sca r en est e si t i o

Estructura de Datos
>

Unidad I
Introduccin a las
estructuras de
datos

Unidad III Estructuras Lineales

Unidad II
Recursividad

Pilas

Unidad III
Estructuras
Lineales

Una pila, es una estructura de datos en la que el ltimo


elemento en entrar es el primero en salir, por lo que tambin
se denominan estructuras LIFO (Last In, First Out) o
tambin estructuras lineales con una poltica UEPS (Ultimo
en entrar, primero en salir).

Unidad IV
Estructuras no
lineales
Unidad V Mtodos
de ordenamiento
Unidad VI Mtodos
de bsqueda
Unidad VII Anlisis
de los algoritmos
Mapa del sitio

En esta estructura slo se tiene acceso a la cabeza o cima


de la pila, tambin solo se pueden insertar elementos en la
pila cuando esta tiene espacio y solo se pueden extraer
elementos de la pila cuando tenga valores.
Operaciones asociadas con la pila
Crear la pila
Ver si la pila esta vaca
Insertar elementos en la pila
Eliminar un elemento de la pila
Vaciar la pila

Representacin grafica de la operacin de una pila

https://sites.google.com/site/estdatjiq/home/unidad-iii

1/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Translate

Las operaciones bsicas en una pila son push y pop

- Push me permite insertar un elemento a la pila

- Pop extrae un elemento de la pila

La forma de implementar una pila es a travs de:

- Por medio de un arreglo unidimensional

- A travs de la clase Stack de la java.util.*

- Con una lista de elementos.

Ejercicio 1. Implementar una pila y cada una de sus


operaciones a travs de un arreglo unidimensional.

Pilas a travs de la clase Stack.


Stack (Pila) es una subclase de Vector que implementa
una pila estndar; ultimo en entrar, primero en salir.

Stack solo define el constructor por defecto, que crea una


pila vaca. Stack incluye todos los mtodos definidos por
vector y aade varios mtodos propios:
Mtodo
boolean
empty( )
https://sites.google.com/site/estdatjiq/home/unidad-iii

Descripcin
Devuelve true si la pila esta vaca y false
si la pila contiene elementos.
2/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Object peek( Devuelve el elemento en lo alto de la pila,


)
pero no lo quita.
Object pop( )

Devuelve el elemento en lo alto de la pila


y lo quita.

Object
push(Object
elemento)

Introduce elemento en la pila, tambin


devuelve elemento.

int
Busca elemento en la pila. Si lo
search(Object encuentra, devuelve su desplazamiento
elemento)
desde lo alto de la pila. De lo contrario,
se devuelve -1.
Es decir devuelve las veces que hay que
hacer pop para que el dato este en la
cima.

El error que marca en caso de que se quiera sacar un


elemento y que la pila ya esta vaca es
EmptyStackException.
Ejercicio 2. Realizar una aplicacin que muestre el uso de la
clase Stack y de cada una de las operaciones de la pila
estndar.

Ejercicios de Pila Jueves 15 de Septiembre 2011


Realizar un programa que imprima una cadena de
entrada a travs de una pila estandar.
Realizar un programa que imprima una cadena de
entrada a travs de una pila (Utilizando la clase Stack).
Proceso:
a) Leer cadena de entrada o definir una cadena a imprimir
alreves.
b) Convertir la cadena a caracteres
c) Insertarla en la Pila los caracteres de la cadena(Push)
d) Imprimir la cadena sacando los valores de la Pila
mediante Pop.
https://sites.google.com/site/estdatjiq/home/unidad-iii

3/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Verificar si una cadena de caracteres est balanceada


en parntesis o no
abc(defg(ijk))(l(mn)op)qr SI
abc(def))ghij(kl)m

NO

Ejercicio extraclase (Solo practica)


Implementar la solucin de las torres de Hanoi
mediante Pilas
El juego de las torres de Hanoi, o torres de diamante, es un
juego oriental muy antiguo que hoy se conoce en todo el
mundo.
Consta de tres columnas y una serie de discos de distintos
tamaos. Los discos estn acomodados de mayor a menor
en una de las columnas.

El juego consiste en pasar todos los discos a otra de las


columnas y dejarlos acomodados como estaban: de mayor
a menor.
L a s .. r e g l a s .. d e l .. j u e g o .. s o n .. l a s .. s i g u i e n
tes:

https://sites.google.com/site/estdatjiq/home/unidad-iii

4/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Slo se puede mover un

disco cada vez.

2 Para cambiar los discos de lugar se pueden usar las tres


columnas del juego; es decir que los distintos discos se
pueden ir acomodando en las columnas segn convenga.

3 Nunca deber quedar un disco grande sobre un disco


chico.
Dar click sobre la siguiente imagen y te mostrara la solucin

Buscar notacin infija y notacin


Polaca (postfija).
(a+b) = ab+
(a+b)/(c*d) =

Notacin infija y postfija


La notacin infija es la forma natural de escribir
expresiones aritmticas por ejemplo (A+B)*C y A+ (B*C),
en esta notacin se sita el operador entre sus operandos.
El inconveniente de esta notacin es que muchas veces se
necesita de parntesis para indicar el orden de evaluacin:
A*B/(A+C) <> A*B/A+C (diferente resultado).
https://sites.google.com/site/estdatjiq/home/unidad-iii

5/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Suponga que queremos evaluar la siguiente expresin


aritmtica sin parntesis:
2 3 + 5 * 2 2 12 / 6
Primero evaluamos las potencias para obtener
8 + 5 * 4 12 / 6
Entonces evaluamos la multiplicacin y divisin y se obtiene
8 + 20 -2.
Evaluamos la suma y la resta y se obtiene 26 realizndola
en 3 niveles de precedencia
La notacin postfija (Polaca inversa) debe su nombre al
matemtico polaco Jan Lukasiewicz, y en esta notacin el
smbolo operador se coloca delante de sus operandos.
La ventaja de la notacin postfija es que no se requieren de
parntesis para su evaluacin, adems es ms utilizada por
las computadoras ya que permite una forma muy sencilla y
eficiente de evaluar expresiones aritmticas (con pilas).

Infija

Postfija

a/b+c*d-e*f ab/cd*+ef*a*b / (a+c)

ab*ac+/

Conversin de Infija a Postfija a travs de pilas.


Primero hay que saber que en una expresin se tienen
operadores y que estos tienen cierta prioridad.
Operadores

Operador

Smbolo Prioridad

Parntesis

()

Potencia

Mas alta

Multiplicacin / Divisin * /
Suma / Resta

https://sites.google.com/site/estdatjiq/home/unidad-iii

+-

Mas Baja

6/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

En caso de una igualdad en una expresin:

Son evaluados de izquierda a derecha (se evala

primero el que primero aparece) 5*4/2 = (5*4)/2 = 10

Cuando aparecen varios operadores de potenciacin

juntos la expresin se evala de derecha a izquierda


2^3^2 = 2^(3^2) = 2^9 = 512

Pseudocdigo
1. Inicializar la pila
2. Repetir hasta que no haya caracteres en la expresin de
entrada
2.1 Leer un carcter de la expresin
2.2 Si es un operando se pasa a la expresin postfija
de salida
2.3 Si el elemento es un operador distinto de )
entonces:
2.3.1 Si la pila est vaca se mete en la pila.
2.3.2 Si la pila NO est vaca
Si la prioridad del operador es mayor
que la prioridad del operador de la
cima de la pila se mete en la pila
Si la prioridad del operador es menor o
igual que la prioridad del operador de
la cima de la pila se saca el
operador de la cima y se coloca en la
expresin postfija. Volvemos a 2.3
2.4 Si el elemento es el operador ) entonces:
2.4.1 Se sacan operadores de la pila hasta
encontrar el parntesis ( que se elimina (las
expresiones postfijas no llevan parntesis)
3. Al finalizar el recorrido por la expresin aritmtica se
pasa todo el contenido de la pila a la expresin postfija

Ejemplo:
Expresin aritmtica infija: A*B / (A+C)
https://sites.google.com/site/estdatjiq/home/unidad-iii

7/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Expresin aritmtica postfija: AB*AC+/

Tablas de prioridad
Notacin infija
Notacin postfija

Operador

Prioridad

Operador

Prioridad

(,)

/,*

/,*

+,-

+,-

Expresin postfija a evaluar


A*B / (A+C)

Evaluacin de una Notacin Postfija


Pseudocdigo
1.

Inicializar la pila

2. Repetir hasta que no haya caracteres en la expresin a evaluar


https://sites.google.com/site/estdatjiq/home/unidad-iii

8/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

2.1 Obtener el siguiente item de la expresin


2.2. Si el elemento es un operando se mete en la pila

2.3 Si el elemento es un operador (denominado &)


entonces:
2.3.1 Se extraen los dos elementos superiores de la
pila, denominados Op2 y Op1 respectivamente.
2.3.2 Se evala el resultado de Op1 & Op2 y se
almacena en Z
2.3.3 Se introduce Z en la cima de la pila
3. Obtener el valor de la expresin de la cima de la pila

Ejemplo:
Expresin aritmtica infija: A*B / (A+C)
Expresin aritmtica postfija: AB*AC+/
Valores A=4, B=5 y C=6: 45*46+/

https://sites.google.com/site/estdatjiq/home/unidad-iii

9/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Colas
Una cola, es una estructura de datos lineal que permite
almacenar elementos por un extremo y extraerlos por el
otro. Por tal motivo, es una estructura FIFO (first in, first out:
primero en entrar, primero en salir).

Al igual que en las pilas, se debe tener el control de la cola,


tomando en cuenta de que si se quiere extraer un elemento
de la cola se debe asegurar de que no est vaca, o si se
quiere insertar un elemento se debe asegurar de que la cola
no est llena, estas dos acciones se deben desarrollar al
hacer operaciones con una cola. Las operaciones que
aplican a una cola son:
-

Crear una cola.


Revisar si la cola est vaca.
Revisar si la cola est llena.
Insertar un elemento en la cola.
Extraer un elemento de la cola.
Revisar cul es el siguiente elemento en la cola.

Funcionamiento
Cola vaca

Se va a insertar un elemento en la cola, el nmero 10


push(10)(Los elementos se insertan al final de la cola)
10

Se va a insertar otro elemento en la cola, el nmero 13


push(13) (Los elementos se insertan al final de la cola)
10
https://sites.google.com/site/estdatjiq/home/unidad-iii

13
10/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Se va a insertar otro elemento en la cola, el nmero 15


push(15) (Los elementos se insertan al final de la cola)
10

13

15

Se va a insertar otro elemento en la cola, el nmero 20


push(20)(Los elementos se insertan al final de la cola)
10

13

15

20

Se va a insertar otro elemento en la cola, el nmero 5


push(5)(Los elementos se insertan al final de la cola)
10

13

15

20

Si se quiere insertar otro elemento en la cola entonces debe


de marcar cola llena, ya que no hay espacio para almacenar
ningn otro valor

Se extrae un valor de la cola llamando al mtodo pop()


(todos los valores de la cola se sacan del inicio).
10

13

15

20

15

20

Sale el valor de 10.


13

Al sacar el valor de 10 queda con espacio vaco en la


primera posicin por lo que se debe de recorrer para que
quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


13

15

20

Si se extrae un valor de la cola llamando al mtodo pop()


(todos los valores de la cola se sacan del inicio).
https://sites.google.com/site/estdatjiq/home/unidad-iii

11/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

13

15

20

20

Sale el valor de 13.


15

Al sacar el valor de 13 queda con espacio vaco en la


primera posicin por lo que se debe de recorrer para que
quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


15

20

Y as sucesivamente hasta que no queden ms elementos


en la cola y si se quiere sacar un valor entonces va a marcar
cola vacia.

Colas Circulares.
Una cola circular es una estructura de datos lineal que hace
un uso ms eficiente de la memoria disponible para su
almacenamiento, sin la necesidad de requerir ms espacio,
utilizando el que este desocupado. La cola se controla en
forma circular, es decir, el elemento anterior al primero es el
ltimo.

Para crear una cola circular se debe tener el control de tres


puntos dentro de la cola que son:
- La posicin del primer elemento en la cola (inicio),
- La posicin del ltimo elemento en la cola (final) y
- El tamao de la cola (mximo)

https://sites.google.com/site/estdatjiq/home/unidad-iii

2 3 4

6 7

12/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

0
ini

1 2 3

fin max

0 1

fin ini

5
max

Tomando en cuenta que en una cola simple se controlan las


operaciones cola vaca y cola llena, en una cola circular
tambin se deben controlar estos dos aspectos.
- La cola circular est vaca cuando el inicio de la
cola se encuentra fuera del arreglo.
La cola circular est llena cuando el inicio se
localiza en la primera posicin y el fin se encuentra
una posicin entes del tamao del arreglo o cuando
la posicin del inicio es igual al fin ms uno.

Ejercicio. Utilizar un arreglo unidimensional para crear una


cola circular en donde se puedan realizar las operaciones
que aplican a una cola, como son: tamao, borrar, insertar,
extraer, siguiente, mostrar y salir.

https://sites.google.com/site/estdatjiq/home/unidad-iii

13/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Doble Cola o Bicola.


Una doble cola o bicola es una estructura de datos lineal
para almacenar elementos, los cuales se pueden ingresar y
extraer por cualquiera de los dos lados de la cola. Estas
colas obedecen a que en ocasiones especiales es
necesario invalidar la regla primero en entrar, primero en
salir, utilizando un criterio de prioridad.

Por ejemplo

cuando llega una persona con discapacidad al banco este


debe de atenderse primero, aunque exista gente antes que
ella, o en el caso de las autopistas para el caso de pase de
policas, ambulancias, bomberos no necesitan formarse y
entonces el proceso de la cola cambia en esas situaciones.

Este tipo de estructuras tiene dos variantes:


-

Doble cola con entrada restringida.

Permite

la

extraccin de

los

elementos

por

cualquiera de los dos lados y la insercin solo por el


final de la cola.

Los datos entran por un solo extremo siempre no


importando la prioridad, pero si llega alguien con mayor
prioridad entonces este debe de atender primero.

https://sites.google.com/site/estdatjiq/home/unidad-iii

14/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Ejemplo del funcionamiento:


Cola vaca

Se va a insertar un elemento en la cola, el nmero 10


push(10)(Los elementos se insertan al final de la cola)
10

Se va a insertar otro elemento en la cola, el nmero 13


push(13) (Los elementos se insertan al final de la cola)
10

13

Se va a insertar otro elemento en la cola, el nmero 15


push(15) (Los elementos se insertan al final de la cola)
10

13

15

Se va a insertar otro elemento en la cola, el nmero 20


push(20)(Los elementos se insertan al final de la cola)
10

13

15

20

Se va a insertar otro elemento en la cola, el nmero 5


push(5)(Los elementos se insertan al final de la cola)
10

13

15

20

Si se quiere insertar otro elemento en la cola entonces debe


de marcar cola llena, ya que no hay espacio para almacenar
ningn otro valor.

Se extrae un valor de la cola llamando al mtodo pop() con


prioridad 1 (el valor se sacan del inicio).
https://sites.google.com/site/estdatjiq/home/unidad-iii

15/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

10

13

15

20

15

20

Sale el valor de 10.


13

Al sacar el valor de 10 queda con espacio vaco en la


primera posicin por lo que se debe de recorrer para que
quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


13

15

20

Si se extrae un valor de la cola llamando al mtodo pop()


con prioridad 1(el valor se sacan del inicio).
13

15

20

20

Sale el valor de 13.


15

Al sacar el valor de 13 queda con espacio vaco en la


primera posicin por lo que se debe de recorrer para que
quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


15

20

Si se extrae un valor de la cola llamando al mtodo pop()


con prioridad 2(el valor se saca por el final).
15

20

Sale el valor de 5.
15

20

Y as sucesivamente hasta que no queden ms elementos


en la cola y si se quiere sacar un valor entonces va a marcar
cola vacia.
https://sites.google.com/site/estdatjiq/home/unidad-iii

16/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Doble cola con salida restringida.

Permite la insercin de los elementos por cualquiera


de los dos lados y la extraccin solo por el inicio de
la cola.

La extraccin de los datos es igual para todos los


elementos por el mismo lado, pero si llega alguien con
mayor prioridad se debe de insertar al inicio de la cola, y si
es de menor prioridad se inserta al final de la cola.

Ejemplo del funcionamiento:


Cola vaca

Se va a insertar un elemento en la cola, el nmero 10


push(10)con prioridad 1(Se inserta al final de la cola)
10

Se va a insertar otro elemento en la cola, el nmero 13


push(13) con prioridad 1 (Se inserta al final de la cola)
10

13

Se va a insertar otro elemento en la cola, el nmero 15


push(15) con prioridad 1 (Se inserta al final de la cola)
10

https://sites.google.com/site/estdatjiq/home/unidad-iii

13

15

17/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Se va a insertar otro elemento en la cola, el nmero 20


push(20) con prioridad 2 (Se inserta al inicio de la cola )
20

10

13

15

Se va a insertar otro elemento en la cola, el nmero 5


push(5)con prioridad 2(Se inserta al inicio de la cola)
5

20

10

13

15

Si se quiere insertar otro elemento en la cola entonces debe


de marcar cola llena, ya que no hay espacio para almacenar
ningn otro valor.

Se extrae un valor de la cola llamando al mtodo pop() (el


valor se sacan del inicio).
5

20

10

13

15

10

13

15

Sale el valor de 5.
20

Al sacar el valor de 5 queda con espacio vaco en la


primera posicin por lo que se debe de recorrer para que
quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


20

10

13

15

Si se extrae un valor de la cola llamando al mtodo pop() (el


valor se sacan del inicio).
20

10

13

15

13

15

Sale el valor de 20.


10

Al sacar el valor de 20 queda con espacio vaco en la


https://sites.google.com/site/estdatjiq/home/unidad-iii

18/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

primera posicin por lo que se debe de recorrer para que


quede espacio para almacenar un nuevo valor.

Cola con recorrido aplicado


10

13

15

Y as sucesivamente hasta que no queden ms elementos


en la cola y si se quiere sacar un valor entonces va a marcar
cola vaca.

3.3 Listas enlazadas.


Una lista enlazada o estructura ligada, es una estructura
lineal que almacena una coleccin de elementos
generalmente llamados nodos, en donde cada nodo puede
almacenar datos y ligas a otros nodos. De esta manera los
nodos pueden localizarse en cualquier parte de la memoria,
utilizando la referencia que lo relaciona con otro nodo dentro
de la estructura.
Las listas enlazadas son estructuras dinmicas que se
utilizan para almacenar datos que estn cambiando
constante mente. A diferencia de los vectores, las
estructuras dinmicas se expanden y se contraen
hacindolas ms flexibles a la hora de aadir o eliminar
informacin.
Las listas enlazadas permiten almacenar informacin en
posiciones de memoria que no sean contiguas; para
almacenar la informacin contienen elementos llamados
nodos. Estos nodos poseen dos campos uno para
almacenar la informacin o valor del elemento y otro para el
enlace que determina la posicin del siguiente elemento o
nodo de la lista.
Lo ms recomendable y flexible para la creacin de un
nodo es utilizar un objeto por cada nodo, para ello debe
comprender cuatro conceptos fundamentales que son:
https://sites.google.com/site/estdatjiq/home/unidad-iii

Clase auto-referenciada,
Nodo,
Campo de enlace y
19/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Enlace

Una clase auto-referenciada es una clase con al menos un


campo cuyo tipo de referencia es el nombre de la misma
clase.
public clase Nodo
{
Object elemento;
Nodo siguiente;
//mtodos
}
El cdigo anterior es una clase auto-referenciada porque su
campo siguiente tiene el tipo Nodo.
El nodo es un objeto creado a partir de una clase autoreferenciada.
El campo de enlace es la variable de instancia que
contiene el tipo que corresponde con el nombre de la clase
(para el caso anterior variable siguiente).
El enlace es el contenido del campo de enlace, que hace
referencia (guarda la direccin) a otro nodo.
Las operaciones que se pueden hacer con una lista son:
-

Insercin de un elemento.
Borrado de un elemento.
Recorrido de la lista.
Bsqueda de un elemento.

Las listas enlazadas se dividen en:


Listas enlazadas simples (con una sola
direccin) y
Listas enlazadas dobles (con dos direcciones).
3.3.1 Simples.
Una lista enlazada simple es una coleccin de nodos que
tienen una sola direccin y que en conjunto forman una
estructura de datos lineal. Cada nodo es un objeto
compuesto que guarda una referencia a un elemento (dato)
y una referencia a otro nodo (direccin).
La referencia que guarda un nodo a otro nodo se puede
considerar un enlace o un puntero hacia el segundo nodo y
https://sites.google.com/site/estdatjiq/home/unidad-iii

20/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

el salto que los relaciona recibe el nombre de salto de


enlace o salto de puntero. El primer nodo de una lista
recibe el nombre de cabeza, cabecera o primero y el ltimo
es llamado final, cola o ltimo (es el nico nodo con la
referencia a otro objeto como nula).
Un nodo de una lista enlazada simple puede determinar
quien se encuentra despus de l pero no puede
determinar quien se encuentra antes, ya que solo cuenta
con la direccin del nodo siguiente pero no del anterior.
cabeza
final

Los elementos cabeza y final de la figura son referencia


creadas a partir de la clase que se crean los nodos.

Operaciones
Insercin de elementos
Al final de la lista

Verificar si la lista est vaca


o Si est vaca la lista es decir inicio==null
Se crea un nuevo nodo o se asigna
un nuevo nodo al inicio
Final se hace que apunte tambin al
inicio ya que es el nico nodo.
o Si ya existe por lo menos un nodo
Se crea o se asigna un nuevo nodo a

https://sites.google.com/site/estdatjiq/home/unidad-iii

21/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

fin.sig=nuevo;
Final se hace que apunte al nuevo
nodo ya que ahora sera el final.

Al inicio de la lista

Verificar si la lista est vaca


o Si est vaca la lista es decir inicio==null
Se crea un nuevo nodo o se asigna
un nuevo nodo al inicio
Final se hace que apunte tambin al
inicio ya que es el nico nodo.
o Si ya existe por lo menos un nodo
Se crea un nodo que se hace que
apunte al inicio nuevo.sig=inicio
Se hace que inicio ahora apunte al
primer

elemento

que

es

nuevo

inicio=nuevo

En alguna posicin especifica

Verificar si la lista est vaca o posicin es igual a

cero
o Si est vaca la lista es decir inicio==null
Se crea un nuevo nodo o se asigna
un nuevo nodo al inicio
Final se hace que apunte tambin al
https://sites.google.com/site/estdatjiq/home/unidad-iii

22/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

inicio ya que es el nico nodo.


o Si ya existe por lo menos un nodo

Se recorre la lista contando las

posiciones de los elementos dentro de


la lista (pos++), adems se debe de
recorrer conociendo el nodo anterior y
el siguiente con el fin de reorganizar la
lista al insertar un nuevo elemento.
Si se localiza la posicin buscada y
siguiente

es

diferente

de

null.

if(cont==posi && sig!=null)

Se crea un nuevo nodo y

se hace que apunte al siguiente


nodo y adems que el nodo
anterior apunte al nuevo nodo.
nuevo.sig=sig y ant.sig=nuevo.
Si no se localiza la posicin (indica
que se dio una posicin mayor a la
cantidad de elementos, entonces se
agrega el elemento al final de la lista.

Eliminacin de elementos
Del inicio de la Lista

Verificar si la lista est vaca


o Verificar si hay un solo nodo

https://sites.google.com/site/estdatjiq/home/unidad-iii

23/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Si hay un solo nodo se pone


ini=fin=null
o Si hay ms de un nodo
El inicio es ahora el siguiente
ini=ini.sig

Del final de la Lista

Verificar si la lista est vaca


o Verificar si hay un solo nodo
Si hay un solo nodo se pone
ini=fin=null
o Si hay ms de un nodo
Se debe recorrer la lista llevando
el anterior y el siguiente mientras
que anterior.sig sea diferente del
final o del siguiente. (debe de
construir primero el nodo anterior
para poder comparar con
siguiente)
Al llegar al final entonces el
anterior se debe de poner como
final, y a final.sig como null

De cierta posicin

Verificar si la lista est vaca


o Verificar si hay un solo nodo

https://sites.google.com/site/estdatjiq/home/unidad-iii

24/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Si hay un solo nodo se pone


ini=fin=null
o Si hay ms de un nodo
Se debe recorrer la lista llevando
el anterior, siguiente y el contador
de las posiciones mientras que
siguiente sea diferente de null.
Si cont==0 entonces se elimina
del inicio
En otro caso si cont==pose y
adems sig!=null se pone a
anterior.sig la direccin de
siguiente.sig para eliminar a
siguiente.
Tambin hay que verificar si es el
ltimo elemento para ponerlo como
final si anterior.sig==null entonces
se debe poner como final. fin=ant;
Si no se localiza la posicin se
elimina del final de la lista.

Dobles.
Una lista enlazada doble es una coleccin de nodos que
cuentan con dos direcciones en cada uno de sus nodos y
que en conjunto forman una estructura de datos lineal. Cada
nodo es un objeto compuesto que guarda una referencia a
un elemento (dato), una referencia al nodo anterior
(direccin predecesora) y una referencia al nodo siguiente
(direccin sucesora).
Un nodo de una lista enlazada doble puede determinar
https://sites.google.com/site/estdatjiq/home/unidad-iii

25/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

quien se encuentra despus de l y quien se encuentra


antes de l, ya que cuenta con las direcciones de los nodos
siguiente y anterior.

Operaciones
Insercin (Al final del la lista, al inicio de la lista y en
cierta posicin de la lista)
Recorrido (Por el inicio y por el final)
Eliminacin (Del inicio de la lista, del final de la lista y
de cierta posicin de la lista).
Insercin
Al final de la lista

Si la lista est vaca


o Se crea el nuevo nodo
o Se pone a inicio a que apunte al nuevo
nodo ini=nuevo
o Se pone a final a que apunte al inicio
fin=ini

Si hay por lo menos un nodo


o Se crea el nuevo nodo
o El ultimo nodo en su campo siguiente
se hace que apunte al nuevo nodo
fin.sig=nuevo
o El nodo nuevo en su campo anterior se
hace que apunte a fin, nuevo.ant=fin
o Por ltimo se pone a nuevo como final,

https://sites.google.com/site/estdatjiq/home/unidad-iii

26/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

final=nuevo

Al inicio de la lista

Si la lista est vaca


o Se crea el nuevo nodo
o Se pone a inicio a que apunte al nuevo
nodo ini=nuevo
o Se pone a final a que apunte al inicio
fin=ini

Si hay por lo menos un nodo


o Se crea el nuevo nodo
o El inicio en su campo anterior se hace
que apunte al nuevo nodo ini.ant=nuevo
o El nodo nuevo en su campo siguiente
se hace que apunte a inicio, nuevo.sig=ini
o

Por ltimo se pone a nuevo como

inicio, ini=nuevo;

En una posicin especfica

Si la lista est vaca


o Se crea el nuevo nodo
o Se pone a inicio a que apunte al nuevo
nodo ini=nuevo
o Se pone a final a que apunte al inicio
fin=ini

https://sites.google.com/site/estdatjiq/home/unidad-iii

27/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Si hay por lo menos un nodo


o Se crea el nuevo nodo
o Se realiza un recorrido llevando solo un
nodo

hasta

llegar

la

posicin

especificada.
Debe de definir un nodo que sea
la referencia del primer nodo.
Nodo temp=ini
Debe definir una variable entera
que cuente las posiciones dentro
de la lista.
Iniciar el recorrido mediante un
ciclo mientras que temp!=null y
adems cont sea diferente de la
posicin donde se quiere insertar el
nuevo elemento.
o Al finalizar el recorrido a la posicin
buscada
Puede ser que cont se quede con
0

Entonces debe de

insertar el elemento al inicio


Pero si encontr la posicin y
cont tiene el mismo valor, adems
debe de checar que temp no se
quede con null;

cont==posi

&&

temp!=null

https://sites.google.com/site/estdatjiq/home/unidad-iii

28/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Se crea un nuevo

nodo

Se crea una

referencia que apunte al


nodo anterior
Nodo

o
ant=temp.ant

Anterior en su campo

siguiente

se

hace

que

apunte al nuevo nodo.


o ant.sig=nuevo

Se hace que nuevo en

su campo siguiente se hace


que apunte a temp.
o nuevo.sig=temp

Se crea la liga para

que nuevo en su campo


anterior apunte a anterior
o nuevo.ant=ant
Pero si la posicin es mayor que
la cantidad de elementos que tiene
la lista entonces se debe de
agregar al final de la lista.

Recorridos
Recorrido a partir del inicio

https://sites.google.com/site/estdatjiq/home/unidad-iii

29/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Se crea una referencia de Nodo para

empezar el recorrido a partir del inicio. Nodo


temp=ini

Se realiza el recorrido a travs de un ciclo

mientras que temp!=null


o

Se imprime el valor al que hace

referencia temporal en ese momento


temp.num
o Se avanza al siguiente elemento de la
lista. Temp=temp.sig

Recorrido a partir del final

Se crea una referencia de Nodo para

empezar el recorrido a partir del inicio. Nodo


temp=fin

Se realiza el recorrido a travs de un ciclo

mientras que temp!=null


o

Se imprime el valor al que hace

referencia temporal en ese momento


temp.num
o Se retrocede al elemento anterior en la
lista. Temp=temp.ant

Eliminar
Del inicio de la lista

https://sites.google.com/site/estdatjiq/home/unidad-iii

30/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Si la lista no est vaca


o Si hay un solo elemento
ini=fin=-1
o Si hay por lo menos un elemento
Crear una referencia del nodo que
sigue del inicio

Nodo sig=ini.sig;

Eliminar la liga del inicio al siguiente


elemento

ini.sig=null

Poner a siguiente en el campo

anterior a null

Sig.ant=null

Poner el siguiente como el nodo del


inicio.

Ini=sig

Del final de la lista

Si la lista no est vaca


o Si hay un solo elemento
Ini=fin=-1
o Si hay por lo menos un elemento
Crear una referencia del nodo anterior al
final

https://sites.google.com/site/estdatjiq/home/unidad-iii

31/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Nodo ant=fin.ant

Poner a null el campo siguiente de

anterior

ant.sig=null

Eliminar la liga del final en su campo


anterior

Fin.ant=null

Poner al nodo anterior como final

Fin=ant

De una posicin especifica

Verificar si la lista no est vaca


o Si hay un solo elemento
Ini=fin=-1
o Si hay por lo menos un elemento
o Se realiza un recorrido hasta la posicin
buscada a partir del inicio, llevando un
contador mientras cont!=pos y temp.sig!=null
Nodo Temp=ini int cont=0
o Si al hacer el recorrido cont==0 entonces
se elimina del inicio
o Si el cont==pos y temp.sig!=null entonces
se elimina de esa posicin
Se crean referencias del anterior y

https://sites.google.com/site/estdatjiq/home/unidad-iii

32/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

del siguiente

Nodo ant=temp.ant,

sig=temp.sig
Se establecen las ligas entre ant y
sig

ant.sig=sig

sig.ant=ant

Se eliminan las ligas de temp

temp.sig=null

temp.ant=null

o Si no se encuentra la posicin se inserta al


final

Listas con la clase ArrayList.


La clase ArrayList, permite crear una estructura de datos
con bloques de memoria continuos similar a un arreglo
unidimensional. El objeto creado a partir de la clase
ArrayList es por lo tanto un arreglo flexible; es decir, un
arreglo que puede cambiar su tamao de forma dinmica.
Esta estructura puede ser ideal para el manejo de pilas,
colas y listas, y se encuentra definida en la librera util.
Constructores de la clase ArrayList:
ArrayList lista=new ArrayList();
ArrayList lista=new ArrayList(int capacidad);
ArrayList lista=new ArrayList(Collection coleccin);
El primer constructor crea un objeto llamado lista de una
capacidad inicial de 10 elementos, el segundo constructor
crea una lista de una capacidad inicial indicada por un valor
de
tipo
entero,
se
lanza
la
excepcin
IllegalArgumentException si la capacidad es inferior a 1 y
https://sites.google.com/site/estdatjiq/home/unidad-iii

33/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

el tercer constructor crea una lista con la coleccin de


elementos que se pasan como argumento apoyndose de
la clase Collection.

Mtodos de la clase ArrayList:

Mtodo

Funcin del mtodo y sintaxis.

add()

Inserta un elemento al final de la


lista retornando un valor boleano si
se pudo insertar o no.

var_boolean=lista.add(Object
elemento);

Inserta un elemento en la posicin


indicada desplazando los dems
elementos una posicin hacia el
final de la lista, lanza la excepcin
IndexOutOfBoundsException si la
posicin est fuera del tamao de
la lista.

lista.add(int
elemento);

clean()

posicion,

Object

Elimina todos los elementos de la


lista.

lista.clean;
clone()

Regresa una copia de la lista.

lista_destino=lista.clone();
https://sites.google.com/site/estdatjiq/home/unidad-iii

34/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

contains()

Retorna un valor boleano si el


elemento se encuentra en la lista
(true si esta y false si no).

var_boolean=lista.contains(Object
elemento);

ensureCapacity()

Aumenta la capacidad de la lista el


nmero de posiciones indicada.

lista.ensureCapacity(int
capacidad);

get()

Retorna el elemento de la posicin


indicada o se ejecuta la excepcin
IndexOutOfBoundsException si la
posicin est fuera del nmero de
elementos que contiene la lista.

var_Object=lista.get(int posicion);

indexOf()

Retorna la posicin donde encontr


la primera coincidencia con el
elemento que est buscando o un
-1 en caso de no encontrarlo.

var_int=lista.indexOf(Object
elemento);

isEmpty()

Retorna true si la lista est vaca o


false si no lo est.

var_boolean=lista.isEmpty();
https://sites.google.com/site/estdatjiq/home/unidad-iii

35/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

lastIndexOf()

Retorna la posicin donde encontr


la ltima coincidencia con el
elemento que est buscando o un
-1 en caso de no encontrarlo.

var_int=lista.lastIndexOf(Object
elemento);

remove()

Retorna y elimina el elemento de la


lista en la posicin indicada o
genera
la
excepcin
IndexOutOfBoundsException si la
posicin est fuera de la lista.

var_Object=lista.remove(int
posicion);

removeRange()

Elimina un rango de elementos de


la lista desde la posicin inicial
hasta la posicin final -1.

lista.removeRange(int
posicion_incial, int posicion_final);

set()

Retorna y remplaza el elemento que


se encuentra en la posicin
indicada, por el elemento pasado
como argumento, ejecuta la
excepcin
IndexOutOfBoundsException si la
posicin est fuera de los
elementos de la lista.

var_Object=lista.set(int
Object elemento);
https://sites.google.com/site/estdatjiq/home/unidad-iii

posicion,

36/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Retorna el nmero de elementos en


la lista.

size()

var_int=lista.size();

trimToSize()

Reduce la capacidad de la lista al


nmero de elementos actuales en
la lista.

lista.trimToSize();
Listas con la clase LinkedList.

La clase LinkedList, permite crear una estructura de datos


con nodos llamada lista ligada. El objeto creado a partir de
la clase LinkedList es por lo tanto una estructura flexible que
crece de forma dinmica. Est estructura puede ser ideal
para el manejo de pilas, colas y listas, y se encuentra
definida en la librera util.

Constructores de la clase LinkedList:

LinkedList lista=new LinkedList();


LinkedList lista=new LinkedList(Collection
coleccin);

El primer constructor crea un objeto llamado lista que es


controlado por el inicio y el final de la misma y el segundo
constructor crea una lista con la coleccin de elementos que
se pasan como argumento apoyndose de la clase
Collection.

https://sites.google.com/site/estdatjiq/home/unidad-iii

37/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

Mtodos de la clase LinkedList:

Mtodo

Funcin del mtodo y sintaxis.

add()

Inserta un elemento al final de la lista


retornando un valor boleano si se pudo
insertar o no.

var_boolean=lista.add(Object
elemento);

Inserta un elemento en la posicin


indicada desplazando los dems
elementos una posicin hacia el final
de la lista, lanza la excepcin
IndexOutOfBoundsException si la
posicin est fuera del tamao de la
lista.

lista.add(int
elemento);

addFirst()

posicion,

Object

Inserta un elemento al principio de la


lista.

lista.addFirst(Object elemento);

addLast()

Inserta un elemento al final de la lista.

lista.addLast(Object elemento);

clean()

https://sites.google.com/site/estdatjiq/home/unidad-iii

Elimina todos los elementos de la lista.

38/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

lista.clean;

clone()

Regresa una copia de la lista.

lista_destino=lista.clone();

contains()

Retorna un valor boleano si el


elemento se encuentra en la lista (true
si esta y false si no).

var_boolean=lista.contains(Object
elemento);

get()

Retorna el elemento de la posicin


indicada o se ejecuta la excepcin
IndexOutOfBoundsException si
la
posicin est fuera del nmero de
elementos que contiene la lista.

var_Object=lista.get(int posicion);

getFirst()

Retorna el primer elemento de la lista


o
genera
la
excepcin
NoSuchElementException, si la lista
est vaca.

var_Object=lista.getFirst();

getLast()

https://sites.google.com/site/estdatjiq/home/unidad-iii

Retorna el ltimo elemento de la lista o


genera
la
excepcin
NoSuchElementException, si la lista
est vaca.

39/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

var_Object=lista.getLast();

indexOf()

Retorna la posicin donde encontr la


primera coincidencia con el elemento
que est buscando o un -1 en caso de
no encontrarlo.
var_int=lista.indexOf(Object
elemento);

isEmpty()

Retorna true si la lista est vaca o


false si no lo est.

var_boolean=lista.isEmpty();

lastIndexOf()

Retorna la posicin donde encontr la


ltima coincidencia con el elemento
que est buscando o un -1 en caso de
no encontrarlo.

var_int=lista.lastIndexOf(Object
elemento);

remove()

Retorna y elimina el elemento de la


lista en la posicin indicada o genera
la
excepcin
IndexOutOfBoundsException si la
posicin est fuera de la lista.

var_Object=lista.remove(int posicion);

removeFirst()

https://sites.google.com/site/estdatjiq/home/unidad-iii

Retorna y elimina el primer elemento


de la lista o genera la excepcin
NoSuchElementException, si la lista
est vaca.

40/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

var_Object=lista.removeFirst();

removeLast()

Retorna y elimina el ltimo elemento


de la lista o genera la excepcin
NoSuchElementException, si la lista
est vaca.

var_Object=lista.removeFirst();

set()

Retorna y remplaza el elemento que se


encuentra en la posicin indicada, por
el elemento pasado como argumento,
ejecuta
la
excepcin
IndexOutOfBoundsException si la
posicin est fuera de los elementos
de la lista.

var_Object=lista.set(int
Object elemento);

size()

posicion,

Retorna el nmero de elementos en la


lista.

var_int=lista.size();

Ejercicios Finales
a) Implementar un pila a travs de una lista simple
b) Implementar un cola circular a travs de una lista
doble
c) Implementar una cola con entrada restringida a
travs de una lista doble
d) Implementar una cola con salida restringida a
travs de una lista doble.
https://sites.google.com/site/estdatjiq/home/unidad-iii

41/42

1/27/15

Unidad III Estructuras Lineales - Estructura de Datos

e) Realizar una lista simple con nombres de


personas.

.1 de 201 3 8:52
Ejercicios de List Othoniel Riv era, 1 7 de voct.

Sig n in | Recen t Sit e A ct iv it y | Repor t A bu se | Pr in t Pa g e | Powered By Googl e Si t es

https://sites.google.com/site/estdatjiq/home/unidad-iii

42/42

Potrebbero piacerti anche