longue histoire courte mon conférencier est de la merde, et nous montrait des piles de préfixe via un rétroprojecteur et son ombre bigass bloquait tout, donc j'ai raté les choses importantes
il faisait référence à Push and pop, Push = 0 pop = x
il a donné un exemple mais je ne vois pas du tout comment il obtient sa réponse,
2*3/(2-1)+5*(4-1)
étape 1 Marche arrière: )1-4(*5+)1-2(/3*2
ok je peux voir ça
il a ensuite continué à écrire les opérations de x et o et je me suis totalement perdu
répondre 14-5*12-32*/+
puis inversé à nouveau pour obtenir +/*23-21*5-41
si quelqu'un pouvait m'expliquer la Push pop pour que je puisse comprendre, je serais très reconnaissant, j'ai regardé en ligne mais beaucoup de choses que je trouve semblent être une étape au-dessus de cela, donc j'ai vraiment besoin de comprendre ici d'abord
J'espère que cela vous aidera à visualiser une pile et comment elle fonctionne.
Pile vide:
| |
| |
| |
-------
Après avoir poussé A
, vous obtenez:
| |
| |
| A |
-------
Après avoir poussé B
, vous obtenez:
| |
| B |
| A |
-------
Après Popping, vous obtenez:
| |
| |
| A |
-------
Après avoir poussé C
, vous obtenez:
| |
| C |
| A |
-------
Après Popping, vous obtenez:
| |
| |
| A |
-------
Après Popping, vous obtenez:
| |
| |
| |
-------
L'analogie avec le clip de fusil publiée par Oren A est assez bonne, mais je vais en essayer une autre et essayer d'anticiper ce que l'instructeur essayait de faire passer.
Une pile, comme son nom l'indique est un arrangement de "choses" qui a:
(pensez-y comme une pile littérale de livres sur votre bureau et vous ne pouvez prendre que quelque chose du haut)
Pousser quelque chose sur la pile signifie "le placer sur le dessus". Faire sauter quelque chose de la pile signifie "enlever la" chose "supérieure de la pile.
Une utilisation simple consiste à inverser l'ordre des mots. Dites que je veux inverser le mot: "pop-corn". J'appuie sur chaque lettre de gauche à droite (les 7 lettres), puis je dépose 7 lettres et elles finiront dans l'ordre inverse. On dirait que c'est ce qu'il faisait avec ces expressions.
Poussez (p) Poussez (o) Poussez (p) Poussez (c) Poussez (o) Poussez (r) Poussez (n)
après avoir poussé le mot entier, la pile ressemble à:
| n | <- top
| r |
| o |
| c |
| p |
| o |
| p | <- bottom (first "thing" pushed on an empty stack)
======
quand je pop () sept fois, je reçois les lettres dans cet ordre:
n, r, o, c, p, o, p
la conversion d'infixe/postfixe/préfixe est un exemple pathologique en informatique lors de l'enseignement des piles:
La conversion après correction en une expression d'infixe est assez simple:
(expression de balayage de gauche à droite)
Donc, si nous avons 53 + 2 *, nous pouvons le convertir en infix dans les étapes suivantes:
* Lorsque vous atteignez la fin de l'expression, si elle est correctement formée, vous ne devez empiler qu'un seul élément.
En introduisant "x" et "o", il peut les avoir utilisés comme supports temporaires pour les opérandes gauche et droit d'une expression d'infixe: x + o, x - o, etc. (ou ordre de x, o inversé).
Il y a un Nice écrivez sur wikipedia aussi. J'ai laissé ma réponse comme un wiki au cas où j'aurais bâclé tout ordre d'expressions.
L'algorithme pour passer des expressions infixes aux préfixes est:
-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
Donc, votre exemple va quelque chose comme (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
Une pile est une structure de données LIFO (Last In First Out). Les opérations Push et pop sont simples. Push place quelque chose dans la pile, pop enlève quelque chose. Vous placez en haut, et enlever le haut, pour conserver l'ordre LIFO.
modifier - corrigé de FIFO, à LIFO. Facepalm!
pour illustrer, vous commencez avec une pile vide
|
alors vous poussez 'x'
| 'X'
alors vous poussez 'y'
| "x" "y"
alors tu sautes
| 'X'
D'accord. Comme les autres répondants l'ont expliqué, une pile est une structure de données de dernier entré, premier sorti. Vous ajoutez un élément en haut de la pile avec une opération Push. Vous retirez un élément du haut avec une opération Pop. Les éléments sont supprimés dans l'ordre inverse de l'ordre dans lequel ils ont été insérés (d'où Last In, First Out). Par exemple, si vous poussez les éléments 1, 2, 3 dans cet ordre, le chiffre 3 sera en haut de la pile. Une opération Pop le supprimera (c'était la dernière entrée) et laissera 2 en haut de la pile.
Concernant le reste de la conférence, le conférencier a essayé de décrire une machine basée sur la pile qui évalue les expressions arithmétiques. La machine fonctionne en faisant sauter en continu 3 éléments du haut de la pile. Les deux premiers éléments sont des opérandes et le troisième est un opérateur (+, -, *, /). Il applique ensuite cet opérateur sur les opérandes et pousse le résultat sur la pile. Le processus se poursuit jusqu'à ce qu'il n'y ait qu'un seul élément sur la pile, qui est la valeur de l'expression.
Supposons donc que nous commencions par pousser les valeurs "+/* 23-21 * 5-41" de gauche à droite dans la pile. Nous éclatons ensuite 3 éléments par le haut. Le dernier entré est le premier sorti, ce qui signifie que les 3 premiers éléments sont "1", "4" et "-" dans cet ordre. Nous poussons le numéro 3 (le résultat de 4-1) sur la pile, puis éclatons les trois éléments les plus hauts: 3, 5, *. Poussez le résultat, 15, sur la pile, etc.
Une pile est en principe assez simple: imaginez le clip d'un fusil - Vous ne pouvez accéder qu'à la balle la plus haute - la retirer est appelée "pop", en insérer une nouvelle s'appelle "Push".
Un exemple très utile pour cela est pour les applications qui vous permettent de "défaire".
Imaginez que vous enregistrez chaque état de l'application dans une pile. par exemple. l'état de l'application après chaque type créé par l'utilisateur.
Maintenant, lorsque l'utilisateur appuie sur "Annuler", vous venez de "pop" l'état précédent de la pile. Pour chaque action que l'utilisateur fait - vous "poussez" le nouvel état vers la pile (c'est bien sûr simplifié).
À propos de ce que votre conférencier faisait spécifiquement - afin de l'expliquer, d'autres informations seraient utiles.
Simplement:
pop: renvoie l'élément en haut puis retirez-le de la pile
Push: ajoutez un élément en haut de la pile.
après tous ces bons exemples, adam shankman n'a toujours pas de sens. Je pense que vous devriez ouvrir du code et l'essayer. La seconde où vous essayez un myStack.Push (1) et myStack.Pop (1), vous devriez vraiment obtenir l'image. Mais de par son apparence, même cela sera un défi pour vous!