Option Explicit 'déclaration du tableau Pile Dim Pile() As Long Private Sub Command1_Click() Dim x As Long 'push des données PUSH 10 PUSH 20 'pop des données POP x MsgBox x POP x MsgBox x 'dépassement de pile POP x End Sub Private Sub PUSH(valeur As Long) Dim n As Integer 'Pile n'est pas initialisée la première fois On Error Resume Next n = UBound(Pile) 'incrémenter n = n + 1 'redimentionner ReDim Preserve Pile(n) 'chercher valeur Pile(n) = valeur End Sub Private Sub POP(valeur As Long) Dim n As Integer 'aller chercher dernière valeur entrée n = UBound(Pile) valeur = Pile(n) 'si zéro on a déjà tout vidé If n = 0 Then MsgBox "La Pile est vide" Exit Sub End If 'décrémenter n = n - 1 'redimentionner ReDim Preserve Pile(n) End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOption Explicit Public Enum StackMode LIFO FIFO End Enum Private pColl As Collection Private pMode As StackMode Public Sub Push(ByVal V As Variant) pColl.Add V End Sub Public Function Pop() As Variant Dim i As Long, j As Long i = pColl.Count If i > 0 Then If pMode = FIFO Then j = 1 ElseIf pMode = LIFO Then j = i End If If IsObject(pColl(j)) Then Set Pop = pColl(j) Else Pop = pColl(j) End If pColl.Remove j End If End Function Private Sub Class_Initialize() Set pColl = New Collection pMode = LIFO End Sub Private Sub Class_Terminate() Set pColl = Nothing End Sub Public Property Get Mode() As StackMode Mode = pMode End Property Public Property Let Mode(ByVal Mode As StackMode) pMode = Mode End Property
Dim s As Stack Set s = New Stack s.Mode = LIFO s.Push "toto" s.Push 15 MsgBox s.Pop MsgBox s.Pop