¡Bienvenido!

Estructuras de datos y algoritmos en Python

Miriam Antona

Software Engineer

La importancia de algoritmos y estructuras de datos

  • Las estructuras de datos y los algoritmos nos permiten
    • resolver problemas cotidianos
    • con código eficiente
  • El curso podría impartirse en cualquier lenguaje
Estructuras de datos y algoritmos en Python

Algoritmos y estructuras de datos

  • Algoritmo: conjunto de instrucciones que resuelve un problema

    1. Diseño

      Una imagen esquemática del diseño de un algoritmo.

    2. Código

      Una imagen esquemática del código de un algoritmo.

  • Estructuras de datos: almacenan y manipulan datos al ejecutar un algoritmo
    • Avanzadas: listas enlazadas, pilas, colas...
Estructuras de datos y algoritmos en Python

Listas enlazadas

Un ejemplo visual de una lista enlazada que contiene los pasos para preparar pan.

  • Secuencia de datos conectados por enlaces
Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de un nodo en una lista enlazada.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de un nodo en una lista enlazada con la palabra "DATA" en la primera parte.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de un nodo en una lista enlazada con las palabras "DATA" en la primera parte y "NEXT" con un puntero en la segunda.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de dos nodos de una lista enlazada conectados con un enlace.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de varios nodos de una lista enlazada conectados con enlaces.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de una lista enlazada donde el último nodo apunta a null.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de una lista enlazada con la palabra "HEAD" en el primer nodo.

Estructuras de datos y algoritmos en Python

Listas enlazadas: estructura

La representación de una lista enlazada con la palabra "TAIL" en el último nodo.

  • Los datos no necesitan estar en bloques contiguos de memoria
  • Pueden ubicarse en cualquier dirección de memoria disponible
Estructuras de datos y algoritmos en Python

Listas simplemente enlazadas

La representación de una lista simplemente enlazada.

  • Un enlace: lista simplemente enlazada
Estructuras de datos y algoritmos en Python

Listas doblemente enlazadas

La representación de una lista doblemente enlazada.

  • Dos enlaces en ambos sentidos: lista doblemente enlazada
Estructuras de datos y algoritmos en Python

Listas enlazadas: usos reales

  • Implementar otras estructuras:
    • pilas
    • colas
    • grafos
  • Acceder moviéndote hacia atrás y adelante
    • navegador web
    • lista de reproducción
Estructuras de datos y algoritmos en Python

Listas enlazadas: clase Node

class Node:
  def __init__(self, data):
    self.data = data
    self.next = None
Estructuras de datos y algoritmos en Python

Listas enlazadas: clase LinkedList

class LinkedList:
  def __init__(self):
    self.head = None
    self.tail = None
Estructuras de datos y algoritmos en Python

Listas enlazadas: métodos

  • insert_at_beginning()
  • remove_at_beginning()
  • insert_at_end()
  • remove_at_end()
  • insert_at()
  • remove_at()
  • search()
  • ...
Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_beginning

La representación de una lista simplemente enlazada.

Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_beginning

La representación de una lista simplemente enlazada y un nodo nuevo,

 def insert_at_beginning(self, data):
    new_node = Node(data)

if self.head:
Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_beginning

La representación de una lista simplemente enlazada con el nodo nuevo conectado.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head

Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_beginning

La representación de una lista simplemente enlazada con el nodo nuevo conectado y la palabra "HEAD" en este nodo.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node

Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_beginning

La representación de un nodo nuevo en una lista enlazada vacía.

 def insert_at_beginning(self, data):
    new_node = Node(data)
    if self.head:
      new_node.next = self.head
      self.head = new_node
    else:

self.tail = new_node self.head = new_node
Estructuras de datos y algoritmos en Python

Listas enlazadas: insert_at_end

  def insert_at_end(self, data):
    new_node = Node(data)
    if self.head:  

self.tail.next = new_node
self.tail = new_node
else:
self.head = new_node self.tail = new_node
Estructuras de datos y algoritmos en Python

Listas enlazadas: search

def search(self, data):

current_node = self.head
while current_node:
if current_node.data == data:
return True

La representación de una lista simplemente enlazada con la palabra "current_node" apuntando al primer nodo.

Estructuras de datos y algoritmos en Python

Listas enlazadas: search

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

La representación de una lista simplemente enlazada con la palabra "current_node" apuntando al segundo nodo.

Estructuras de datos y algoritmos en Python

Listas enlazadas: search

def search(self, data):
  current_node = self.head
  while current_node:
    if current_node.data == data:
      return True
    else:
      current_node = current_node.next

return False

La representación de una lista simplemente enlazada con la palabra "current_node" apuntando al tercer nodo.

Estructuras de datos y algoritmos en Python

Listas enlazadas: ejemplo

La representación de un nodo nuevo en una lista enlazada vacía.

sushi_preparation = LinkedList()

sushi_preparation.insert_at_end("prepare")
Estructuras de datos y algoritmos en Python

Listas enlazadas: ejemplo

La representación de un nodo nuevo añadido al final de una lista enlazada.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 

Estructuras de datos y algoritmos en Python

Listas enlazadas: ejemplo

La representación de un nodo nuevo añadido al inicio de una lista enlazada.

sushi_preparation = LinkedList()  
sushi_preparation.insert_at_end("prepare")
sushi_preparation.insert_at_end("roll") 
sushi_preparation.insert_at_beginning("assemble")
Estructuras de datos y algoritmos en Python

Listas enlazadas: ejemplo

La representación de una lista enlazada.

sushi_preparation.search("roll")
True
sushi_preparation.search("mixing")
False
Estructuras de datos y algoritmos en Python

¡Vamos a practicar!

Estructuras de datos y algoritmos en Python

Preparing Video For Download...