[Primeros pasos con algoritmos y estructuras de datos] Uso de matrices de Python para implementar una pila

Implementar una pila

Descripción del título:

1. El uso 数组de una estructura de datos que implementa una pila requiere los siguientes métodos:

  • Empuje la pila: inserte elementos en la parte superior de la pila
  • Pila de rebote: resalta el elemento superior de la pila
  • Consigue el elemento superior de la pila
  • Determinar si la pila está vacía
  • Obtenga el número de elementos en la pila

2. Operación de apilamiento

  • Crear una nueva pila (llamada s1)
  • Empuje la matriz ls_1 de pequeño a grande por índice
  • Número de elementos en la pila de salida.
  • Obtenga el elemento superior de la pila, guárdelo en la variable s1_gettop y observe el número de elementos en la pila.
  • Haga estallar el elemento superior de la pila, guárdelo en la variable s1_poptop y observe el número de elementos en la pila.

Pronto

1. Pila

Inserte la descripción de la imagen aquí

Introduccion

  • Una estructura de datos de uso común.
  • LIFO-last in first out: el último elemento insertado sale primero

Nota:

  • Obtener el elemento superior de la pila no cambia la pila en sí
  • Hacer estallar el elemento superior de la pila se basa en obtener el elemento superior de la pila y luego realizar una operación de pila para cambiar la pila. Puedes usar los popmétodos en la lista

2. Análisis del problema.

class MyStack:
    
    def __init__(self):
        self.items = []
        
    # 判断栈是否为空
    def is_empty(self):
        return len(self.items) == 0
    
    # 获取栈中元素个数
    def size(self):
        return len(self.items)
    
    # 返回栈顶元素
    def get_top(self):
        #先判断栈是否为空,如果不为空返回栈顶元素,否则返回 None
        if not self.is_empty():
            return self.items[self.size() - 1]  # 可以改为 return self.items[-1]
        
        else:
            return None
        
    #弹栈
    def my_pop(self):
        #先判断栈是否为空,如果不为空弹出栈顶元素,否则打印“栈已为空”,返回None
        if not self.is_empty():
            return self.items.pop()
        else:
            print("栈已为空!")
            return None
    
    #压栈
    def my_push(self,item):  # 注意这里有两个参数
        self.items.append(item)
        
# 数组ls_1
ls_1 = list(range(1,10,2))
ls_1
[1, 3, 5, 7, 9]

Nueva pila s1

s1 = MyStack()
s1
<__main__.MyStack at 0x6f27d08>

Empuje la matriz ls_1 de pequeño a grande por índice

for i in ls_1:
    s1.my_push(i)

Número de elementos en la pila de salida.

print(s1.size())
5

Obtenga el elemento superior de la pila, guárdelo en la variable s1_gettop e imprima el número de elementos en la pila

s1_gettop = s1.get_top()
print('栈顶元素为:{}'.format(s1_gettop))
print('栈中元素个数为:{}'.format(s1.size()))
栈顶元素为:9
栈中元素个数为:5

Pop el elemento superior de la pila, guárdelo en la variable s1_poptop, imprima el número de elementos en la pila

s1_poptop = s1.my_pop()
print('栈顶元素为:{}'.format(s1_poptop))
print('栈中元素个数为:{}'.format(s1.size()))
栈顶元素为:9
栈中元素个数为:4
# 拓展一下
class Student(object):
    def __init__(self,name,score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'
lisa = Student('Lisa',99)
bart = Student('Bart',59)
print(lisa.name,lisa.get_grade())
print(bart.name,bart.get_grade())
            
Lisa A
Bart C
Publicado 42 artículos originales · elogiado 28 · visitas 4961

Supongo que te gusta

Origin blog.csdn.net/KaelCui/article/details/105364571
Recomendado
Clasificación