Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Verkettete Listen in FreeBASIC

von AdministratorSebastianSeite 4 von 5

Nach den vorstehenden Ausführungen sollten Sie nun in der Lage sein, mit Hilfe der Befehlsreferenz das folgende Programmbeispiel zu verketteten Listen in FreeBasic nachzuvollziehen. Wenn Ihnen die Bedeutung einer Anweisung nicht klar ist, können Sie das Schlüsselwort anklicken, woraufhin sich der entsprechende Eintrag in der Befehlsreferenz öffnet:

'Listen mit FreeBasic
'http://www.freebasic-portal.de

'Der UDT (user defined type) der Liste:
TYPE tListe
    Inhalt As Integer
    Naechstes As tListe PTR
END TYPE

DECLARE SUB ElementEinfuegenAmEnde (zahl As Integer)
DECLARE SUB ElementEinfuegenAmAnfang (zahl As Integer)
DECLARE SUB ListeAusgeben()
DECLARE SUB ElementLoeschen (zahl As Integer)

'Startpunkt der Wurzel SHARED (=global) deklarieren,
'damit er nicht bei jedem Prozeduraufruf als Argument
'übergeben werden muss.
DIM SHARED Start As tListe PTR

CLS
PRINT "Eine Liste in FreeBASIC"
PRINT

Start = 0 'Listenstart auf NULL setzen.

'Elemente hinzufügen
ElementEinfuegenAmEnde 12
ElementEinfuegenAmEnde 32
ElementEinfuegenAmEnde 42
ElementEinfuegenAmAnfang 1
ElementEinfuegenAmEnde 15
ElementEinfuegenAmEnde 36
ElementEinfuegenAmEnde 41
ElementEinfuegenAmAnfang 50
ElementEinfuegenAmAnfang 99

'Zwei Elemente löschen
ElementLoeschen 1
ElementLoeschen 99

ListeAusgeben

SLEEP
END






SUB ElementEinfuegenAmEnde (zahl As Integer)
    If Start = 0 Then 'Falls die Liste leer ist: Anlegen!
        Start = ALLOCATE(SIZEOF(tListe))
        Start->Naechstes = 0
        Start->Inhalt=zahl
    Else              '...falls nicht: Neues Element anlegen
                      'und anhängen!
        Dim Element As tListe PTR
        Dim Neu As tListe PTR
        Neu = ALLOCATE(SIZEOF(tListe))    'Speicher
                                          'alloziieren
        Neu->Inhalt = zahl
        Neu->Naechstes = 0
        Element = Start
        Do
            If Element->Naechstes = 0 Then 'Listenende
                                           ' erreicht!
                Element->Naechstes = Neu   'Hier anfügen!
                Exit Do                    '...und raus aus
                                           ' der Schleife!
            Else
                Element = Element->Naechstes 'Zum Nächsten
                                             'Knoten
                                             'weitergehen.
            End If
        Loop
    End If
END SUB


SUB ElementEinfuegenAmAnfang (zahl As Integer)
    If Start = 0 Then 'Falls die Liste leer ist: Anlegen!
        Start = ALLOCATE(SIZEOF(tListe))
        Start->Naechstes = 0
        Start->Inhalt=zahl
    Else       '...falls nicht: Neues Element anlegen und
               'Liste daran anhängen!
        Dim Neu As tListe PTR
        Neu = ALLOCATE(SIZEOF(tListe))    'Speicher
                                          'alloziieren
        Neu->Inhalt = zahl
        Neu->Naechstes = Start 'Ehem. Listenanfang als
                               '"Nächstes" definieren
        Start = Neu 'Listenanfang auf das neue Element
                    'setzen
    End If
END SUB


SUB ListeAusgeben()
    If Start = 0 THEN
        PRINT "Fehler: Die Liste ist leer!"
        EXIT SUB
    END IF
    DIM Element As tListe PTR
    Element = Start                        'Zeiger auf
                                           'den Anfang setzen.
    Do
        PRINT Element->Inhalt
        If Element->Naechstes <> 0 Then    'Listenende noch
                                           'nicht erreicht?
            Element = Element->Naechstes   'Dann ein Element
                                           'weitergehen!
        Else
            Exit Do                        'Ansonsten Schleife
                                           'verlassen.
        End If
    Loop
END SUB


SUB ElementLoeschen (zahl As Integer)
    If Start = 0 THEN
        PRINT "Fehler: Die Liste ist leer!"
        EXIT SUB
    END IF
    Dim Element As tListe PTR, N As tListe PTR
    If Start->Inhalt = zahl Then
        Element = Start->Naechstes
        DeAllocate Start
        Start = Element
        EXIT SUB
    END IF
    Element = Start
    Do
        If Element->Naechstes <> 0 Then
            N = Element->Naechstes
            If N->Inhalt = zahl THEN
                Element->Naechstes = N->Naechstes
                DeAllocate N
                Exit Sub
            Else
                Element = Element->Naechstes
            End If
        Else
            Exit Sub
        End If
    Loop
END SUB

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 07.01.2008 von AdministratorSebastian angelegt.
  • Die aktuellste Version wurde am 09.07.2009 von AdministratorSebastian gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen