# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="view-in-github" colab_type="text"
# <a href="https://colab.research.google.com/github/JocelynV00/daa_2021_1/blob/master/5-octubre.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>

# + [markdown] id="rsomo47psI8-"
# # **Estructura de datos pila (stack)**
# * last in, first out
# * De tipo lineal
# * se pueden obtener e ingresar datos desde el topoe
# * push para agregar
# * pop para sacar
#
# # **Operaciones de las pilas**
# 1. is_empty (regresa un true o false)
# 2. get_top (regresa el elemento en el tope, sin sacarlo)
# 3. pop (saca el elemento del tope y lo muestra)
# 4. push (mete un elemento en el tope)
# 5. get_length (regresa el numero de elementos de la pila)

# + id="pHHZMR_3tGQX"
# estructura de datos pila (stack)
class Stack:
  def __init__(self):
    self.__datos=[]

  def is_empty( self):
    return len(self.__datos)== 0

  def get_top(self):
    return self.__datos[-1]

  def pop(self):
    return self.__datos.pop()

  def push (self, valor):
    self.__datos.append(valor)

  def get_length(self):
    return len(self.__datos)

  def to_string(self):
    print("---------------")
    for ele in self.__datos[-1::-1]:
      print(f"{ele}")


# + colab={"base_uri": "https://localhost:8080/"} id="K8vWBLRutPyw" outputId="74769f9d-3e64-4f84-f1b2-05b7e828dc4a"
pila1 = Stack()
pila1.push(15)
pila1.push(16)
pila1.push(13)
pila1.push(12)
pila1.push(113)
pila1.to_string()

sacado = pila1.pop()
print(sacado)
pila1.to_string()

pila1.push(444)
pila1.push(233)
pila1.to_string()

print(f"El elemento en el tope es :{ pila1.get_top() } ")
pila1.to_string()
print(f"La pila tiene {pila1.get_length()} elementos")
print(f"La pila esta vacia?:  {pila1.is_empty()} ")

# + [markdown] id="WV0tWe2stZEY"
# # Ejemplo de aplicacion de pilas
# x = 4 + 5 + 6 + 3
#
# x = 4 + (5 + 6) + 3
#
# x = 4 + 5 + 6) + 3
#
# x = (4 + (5 + 6) + 3)
#
# if(a==b) { System.out.println(b)
#
# if (a==b { System.out.println{b})
#
# # Reglas
# '(' ---> push("@")
# ')' ---> pop()
# Si al final del recorrido la pila esta vacia, entonces la cadena es correcta.
#
# Si en un pop desencadena en querer un elemento de la pila vacia significa que la cadena no está balanceada.

StarcoderdataJupyterScriptsDedupFiltered