Ich muss zwei doppelt verknüpfte Listen zusammenführen, aber nicht nach ihren Werten (die Listen sind nicht sortiert). Ich möchte eine einzelne Liste erhalten, die alle Knoten von den beiden hat, aber in der Reihenfolge, in der sie im Speicher erscheinen.Sortieren von zwei verknüpften Listen nach Speicherort
Vielleicht hilft das Bild mehr: http://img140.imageshack.us/i/drawing2.png/
Gibt es einen Algorithmus (vorzugsweise ein schnelles), die diese Art von Merge tun kann? Vielleicht ist das ein bisschen hilfreich:
- der Startknoten der Listen ist immer vor den anderen.
- eine Liste kann bis zu 8192 Knoten haben.
- Ich weiß, wo die Knoten im Speicher befinden, da die Listen den freien Speicherplatz in einem großen Speicherblock verfolgen (in einem Speicherzuordner verwendet).
- Ich arbeite in C++.
Vielen Dank im Voraus!
Ihre Anforderungen machen dies nicht so sehr wie eine verkettete Liste .. warum die Obergrenze für Knoten? Warum der große Block von zuzuteilen? –
Dies ist Teil eines Speicherzuordners. Ein Speicherblock hat 32 KB und diese "Listen" verfolgen, welche Speicherorte aus diesem Block freigegeben wurden (eine für Objekte, die von dem Thread freigegeben wurden, der den Block besitzt, einer für andere Threads). Du hast recht, das sind eigentlich keine verketteten Listen. Ein "Knoten" ist eine einzelne 32-Bit-Zahl, der untere Teil bedeutet Next, der obere Previous, ausgedrückt in der Entfernung vom Blockstart. Da die Adresse des Blocks bekannt ist, muss ich keine echten Zeiger speichern und speichern viel Platz Die maximale Anzahl der Knoten ist 32 KB/4 Bytes = 8192 Knoten –