Estás en:   ArielOrtiz.com > Estructura de datos > Listas encadenadas

Listas encadenadas

Objetivos

Durante esta actividad, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción

Esta actividad puede ser elaborada de manera individual o en parejas.

A partir de la clase LinkedList elaborada en clase (ver código fuente) escribe los métodos que se describen a continuación. Coloca todos los métodos en un archivo llamado linked_list.py. En la parte superior del archivo coloca en comentarios los datos personales de los autores de la tarea. Por ejemplo:

#--------------------------------------------------------------------
# Actividad de programación: Listas encadenadas
# Fecha: 12-Oct-2012
# Autores:
#           1166611 Pepper Pots  
#           1160611 Anthony Stark
#--------------------------------------------------------------------
  1. __getitem__(self, index): Devuelve el elemento en la posición index de esta lista (el primer elemento está en la posición 0). Este método es invocado automáticamente por Python cuando se evalúa la expresión: self[index]. Arroja la excepción TypeError si index no es de tipo entero. Arroja la excepción IndexError si index < 0 o si indexlen(self).

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x[0]
    'a'
    >>> x[2]
    'c'
    >>> x[True]
    ...
    TypeError: El índice debe ser un número entero
    >>> x[3]
    ...
    IndexError: El índice está fuera de rango
    
  2. __setitem__(self, index, value): Asigna value a esta lista en la posición index (el primer elemento está en la posición 0). Este método es invocado automáticamente por Python cuando se ejecuta el enunciado: self[index]=value. Arroja las mismas excepciones que __getitem__.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x
    ['a', 'b', 'c']
    >>> x[1] = 'z'
    >>> x
    ['a', 'z', 'c']
    >>> x[True] = 'w'
    ...
    TypeError: El índice debe ser un número entero
    >>> x[3] = 'w'
    ...
    IndexError: El índice está fuera de rango
    
  3. __contains__(self, item): Devuelve True si item está contenido en esta lista, o False en caso contrario. Este método es invocado automáticamente por Python cuando se evalúa la expresión: item in self.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> 'b' in x
    True
    >>> 'z' in x
    False
    
  4. index(self, item): Devuelve el índice de la primera ocurrencia de item en esta lista. Arroja la excepción ValueError si la lista no contiene a item.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x.index('b')
    1
    >>> x.index('z')
    ...
    ValueError: 'z' no está en la lista
    
  5. count(self, item): Devuelve el número de veces que aparece item en esta lista.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('a')
    >>> x.insert_back('c')
    >>> x.insert_back('a')
    >>> x.count('a')
    3
    >>> x.count('z')
    0
    
  6. __delitem__(self, index): Elimina de esta lista el elemento en la posición index. Los elementos de la posición index+1 en adelante se recorren una posición hacia abajo. Este método es invocado automáticamente por Python cuando se evalúa la expresión: del self[index]. Arroja las mismas excepciones que __getitem__.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x
    ['a', 'b', 'c']
    >>> del x[0]
    >>> x
    ['b', 'c']
    >>> del x[1]
    >>> x
    ['b']
    >>> del x[0]
    >>> x
    []
    >>> del x[True]
    ...
    TypeError: El índice debe ser un número entero
    >>> del x[0]
    ...
    IndexError: El índice está fuera de rango
    
  7. insert(self, index, value): Inserta en esta lista un nuevo nodo con value en la posición index. Los elementos de la posición index en adelante se recorren una posición hacia arriba. Si indexlen(self) se inserta value al final. Si index < 0 se inserta value al inicio.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x
    ['a', 'b', 'c']
    >>> x.insert(1, 'z')
    >>> x
    ['a', 'z', 'b', 'c']
    >>> x.insert(10, 'w')
    >>> x
    ['a', 'z', 'b', 'c', 'w']
    >>> x.insert(-10, 'u')
    >>> x
    ['u', 'a', 'z', 'b', 'c', 'w']
    
  8. remove(self, item): Elimina de esta lista el nodo que contiene la primera ocurrencia del elemento item. Arroja la excepción ValueError si la lista no contiene a item.

    Ejemplos:

    >>> x = LinkedList()
    >>> x.insert_back('a')
    >>> x.insert_back('b')
    >>> x.insert_back('c')
    >>> x
    ['a', 'b', 'c']
    >>> x.remove('c')
    >>> x
    ['a', 'b']
    >>> x.remove('a')
    >>> x
    ['b']
    >>> x.remove('b')
    >>> x
    []
    >>> x.remove('a')
    ...
    ValueError: 'a' no está en la lista
    

¿Qué se debe entregar?

Sube el archivo linked_list.py usando el Sistema de Entrega de Tareas Automatizado. No se aceptan tareas por ningún otro medio.

Fecha límite: Viernes, 12 de octubre.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

100 La actividad cumple con todos los requerimientos.
-10 No se incluyó en comentario los datos de los autores.
10 El programa fuente contiene errores sintácticos.
50-90 El programa produce algunos errores al momento de correrlo.
DA La solución es un plagio.