Seite 1 von 2

2 dimensionale dynamische Tabelle

Verfasst: 14.06.2006 02:46
von Konne
Hallo,
Ich habe folgendes Problem. Ich benoetige eine 2 dimensionale dynamische Tabelle. Wenn es nicht dynamisch sein sollte wuerde ich natuerlich ein Array verwenden. Wie mache ich es jetzt aber am besten wenn es dynamisch sein soll? Kann ich vielleicht auch mit Linked Lists rumtrixen? Was ist dass schnellest. Wichtig ist dass beide dimensionen dynamisch sein muessen sonnst koennte ich auch redim verwenden. Kann mir jemand helfen was das beste ist, oder ob es schneller ist eine ganz andere methode zu verwenden auf die ich nur noch nicht kam...

Verfasst: 14.06.2006 07:40
von AND51
Also ich würde auch eine LinkedList nehmen, wenn ich zum Beispiel die Position aller abgefeurten Schüsse meines Raumshiffes speichern will. Das geht mit einer Linkedlist und Strukturen:

Code: Alles auswählen

Structure position
   x.l
   y.l
EndStructure

NewList Position.position()

AddElement(Position()) : Position()\x = 56
                         Position()\y = 78 ; Hier nich ein zweites mal AddElement() aufrufen!
Jetzt müsste man nur noch wissen, wie man eine dynamische Struktur hinbekommt, oder du machst folgendes:
Du arbeitest mit 3 Listen! Davon ist eine die x-Loordinatenliste, die andere ist die y-Koordinatenliste. Listen sind ja dynamisch, steht ja auch in der Hilfe. Die letzte Liste enthält dann die -wie sagt man?- zeiger bzw. Pointer zu den anderen Listen.
Warum so kompliziert? SO wie ich das versatnden habe, würde das obige Beiospiel nur hinsichtlich der Länge, also Anzahl der Schüsse dynamisch sein. Mehr Infos pro Schuss kannst du im Nachhinein nicht mehr ändern, du kannst also später nur noch die x- und y-Werte benutzen. Mit den 3 LinkedLists Hast du wieder die variable länge/Anzahl der Schüsse und kannst, da die 3. auch eine variable LinkedList ist, dieser 3. Liste immer mehr Pointer zu anderen LinkedLists speichern. Grob gesagt: Die 3. Liste ersetzt die Structure aus dem obigen Code Beispiel. Daran kann man am deutlichsten sehen, dass Strutce statisch/nicht veränderbar ist, LinkedLists aber schon.

Verfasst: 14.06.2006 08:31
von #NULL
in welchen grössen-dimensionen befindet sich denn die element-anzahl der jeweiligen dimensionen? ich nehme mal an die "dynamik" bezieht sich nur auf die anzahl, nicht auf den typ/die struktur. wenn es sich nicht um millionen handelt, könnte man einen array ja auch provisorisch vor definieren, und wenn er zu klein wird, kopiert man ihn in einen neuen, welcher z.b. auf 20% mehr elemente dimensioniert wurde und verwirft dann den alten, so hat man erst mal wieder platz. (pseudo-dynamisch :roll: ) häng davon ab, wie oft sich die grösse voraussichtlich ändert und wie stark plötzliche änderungen sind. wenn immer einzelne tabellen-zellen dazukommen sind wohlmöglich LL's einfacher zu handhaben. wenn sich die zellen-anzahl plötzlich verdreifachen kann, ist es aber vielleicht besser arrays zu verwenden, die dann durch grössere ersetzt werden.

man könnte auch eine dimension mit pointer-elementen definieren. jedes element zeigt dann auf ein array der zweiten dimension. wenn du mehr zeilen brauchst, redimensionierst du das pointer-array und weist den zusätzlichen pointern neue arrays zu. wenn du mehr spalten brauchst, redimensionierst du alle arrays, auf die gezeigt wird.

@AND51
in PB gibt es die vordefinierte structure POINT :wink:

Verfasst: 14.06.2006 10:17
von AND51
Ja und was ist diese vordefinierte Structure POINT? Damit habe ich mich noch nie beschäftigt, ich habe immer eigene Structures bisher verwendet; ist dieses POINT ein dynamisches Structure? Wie kann man denn Structures dynamisch verändern?

Ich befinde mich auf der Ebene der einfachen Structures, ich habe noch nie weiter in der Hilfe gescrollt als bis zu den einfachen, das hat mir auch gereicht.

Verfasst: 14.06.2006 11:51
von Kaeru Gaman
wo ist den eigentlich das problem, das ganze nich dynamisch zu machen?

klar, ich bewundere klassischen programmierstil, aber in so nem fall mach ich doch mal schnell ein 1024x1024-array auf, in longs is das grad mal 4MB, da schiet doch heutzutag der hund drauf...

da führ ich noch 2 vars mit, die mir die momentane max-dim sagen, und gut is.

Verfasst: 14.06.2006 12:30
von #NULL
:allright: stimmt schon und ist auch gut so, aber eigentlich beantwortet es ja nicht die frage.

Verfasst: 14.06.2006 12:30
von Konne
Naja habe mir jetzt ein Wenig memory Spielerei gebastelt. Nunja scheint zu tun. Obs schnell ist weiss ich net aber ich brauche nciht mehr speicher als ich brauche. Nunja theoretisch koennte man einfach mal auf gutglueck riesig reservieren aber ich mag halt auch alte Computer und wenn man schpn in PB arbeitet ...

Verfasst: 14.06.2006 12:58
von Kaeru Gaman
wie gesagt, klassischer stil ok...

aber in dem fall is das doch echt babykacke.. also mach doch einfach das array 4 - 16 - 64 MB gross, kratzt doch nich.... performance macht heute mehr aus als speicher....

Verfasst: 14.06.2006 13:01
von Konne
Lol jetzt habe ich aber schon die hammer geile 200 Zeilen Pointerverbiege sache geschrieben jetzt werde ich die auch verwenden ;)

Verfasst: 14.06.2006 13:03
von Kaeru Gaman
XD mach doch.. aber ich pack dir ne 2-zeilen array-lösung hin die schneller is..