Bueno, esta vez os traigo la simulación de una pila (Stack) en VB6. Resulta muy interesante este tipo de conjuntos, pues nos permite transformar funciones recursivas en iterativas, manteniendo las ventajas de simplicidad del caso recursivo, y de eficiencia del caso iterativo.

Código: Seleccionar todo

Option Explicit

'cStack by Slek, for Indetectables.net
'25/6/2012

'Nota:  Es una pila de Integer (puede ser modificado)
'       It's an Integer's Stack (can be modified)

Dim Arr()   As Integer          'Array of elements
Dim i       As Integer          'Current Index

Private Sub Class_Initialize()
'Initialize with Index 0

    i = 0
    
    Call Init(i)
    
End Sub

Public Sub Init(ByVal n As Integer)
'Initialize Arr() with n elements

    ReDim Arr(n)
    
End Sub


Public Sub Push(ByVal n As Integer)
'Add n at the end

    Arr(i) = n
    
    i = i + 1
    
    If i > UBound(Arr) Then ReDim Preserve Arr(i * 2)
    
End Sub

Public Function Pop() As Integer
'Return last n
    
        i = i - 1
        
        Pop = Arr(i)
    
End Function
A tener en cuenta: No es muy aconsejable la inicialización con 0, pero como eso depende mucho del uso que se le dé, he optado por además añadir una función Init, que permite modificar ese valor a medida, y borra el contenido anterior de la pila.
Además, sigue un crecimiento del doble, creo que es el que más se ajusta, aunque también podría valer un crecimiento exponencial en ciertos casos.
Y por último, nótese que la función Pop no redimensiona el array, es decir, la dimensión del array sólo crece (por motivos de eficiencia)

Próximamente publicaré una implementación de los conjuntos cSet y cStack en un único proyecto,
Gracias por leer.

Saludos!
github.com/Slek-Z
Responder

Volver a “Fuentes”