[Gelöst] Element einer Liste ans Ende setzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ralle
Beiträge: 88
Registriert: 29.11.2004 17:50
Wohnort: Berlin

[Gelöst] Element einer Liste ans Ende setzen

Beitrag von ralle »

Hallo alle zusammen!

Entweder finde ich einfach nicht den passenden Befehl, falls einer existiert, oder ich denke zu kompliziert:

Ich möchte ein beliebiges Element, von dem der Wert bekannt ist (long), einer LinkedList ans Ende der Liste setzen.

Nun kam mir der Gedanke, per swapElements immer wieder durchzutauschen, bis das gewünschte Element am Ende ist. Jedoch erscheint mir das für so etwas profanes zu aufwändig und langsam. Gibt es hier einen schnelleren Weg, oder gar einen vorhandenen Befehl. Bin bis jetzt leider nicht fündig geworden :(

mfG
Ralph :)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Element einer Liste ans Ende setzen

Beitrag von DarkDragon »

Du kannst den Inhalt des Elements zwischenspeichern, das Element selbst löschen und dann mit LastElement ans Ende der Liste gehen um dort mit AddElement wieder ein Element mit dem Inhalt zu erstellen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Element einer Liste ans Ende setzen

Beitrag von STARGÅTE »

Code: Alles auswählen

*Element = @Element() ; Element Speichern
LastElement(Element()) ; Zum letzten springen
AddElement(Element()) ; Hinten ein neues erstellen
CopyStructure(*Pointer, Element(), StructureName) ; Inhalt kopieren
ChangeCurrentElement(Element(), *Pointer); zurück zum alten Element springen
DeleteElement(Element()) ; altes Element löschen
Außer "per Hand" im Element Header zu schreiben (der sich 12 Bytes von dem Element befindet) fällt mir kein anderer weg ein.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Element einer Liste ans Ende setzen

Beitrag von ts-soft »

Ich gehe jetzt mal davon aus, das beliebige Element ist nicht das Aktuelle:

Code: Alles auswählen

NewList my.l()

AddElement(my()) : my() = 1
AddElement(my()) : my() = 2
AddElement(my()) : my() = 3
AddElement(my()) : my() = 4
AddElement(my()) : my() = 5

; bekannter ist 3
ForEach my()
  If my() = 3
    DeleteElement(my())
    Break
  EndIf
Next
LastElement(my())
AddElement(my()) : my() = 3

ForEach my()
  Debug my()
Next
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Element einer Liste ans Ende setzen

Beitrag von mk-soft »

Warum so kompliziert?

Code: Alles auswählen

NewList my.l()

AddElement(my()) : my() = 1
AddElement(my()) : my() = 2
AddElement(my()) : my() = 3
AddElement(my()) : my() = 4
AddElement(my()) : my() = 5

; bekannter ist 3
ForEach my()
  If my() = 3
    *firstelement = @my()
    Break
  EndIf
Next
LastElement(my())
*secondelement = @my()
SwapElements(my(), *firstelement, *secondelement)

ForEach my()
  Debug my()
Next
FF 8)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ralle
Beiträge: 88
Registriert: 29.11.2004 17:50
Wohnort: Berlin

Re: Element einer Liste ans Ende setzen

Beitrag von ralle »

Hey :)

Vielen Dank für eure Antworten. Anscheinend gibt es wirklich keinen Befehl dies zu bewerkstelligen. Die letzt genannte Lösung ist für mich leider nicht brauchbar, da bei dieser das aktuell letzte Element in die "mitte" der Liste zurückgeschoben wird, aber alle anderen Tipps haben mir sehr geholfen. Vielen Dank dafür. Topic kann geschlossen werden! :)

mfG
Ralph :)
Antworten