terminology - funko pop stack
¿Qué significa Push and Pop para Stacks? (9)
De acuerdo. Como explicaron los demás respondedores, una pila es una estructura de datos de último en entrar, primero en salir. Usted agrega un elemento a la parte superior de la pila con una operación Push. Sacas un elemento de la parte superior con una operación Pop. Los elementos se eliminan en orden inverso al orden en que se insertaron (por lo tanto, Last In, First Out). Por ejemplo, si presionas los elments 1,2,3 en ese orden, el número 3 estará en la parte superior de la pila. Una operación Pop lo eliminará (fue el último en) y dejará 2 en la parte superior de la pila.
Con respecto al resto de la conferencia, el profesor trató de describir una máquina basada en pila que evalúa expresiones aritméticas. La máquina funciona haciendo saltar continuamente 3 elementos desde la parte superior de la pila. Los primeros dos elementos son operandos y el tercero es un operador (+, -, *, /). Luego aplica este operador en los operandos y empuja el resultado a la pila. El proceso continúa hasta que solo hay un elemento en la pila, que es el valor de la expresión.
Entonces, supongamos que comenzamos presionando los valores "+ / * 23-21 * 5-41" en orden de izquierda a derecha en la pila. Luego hacemos estallar 3 elementos desde la parte superior. El último en entrar es el primero en salir, lo que significa que los primeros 3 elementos son "1", "4" y "-" en ese orden. Empujamos el número 3 (el resultado de 4-1) en la pila, luego hacemos estallar los tres elementos superiores: 3, 5, *. Empuje el resultado, 15, en la pila, y así sucesivamente.
larga historia corta, mi profesor es una porquería, y nos mostraba infijo a las pilas de prefijos a través de un proyector y su bigass shadow estaba bloqueando todo, así que me perdí las cosas importantes
se refería a push y pop, push = 0 pop = x
Dio un ejemplo, pero no puedo ver cómo obtiene su respuesta,
2*3/(2-1)+5*(4-1)
paso 1 Reversa:) )1-4(*5+)1-2(/3*2
ok puedo ver eso
Luego siguió escribiendo operaciones de X y O y me perdí totalmente.
conteste 14-5*12-32*/+
luego invierta nuevamente para obtener +/*23-21*5-41
Si alguien me pudiera explicar el empuje pop para que pudiera entender, me sentiría muy agradecido, he buscado en línea, pero muchas cosas que he encontrado parece ser un paso por encima de esto, así que realmente necesito entenderlo primero.
Después de todos estos buenos ejemplos, Adam Shankman todavía no puede entenderlo. Creo que deberías abrir un código y probarlo. La segunda vez que intentes con myStack.Push (1) y myStack.Pop (1) deberías obtener la imagen. Pero por lo que parece, incluso eso será un desafío para ti.
El algoritmo para pasar de infijo a prefijo de expresiones es:
-reverse input
TOS = top of stack
If next symbol is:
- an operand -> output it
- an operator ->
while TOS is an operator of higher priority -> pop and output TOS
push symbol
- a closing parenthesis -> push it
- an opening parenthesis -> pop and output TOS until TOS is matching
parenthesis, then pop and discard TOS.
-reverse output
Entonces tu ejemplo dice algo como (x PUSH, o POP):
2*3/(2-1)+5*(4-1)
)1-4(*5+)1-2(/3*2
Next
Symbol Stack Output
) x )
1 ) 1
- x )- 1
4 )- 14
( o ) 14-
o 14-
* x * 14-
5 * 14-5
+ o 14-5*
x + 14-5*
) x +) 14-5*
1 +) 14-5*1
- x +)- 14-5*1
2 +)- 14-5*12
( o +) 14-5*12-
o + 14-5*12-
/ x +/ 14-5*12-
3 +/ 14-5*12-3
* x +/* 14-5*12-3
2 +/* 14-5*12-32
o +/ 14-5*12-32*
o + 14-5*12-32*/
o 14-5*12-32*/+
+/*23-21*5-41
En principio, una pila es bastante simple: imagina el clip de un rifle: solo puedes acceder a la bala superior: sacarla se llama "pop", insertar una nueva se llama "push".
Un ejemplo muy útil para eso es para aplicaciones que te permiten "deshacer".
Imagina que guardas cada estado de la aplicación en una pila. por ejemplo, el estado de la aplicación después de cada tipo que hace el usuario.
Ahora, cuando el usuario presiona "deshacer", simplemente "aparece" el estado anterior de la pila. Por cada acción que realiza el usuario, usted "empuja" el nuevo estado a la pila (que por supuesto está simplificado).
Acerca de lo que estaba haciendo específicamente su profesor: para explicarlo, más información sería útil.
Esperemos que esto te ayude a visualizar una pila y cómo funciona.
Pila vacía:
| |
| |
| |
-------
Después de presionar A
, obtienes:
| |
| |
| A |
-------
Después de presionar B
, obtienes:
| |
| B |
| A |
-------
Después de Popping, obtienes:
| |
| |
| A |
-------
Después de presionar C
, obtienes:
| |
| C |
| A |
-------
Después de Popping, obtienes:
| |
| |
| A |
-------
Después de Popping, obtienes:
| |
| |
| |
-------
La analogía del clip del rifle publicada por Oren A es bastante buena, pero probaré otra y trataré de anticipar lo que el instructor estaba tratando de transmitir.
Una pila, como su nombre lo indica, es un arreglo de "cosas" que tiene:
- Un top
- Fondo
- Un orden entre la parte superior e inferior (p. Ej., Segundo desde la parte superior, tercero desde la parte inferior).
(Piénsalo como una pila literal de libros en tu escritorio y solo puedes sacar algo de la parte superior)
Poner algo en la pila significa "colocarlo en la parte superior". Sacar algo de la pila significa "sacar la ''cosa'' superior de la pila.
Un uso simple es para invertir el orden de las palabras. Digamos que quiero revertir la palabra: "palomitas de maíz". Presiono cada letra de izquierda a derecha (las 7 letras), y luego hago estallar 7 letras y terminarán en orden inverso. Parece que esto era lo que estaba haciendo con esas expresiones.
empujar (p) empujar (o) empujar (p) empujar (c) empujar (o) empujar (r) empujar (n)
después de presionar toda la palabra, la pila se ve como:
| n | <- top
| r |
| o |
| c |
| p |
| o |
| p | <- bottom (first "thing" pushed on an empty stack)
======
cuando hago pop () siete veces, recibo las letras en este orden:
n, r, o, c, p, o, p
la conversión de infijo / postfijo / prefijo es un ejemplo patológico en ciencias de la computación cuando se enseñan stacks:
Infix para la conversión de Postfix.
La conversión de arreglos posteriores a una expresión infija es bastante sencilla:
(escanear expresión de izquierda a derecha)
- Por cada número (operando) empujarlo en la pila.
- Cada vez que se encuentre con un operador (+, -, /, *), saque dos veces de la pila y coloque el operador entre ellos. Empuje eso en la pila:
Entonces, si tenemos 53 + 2 * podemos convertirlo a infijo en los siguientes pasos:
- Empuje 5.
- Empuje 3.
- Encontrado +: pop 3, pop 5, empuje 5 + 3 en la pila (sea consistente con el orden de 5 y 3)
- Empuje 2.
- Encontrado *: pop 2, pop (5 + 3), push (2 * (5 + 3)).
* Cuando llegue al final de la expresión, si se formó correctamente, la pila solo debería contener un elemento.
Al introducir ''x'' y ''o'' puede que los haya estado utilizando como titulares temporales para los operandos izquierdo y derecho de una expresión de infijo: x + o, x - o, etc. (o el orden de x, o invertido).
También hay un buen artículo en wikipedia . Dejé mi respuesta como wiki en caso de que haya fallado cualquier orden de expresiones.
Simplemente:
pop : devuelve el elemento en la parte superior y luego lo elimina de la pila
empujar : agrega un elemento en la parte superior de la pila.
Una pila es una estructura de datos LIFO (último en entrar, primero en salir). Las operaciones push y pop son simples. Push pone algo en la pila, el pop quita algo. Se coloca en la parte superior y se quita la parte superior para conservar la orden LIFO.
editar - corregido de FIFO, a LIFO. ¡Facepalm!
Para ilustrar, comienzas con una pila en blanco.
|
luego presionas ''x''
| ''X''
entonces presionas ''y''
| ''x'' ''y''
entonces tu pop
| ''X''
- push = agregar a la pila
- pop = remover de la pila