Android Tutorial Verkettete Liste mit dem Type Keyword erstellen

klaus

Expert
Licensed User
Longtime User
Das Type Schlüsselwort (keyword) wird verwendet, um eigene Types oder Strukturen zu erstellen. Sie können diese Types verwenden um einfache Strukturen zu erstellen, die einige Werte zusammenstellen.
Sie können Type jedoch auch verwenden, um komplexere Sammlungen zu erstellen.
In diesem Tutorial erstellen wir eine verkettete Liste.
Eine einfachere Nutzung von Typ ist in dem Http Web Services und mehr (mit Lybraries arbeiten) Currency Converter Tutorial demonstriert.

Eine verkettete Liste ist eine Sammlung von Elementen. Jedes Element hat ein Wert-Feld und ein "nächstes Element" (next element) Objekt. Das "nächste Element" Objekt ist eigentlich ein Verweis auf das nächste Element in der Liste.

Type wird wie folgend deklariert:
B4X:
Sub Process_Globals
    Type Element (NextElement As Element, Val As Int)
    Dim Head As Element 'declare a variable of that type.
    Dim Last As Element
End Sub
Das Interessante an dieser Deklaration ist, daß wir den aktuellen Type als Feld benutzen. Die Fähigkeit, solche rekursive Types erklären zu können ist sehr mächtig.
Um auf irgend ein Type-Feld zugreifen zu können, muss man es zuerst initialisieren durch den Aufruf seiner Initialize-Methode. Beachten Sie, daß, wenn die Felder automatisch initialisiert wurden dann wäre es nicht möglich, solche rekursiven Typen zu erstellen.
Beachten Sie auch, daßwenn Ihr Type nur numerische Felder und Strings enthält dann besteht keine Notwendigkeit Initialize aufzurufen (es wird nichts Schlimmes passieren, wenn Sie es dennoch initialisieren).

Nachdem wir ein Type deklariert haben, können können wir es wie jedes andere "normale" Type verwenden. Es kann an Subs übergeben werden und man kann auch ein Array davon erstellen.

Erstellung der Liste:
B4X:
Sub InitializeList (Value As Int)
    Head.Initialize
    Head.Val = Value
    Last = Head 'The last item is currently the head.
End Sub
Die InitializeList Sub initialisiert das 'Head' (Kopf) Element, setzt seinen Wert und setzt die 'Last' Variable so daß sie auf das Head-Element verweist (da es der einzige Eintrag in der Liste ist).

Hinzufügen eines Elements:
B4X:
Sub AddElement(Value As Int)
    'create a new element
    Dim e As Element
    e.Initialize
    e.Val = Value
    Last.NextElement = e 'set the NextElement of the current last element to the new one.
    Last = e 'set the last variable to point to the new element.
End Sub

Erstellung eines neuen Elements. Das aktuelle Last.NextElement-Feld wird auf das neue Element gesetzt und eventuell wird die 'Last' Variable auf das neue Element aktualisiert.


Das Durchlaufen aller Elemente in der Liste, geht folgendermassen vor. Wir beginnen mit dem Head Element und dann gehen wir weiter durch Aufruf von NextElement. Wenn wir ein nicht initialisiertes Element erreichen hören wir auf.

B4X:
Sub ListToString As String
    Dim e As Element
    Dim sb As StringBuilder
    sb.Initialize
    e = Head
    Do While e.IsInitialized = True
        sb.Append(e.Val).Append(CRLF)
        e = e.NextElement
    Loop
    Return sb.ToString
End Sub
Der komplette Code:
B4X:
Sub Process_Globals
    Type Element (NextElement As Element, Val As Int)
    Dim Head As Element
    Dim Last As Element
End Sub

Sub Globals

End Sub
Sub InitializeList (Value As Int)
    Head.Initialize
    Head.Val = Value
    Last = Head 'The last item is currently the head.
End Sub
Sub AddElement(Value As Int)
    'create a new element
    Dim e As Element
    e.Initialize
    e.Val = Value
    Last.NextElement = e 'set the NextElement of the current last element to the new one.
    Last = e 'set the last variable to point to the new element.
End Sub

Sub ListToString As String
    Dim e As Element
    Dim sb As StringBuilder
    sb.Initialize
    e = Head
    Do While e.IsInitialized = True
        sb.Append(e.Val).Append(CRLF)
        e = e.NextElement
    Loop
    Return sb.ToString
End Sub

 Sub Activity_Create(FirstTime As Boolean)
    InitializeList(10)
    AddElement(9)
    AddElement(8)
    AddElement(7)
    AddElement(6)
    AddElement(5)
    Msgbox(ListToString, "List values")
End Sub
Programm Dateien:
zip.gif
LinkedList.zip

Das Englische Originaltutorial.
 
Last edited:
Top