Verlinkte Liste im Vertragsspeicher?

Ich möchte eine verknüpfte Liste im Vertragsspeicher implementieren

Irgendwas verlinke das:

contract A {

  struct LinkedList {
    uint    value;
    LinkedList storage next; // What goes here? Can I reference the storage of the next struct in solidity?
  }
}

Antworten (2)

Innerhalb Ihrer Struktur sollten Sie das nächste Element in der Liste verfolgen

struct LinkedList {
    bytes32 next;
    uint value;
}

Behalten Sie dann die Länge + Kopf der Liste im Auge und speichern Sie die Strukturen in einem Mapping mit ihren IDs

uint public length;
bytes32 public head;
mapping (bytes32 => LinkedList) public listObjects;

Sie können Einträge wie folgt hinzufügen:

function addEntry(uint _number) public returns (bool) {
    LinkedList memory object = LinkedList(head,_number);
    bytes32 id = sha3(_number, length, block.timestamp);
    listObjects[id] = object;
    head = id;
    length++; 
}

Sie benötigen keine verknüpfte Liste, da Arrays in Solidity automatisch erweitert werden und dies nur den Aufwand für die Gasausführung erhöhen würde.