Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas •...

24
Listas Enlazadas Curso: Análisis y Diseño de Algoritmos Armando Arce Orozco, M.Sc. Escuela de Computación Setiembre 2020 1

Transcript of Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas •...

Page 1: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas EnlazadasCurso: Análisis y Diseño de Algoritmos

Armando Arce Orozco, M.Sc.Escuela de Computación

Setiembre 2020

1

Page 2: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Introducción

Una serie de estructuras de datos permiten implementaroperaciones sobre listas de forma más eficiente que las listasbasadas en arreglos

• Listas enlazadas simples• Listas doblemente enlazadas• Listas con saltos

2

Page 3: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas enlazadas simples

3

Page 4: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas enlazadas simples

Otro método de implementar listas se basa en utilizar enlacesentre elementos.

• En este caso la lista se compone de una serie de objetosque se encuentran enlazados entre ellos.

• A cada uno de estos objetos individuales se les conocecomo nodos de enlace.

4

Page 5: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Nodo de enlace

El nodo de enlace se compone de dos elementos: el enlace alsiguiente objeto, y el dato del elemento que almacena.

function node(val,lnk)return {

data = val,link = lnk

}end

5

Page 6: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Lista enlazada simple

La lista basada en enlaces mantiene una referencia al nodoinicial de lista.

6

Page 7: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Operaciones en lista enlazada

function linked_list()local head = node(nil,nil)local len = 0

end

function linked_list.size()return len

end

function LinkedList.empty()return (len == 0)

end

7

Page 8: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Operaciones en lista enlazada (cont.)

function linked_list.front()if (len==0) then

error("list empty")endreturn head.link.data

end

8

Page 9: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Agregar y eliminar al inicio de la lista

function linked_list.push_front(val)head.link = node(val,head.link)len = len + 1

end

function linked_list.pop_front(val)if (len==0) then

error("list empty")endlocal tmp = head.link.datahead.link = head.link.linklen = len - 1return tmp

end 9

Page 10: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Manejo de iteradores

function linked_list.begin()return (linked_list_itr(linked_list,head))

end

function linked_list.end()return (linked_list_itr(linked_list,nil))

end

10

Page 11: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Manejo de iteradores

function linked_list_itr(lnk)local pointer = lnk

end

function linked_list_itr.pointer()return pointer

end

function linked_list_itr.equals(itr)return (pointer==itr.pointer())

end

11

Page 12: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Manejo de iteradores

function linked_list_itr.get()return pointer.data

end

function linked_list_itr.next()if (pointer == nil) then

error('invalid iterator')endpointer = pointer.link

end

12

Page 13: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Insertar mediante iteradores

function linked_list.insert_after(itr,val)if (itr.pointer() == nil) then

error('invalid iterator')enditr.pointer().link = node(val,itr.pointer().link)len = len + 1

end

13

Page 14: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Insertar mediante iteradores

14

Page 15: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Borrar mediante iteradores

function linked_list.erase_after(itr,val)if (itr.pointer() == nil) then

error('iterator out of range')endlocal tmp = itr.pointer().dataitr.pointer().link = itr.pointer().link.linklen = len - 1return tmp

end

15

Page 16: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Borrar mediante iteradores

16

Page 17: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas doblemente enlazadas

17

Page 18: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas enlazadas dobles

18

Page 19: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Insertar en lista enlazada doble

19

Page 20: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Borrar en lista enlazada doble

20

Page 21: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas con saltos

21

Page 22: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Listas con saltos

22

Page 23: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Inserción en lista con saltos

23

Page 24: Listas Enlazadas - Curso: Análisis y Diseño de Algoritmos · • Listas doblemente enlazadas • Listas con saltos 2. Listas enlazadas simples 3. Listas enlazadas simples Otro método

Referencia bibliográfica

• Clifford A. Shaffer. Data Structures and Algorithm Analysis inC++, Third Edition, Dover Publications, 2011. Cap. 4

24