<jupyter_start><jupyter_text>***Listas Doblemente Enlazadas*** **Definición de la clase estudiante**<jupyter_code>class estudiante:
  def __init__(self,carne,nombre,edad,direccion,telefono,email,carrera,puesto):
    self.carne = carne
    self.nombre = nombre
    self.edad = edad
    self.direccion = direccion
    self.telefono = telefono
    self.email = email
    self.carrera = carrera
    self.puesto = puesto<jupyter_output><empty_output><jupyter_text>**Definición de la clase Nodo**<jupyter_code>class nodo:
  def __init__(self, estudiante=None, siguiente=None,anterior=None):
    self.estudiante = estudiante
    self.siguiente = siguiente
    self.anterior = anterior<jupyter_output><empty_output><jupyter_text>****Definición de la clase Lista Doblemente Enlazada**<jupyter_code>class lista_doble:
  def __init__(self):
    self.primero=None

  def insertar(self,estudiante):
    if self.primero is None:
      self.primero = nodo(estudiante=estudiante)
    else:
      actual = nodo(estudiante=estudiante,siguiente=self.primero)
      self.primero.anterior = actual
      self.primero = actual

  def recorrer(self):
    if self.primero is None:
      return
    actual = self.primero
    print("Carne: ",actual.estudiante.carne, " Nombre: ",actual.estudiante.nombre, " Email: ",actual.estudiante.email,"---")
    while actual.siguiente:
      actual = actual.siguiente
      print("Carne: ",actual.estudiante.carne, " Nombre: ",actual.estudiante.nombre, " Email: ",actual.estudiante.email,"---")

  def eliminar(self,carne):
    actual = self.primero
    while actual:
      if actual.estudiante.carne == carne:
        if actual.anterior:
          if actual.siguiente:
            actual.anterior.siguiente = actual.siguiente
            actual.siguiente.anterior = actual.anterior
          else: 
            actual.anterior.siguiente = None
            actual.anterior = None
        else:
          if actual.siguiente:
            self.primero=actual.siguiente
            actual.siguiente.anterior = None
          else:
            self.primero = None
        return True
      else:
        actual=actual.siguiente
    return False
  
  def buscar(self,carne):
    actual = self.primero
    while actual.estudiante.carne!=carne:
      print("")
    print("Carne: ",actual.estudiante.carne, " Nombre: ",actual.estudiante.nombre, " Email: ",actual.estudiante.email,"---")<jupyter_output><empty_output><jupyter_text>**Creación de objetos estudiante**<jupyter_code>e1 = estudiante(201915059,"<NAME>",20,"9 calle 10-02 zona 1",24400101,"<EMAIL>","Ingeniería en sistemas","Programador Jr")
e2 = estudiante(201915060,"<NAME>",20,"7 calle 10-02 zona 1",24400102,"<EMAIL>","Ingeniería en sistemas","Programador Jr")
e3 = estudiante(201915051,"<NAME>",20,"8 calle 10-02 zona 1",24400103,"<EMAIL>","Ingeniería en sistemas","Programador Jr")<jupyter_output><empty_output><jupyter_text>**Inserción**<jupyter_code>lista_d=lista_doble()
lista_d.insertar(e1)
lista_d.insertar(e2)
lista_d.insertar(e3)<jupyter_output><empty_output><jupyter_text>**Recorrer La Lista**<jupyter_code>lista_d.recorrer()<jupyter_output>Carne:  201915051  Nombre:  <NAME>  Email:  <EMAIL> ---
Carne:  201915060  Nombre:  <NAME>  Email:  <EMAIL> ---
Carne:  201915059  Nombre:  <NAME>  Email:  <EMAIL> ---<jupyter_text>**Buscar Un Nodo De La Lista**<jupyter_code>lista_d.buscar(201915051)<jupyter_output>Carne:  201915051  Nombre:  <NAME>  Email:  <EMAIL> ---<jupyter_text>**Eliminar El Nodo Del Medio La Lista**<jupyter_code>lista_d.eliminar(201915060)
lista_d.recorrer()<jupyter_output>Carne:  201915051  Nombre:  <NAME>  Email:  <EMAIL> ---
Carne:  201915059  Nombre:  <NAME>  Email:  <EMAIL> ---<jupyter_text>**Eliminar El Nodo Primero de La Lista**<jupyter_code>lista_d.eliminar(201915051)
lista_d.recorrer()<jupyter_output>Carne:  201915059  Nombre:  <NAME>  Email:  <EMAIL> ---<jupyter_text>**Eliminar Último Nodo De La Lista**<jupyter_code>lista_d.eliminar(201915059)
lista_d.recorrer()<jupyter_output><empty_output><jupyter_text>**Eliminar Nodo A Nodo De La Lista**<jupyter_code>lista_d.eliminar(201915051)
lista_d.recorrer()
lista_d.eliminar(201915060)
lista_d.recorrer()
lista_d.eliminar(201915059)
lista_d.recorrer()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1325784383109224, 'fraction_numerical': 0.04883227176220807, 'mean_word_length': 4.478036175710594, 'pattern_counts': {'":': 0, '<': 61, '<?xml version=': 0, '>': 61, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '78940', 'license': 'Apache-2.0', 'n_tokens_mistral': 1754, 'n_tokens_neox': 1661, 'n_words': 254, 'path': '3_Listas_Doblemente_Enlazadas.ipynb', 'repo_name': 'Erwin14k/TAREAS-IPC2', 'size': '4445'}