stos
Czym jest Stos
VB jest takim środowiskiem
programowania, które umożliwia tworzenia różnorodnych udogodnień pisania
programu. Możemy między innymi tworzyć własne typy danych. Jest to jednak
ograniczone do pisania tylko danych strukturalnych, tzn. takich, które mają
podwartości. Takie typy danych piszemy zastosowując Type, np.:
Type Punkt
x
As Long
y
As Long
End Type
Taki kod ma odpowiednik w składni języka C++:
typedef struct{
long x;
long y;
} Punkt;
Jak widzimy typedef jest
odpowiednikiem Type, ale nie do końca, bo typedef pozwala również na
tworzenie typów danych nie strukturalnych, np:
typedef long zmienna;
A w tym przypadku nie ma
odpowiednika w składni VB. Programiści C++ uważają za jeszcze jeden plus właśnie
to, że mają tyle typów danych, ale są to tylko pseudo typy, które da się
zastąpić innymi, np. HWND to long.
W C++ jest jeszcze jeden typ danych, których w VB nie ma, a przydałyby się.
Ten typ danych to stos. W prawdzie istnieje typ danych który jest podobny do
stosu (kolekcja), ale nie ma on przygotowanych funkcji obsługi.
Do czego służy Stos?
Do stosu możemy załadować dowolną liczbę wartości. Są one wrzucane
"na stos" i potem możemy je wydobywać, ale w odwrotnej kolejności.
Można to właśnie porównać ze stosem książek - układamy stos ok. 10 książek,
a potem czytając je bierzemy jedną z góry, potem następną... Istnieje także
możliwość wybrania elementu stosu z dowolnego miejsca, reakcja stosu jest w
tedy taka sama jak reakcja książek, wszystkie powyżej wybranej spadają o
jedną niżej.
Praktyczne zastosowanie Sotsu
Właściwie, to zastosowanie stosu w VB nie jest aż tak potrzebne. Ale możemy
np. ładować do stosu listę plików które mają być kopiowane lub otwierane
(lub kasowane itp.). Możemy także dynamicznie ładować do stosu procedury (a
raczej ich adresy, i potem je wywoływać tworząc wątek). Ale po co?
Tworzymy obsługę stosu
Do modułu wklejamy poniższy kod:
Type Stack
Data As New
Collection
End Type
Sub Push(clStack As
Stack,
anData)
'dodaje dane do stosu
clStack.Data.Add
anData
End Sub
Function StackIsEmpty(clStack As
Stack) As Boolean
'zwraca True jeśli stos jest pusty
Dim Leght As Long
Leght = clStack.Data.Count
If Leght = 0 Then
StackIsEmpty = True
End Function
Function Pop(clStack As
Stack) As Variant
'wyciąga (od góry) dane ze stosu
Dim lIdx As Long
lIdx = clStack.Data.Count
If lIdx > 0 Then
Pop = clStack.Data.Item(lIdx)
clStack.Data.Remove
lIdx
Else
Err.Raise 13579, "VBStack.Pop", "Stack is empty."
End If
End Function
Function GetIDFormStack(clStack As
Stack,
lngElement As Long) As Variant
'wyciąga element stosu
Dim lIdx As Long
lIdx = lngElement
If lIdx > 0 Then
GetIDFormStack = clStack.Data.Item(lIdx)
clStack.Data.Remove
lIdx
Else
Err.Raise 13579, "VBStack.GetIDFromStack", "Stack is empty."
End If
End Function
Jak korzystać?
Dim'ujemy stos (Stack), a potem używamy komendy Push(stos, dane do
wrzucenia), aby opróżniać stos stosujemy Pop(stos), a aby wyciągnąć dowolną
część stosu - GetIDFromStack(Stos, Element).
Jeżeli ktoś z was znalazł jakieś praktyczne zastosowanie stosu, to chętnie
posłucham.
Prezentowane procedury i funkcje to przerobione i ulepszone składniki
VBFAQ.
Marcin Porębski ( Doogie )
marcin.porebski@interia.pl
Wyszukiwarka
Podobne podstrony:
WSM 10 52 pl(1)VA US Top 40 Singles Chart 2015 10 10 Debuts Top 10010 35401 (10)173 21 (10)ART2 (10)więcej podobnych podstron