Diapositivas sobre Pilas. El Pdf, un material de estudio de nivel universitario en Informática, aborda el concepto de pilas, los tipos de datos abstractos (ADT), la correspondencia de paréntesis y la evaluación de expresiones aritméticas. Este recurso es ideal para comprender los fundamentos de la informática.
Ver más31 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
Un tipo de datos abstracto (ADT) es una abstracción de una estructura de datos
Un ADT especifica:
AUTO:
NOTA: La implementación puede ser diferente para diferentes automóviles, por ejemplo, transmisión automática.
AUTO:
Comenzar(){ Seleccione la primera marcha Soltar el freno de estacionamiento Llevar el embrague hasta el punto de fricción. Pisar el pedal del acelerador Soltar embrague }
Un ADT se compone de
Las especificaciones de un TAD indican Qué hacen las operaciones del TAD, no cómo implementarlas a ellos
Implementación de un ADT Incluye la elección de una estructura de datos particular
Las estructuras lineales son colecciones de datos cuyos elementos se ordenan dependiendo de cómo se agregan o eliminan de la estructura.
Una vez que se agrega un elemento, permanece en esa posición en relación con otros elementos que vinieron antes y después de él.
Se puede pensar que las estructuras lineales tienen dos extremos, superior e inferior (o delantero y extremo o delantero y trasero).
Lo que distingue una estructura lineal de otra es la forma en que se agregan y eliminan elementos, en particular la ubicación donde ocurren estas adiciones y eliminaciones, por ejemplo, agregar solo a un extremo, agregar a ambos, etc.
Una pila es una colección ordenada de elementos donde La adición de nuevos elementos y la eliminación de elementos existentes siempre se lleva a cabo en el mismo extremo, denominado parte superior de la pila.
es decir, agregar en la parte superior, eliminar desde la parte superior
Propiedad de último en entrar, primero en salir (LIFO) El último elemento colocado en la pila será el primer elemento eliminado
Ejemplo: Una pila de platos en una cafetería.
Operaciones de la pila principal:
Agrega solo en la parte superior de una pila Elimina solo de la parte superior de la pila
empujar estallido estallido
Agregar un nuevo elemento Quitar el elemento superior Quitar el elemento superior
103 12 57 34
12 57 34
12 57 34
57 34
Stack() crea una nueva pila que está vacía. No necesita parámetros y devuelve una pila vacía.
push(item) agrega un nuevo elemento a la parte superior de la pila. Necesita el elemento y no devuelve nada. Se modifica la pila.
pop() elimina el elemento superior de la pila. No necesita parámetros y devuelve el elemento. La pila es modificado.
peek() devuelve el elemento superior de la pila, pero no lo elimina. No necesita parámetros. La pila no se modifica.
isEempty() comprueba si la pila está vacía. No necesita parámetros y devuelve un valor booleano.
size() devuelve la cantidad de elementos en la pila. No necesita parámetros y devuelve un entero.
s=Stack() print(s.isEmpty()) s. push (4) s. push ( 'dog' ) print(s.peek()) s. push (True) print(s.size()) print(s.isEmpty()) s.push(8.4) print(s.pop()) print(s.pop()) print(s.size())
arriba Perro arriba perro arriba 4 4 verdadero 4 8,4 mejores Perro arriba Perro verdadero 4 arriba perro 4 verdadero 4
Operaciones de pila, estado de la pila, valores devueltos
s.isEempty() [] Verdadero
s.push(4) [4]
s.push('perro') [4,'perro']
s.peek() [4,'perro'] 'perro
s.push(Verdadero) [4,'perro', Verdadero]
s.size() [4,'perro', Verdadero] 3
s.isEempty() [4,'perro', Verdadero] FALSO
s.push(8.4) [4,'perro', Verdadero,8.4]
s.pop() [4,'perro', Verdadero] 8.4
s.pop() [4,'perro'] Verdadero
s.size() [4,'perro'] 2
Usamos una estructura de datos de lista de Python para implementar la pila. Recuerde: la adición de nuevos elementos y la eliminación de Los elementos existentes siempre se colocan en el mismo extremo, denominado parte superior de la pila.
¿Pero cuál "final" es mejor?
class Stack: def __ init __ (self) : self.items = [ ]
def isEmpty(self) : return self. items == [ ]
def push(self, item) : self. items. append(item)
def pop(self) : return self. items . pop()
def peek (self) : return self. items [len(self.items) -1]
def size(self) : return len(self.items)
? items . . 1 Pitón Lista . . . . . . . .
Esta implementación supone que el El comienzo de la lista contendrá el elemento superior de la pila.
class Stack: def __ init __ (self) : self.items = [ ]
def isEmpty(self) : return self. items == [ ]
def push(self, item) : self.items.append(0,item)
def pop(self) : return self.items.pop(0)
¿Qué es Big-O de push()/pop()?
En) empujar( ... ) estallido()
items . . 1 . . . . . . . .
Esta implementación supone que el final de la lista contendrá el elemento superior de la pila.
A medida que la pila crece, se agregarán nuevos elementos al FINAL de la lista. Las operaciones de extracción manipularan el mismo
class Stack: def __ init __ (self) : self.items = [ ]
def isEmpty(self) : return self.items == [ ]
def push(self, item) : self.items. append(item)
def pop(self) : return self.items. pop()
items . . 1 . . empujar( ... ) estallido() . . . ¿Qué es Big-O de push()/pop()? . . O(1)
La base de la pila contiene el elemento más antiguo , el que ha estado allí durante más tiempo.
En una pila, el orden en el que se eliminan los elementos es exactamente el inverso del orden en el que se colocaron .
8.4 1st 4th True 2nd 3rd "dog" 3rd 2nd 1 4th - 1st 4
8.4 True "dog" 4
4 "dog" True 8.4
Original Order Reversed Order
Utilizar una pila para verificar si los tirantes están equilibrados
Un ejemplo de llaves equilibradas Un ejemplo de llaves no equilibradas
OHO
Requisitos para llaves equilibradas
Inicializar la pila para vaciarla
Por cada char leído
Si es un caracter que no esta entre corchetes, omitalo.
Si la pila NO ESTÁ VACÍA, ERROR
Cape ort derentrada Stackoder algorithmeexetaletalgoritmo
1. push " {" {a {b}c} 2. push " {" { { { 3. pop { 4. pop Stack empty balanced
{ a {bc } 1. push " {" { 2. push " {" { { { 3. pop Stack not empty not balanced
{ab} c} 1. push " {" { 2. pop Stack empty when last " } " encountered not balanced
Asegúrese de que los pares de soportes coincidan correctamente: p.ej {a,(b+f[4])*3,d+f[5]}
109
Otros ejemplos:
.
Cada o "" debe ir acompañado , de un ")", 0 " correspondiente.
correcto: ()(()){{[( )])}
incorrecto . {([( )])} t: )
incorrecto (( )){{[( )])}
incorrectot: ({[ ])}
incorrectot: ({{[])}})
Inicializar la pila para vaciarla
Por cada char leído
. Si no es un corchete, omite el carácter.
Si la pila NO ESTÁ VACÍA, ERROR
Ejemplo 1: {a,(b+f[4])*3,d+f[5]}
arriba arriba arriba arriba [ arriba { { arriba { arriba {
Ejemplo 2: ]
estallido: pop: ] () y {
arriba arriba arriba ¡¡¡ No coincide !! arriba [ arriba [
14-3 * 2 +7 =(14-(3 * 2) ) + 7
La precedencia del operador * tiene precedencia sobre +/-
Operadores de asociatividad del mismo grupo de precedencia evaluados de izquierda a derecha
Ejemplo: x - y + Z (x -y) + z en lugar de x - (y + z)
El cálculo de expresiones aritméticas se puede Se lleva a cabo de manera eficiente en notación Postfix con la ayuda de la pila.
Infijo - arg1 en arg2 Prefijo - en arg1 arg2 Postfijo - arg1 arg2 en
infijo sufijo Resultado
infijo (2*3)+4 2*3+4 2*(3+4)
sufijo 2 3 * 4 + 234 +* 234 +*
Resultado 10 10 14
Requiere que ingrese expresiones sufijas
Ejemplo: 234+*
Cuando se ingresa un operando, la calculadora lo coloca en una pila
Cuando se introduce un operador, la calculadora lo aplica a los dos operandos superiores de la pila Extrae los dos operandos superiores de la pila. . Introduce el resultado de la operación en la pila.
clave ingresada Acción de la calculadora arriba
2 s.push (2) 2
3 s.push (3) 3 2
4 s.empujar (4) Los 4 mejores 3 2
+ arg2 = s.pop() arg1 = s.pop() s.push(arg1 + arg2) 7 2
* arg2 = s.pop() arg1 = s.pop() s.push(arg1 * arg2) Los 14 mejores 2