Une pile est en réalité raisonnablement simple à mettre en œuvre en tant que liste à liaison unique, en raison de ses opérations de poussée et de bruit restreintes. C'est en fait beaucoup plus facile si vous insérez des éléments poussés à la tête de la liste. Comme c'est le devoir, je fournirai du pseudo-code.
Pour initialiser une pile, il est tout simplement la création:
top -> null
avec ce code:
def init (stk):
stk->top = null # just initialise to empty.
Pousser un élément est-il insérait en fait au début de la liste. Donc, lorsque vous appuyez sur 3, 4 et 5, vous obtenez:
+---+
top -> | 3 | -> null
+---+
+---+ +---+
top -> | 4 | -> | 3 | -> null
+---+ +---+
+---+ +---+ +---+
top -> | 5 | -> | 4 | -> | 3 | -> null
+---+ +---+ +---+
avec le code suivant:
def push (stk, val):
item = new node # Create the node.
item->value = val # Insert value.
item->next = stk->top # Point it at current top.
stk->top = item # Change top pointer to point to it.
Et popping est alors simplement que le premier noeud retirez.
def pop (stk):
if stk->top == null: # Catch stack empty error.
abort with "stack empty"
first = stk->top # Save it for freeing.
val = first->value # Get the value from the top.
stk->top = first->next # Set top to the top's next.
free first # Release the memory.
return val # Return the value.
Votre implémentation de pile utilise-t-elle une liste simple ou double? –
c'est une liste unidirectionnelle. – Johnrad
Quelle extrémité est le "retour"? Les piles ont des hauts et des bas, pas des dos et des fronts. –