Frage von leonardomessi, 49

Was ist der Unterschied zwischen Array und dynamischem Array?

nun habe ich eine aufgabe und ich soll etwas in einem dynamischen Array implementieren.. jedoch ist mir der Unterschied nicht bekannt. vielen Dank im Vorraus.

Antwort
von sarahj, 21

Zweiter Versuch - diesmal mit Java (geht aber auch in anderen Sprachen).

Wenn man einen Array haben will, den man nachträglich größer oder kleiner machen möchte, muss man zwischen der logischen und der tatsächlichen Größe eines unterliegenden Containers unterscheiden.

Man definiert z.B. eine Klasse (oder Structur) mit 2 Instanzvariablen. Einem Array (sagen wir der Größe n) sowie einer Integer, die die logische Größe hält (sz).

Am Anfang ist sz = 0. Man definiert neben den get(idx) und set(idx, val) Methoden, zusätzlich eine add(val) Methode, die die logische Größe sz um eins erhöht, gegebenenfalls einen neuen unterliegenden Container alloziert, und die Elemente umkopiert, falls sz die tatsächliche Größe erreicht hat, und das neue Element an Position sz ablegt.

Typischerweise wird überalloziert, d.h. der Array wird 1,5 oder 2fach so groß alloziert, damit man nicht bei jedem einzelnen add() diesen relativ teurenVorgang durchführen muss. (Tpischerweise verdoppelt, womit man mit C*log(n) resize Operationen aus).

Kommentar von sarahj ,

ok, auf Anfrage hier ein Stück Pseudocode (nicht aus einer Java IDE, sondern einfach so reingetippt - ist also möglicherweise syntaktisch nicht korrekt...):

class MyDynamicArray {
    private static INITIALSIZE = 10;
    private Object[] realArray = new Object[ INITIALSIZE ];
    public int length = 0;

    public Object get(int idx) {
        return realArray[idx];
    }

    public void set(int idx, Objet newVal) {
        realArray[idx] = newVal;
    }

    private void growArray() {
        Object[] newArray = new Object[ realArray.length * 2 ];
        System.arraycopy(realArray, 0, newArray, 0, realArray.length);
        realArray = newArray;
    }

    public void add(Object newElement) {
        if (length == realArray.length) {
            growArray();
        }
        realArray[ length++ ] = newElement;
    }
}

in etwa so könnte ein dynamischer Array implementiert sein...
braucht vielleicht noch mehr (remove(idx), toString() usw.) aber im Prinzip sollte es so tun.

Antwort
von sarahj, 30

Die Angabe einer Programmiersprache wäre nützlich - es gibt nämlich auch solche, bei denen alle Arrays dynamisch sind (Scheme, Java, Smalltalk)...
Und es gibt solche, bei denen es gar keine dynamischen gibt (Fortran)!

Vermutlich willst Du was über C/C++ wissen?

Da geht es um malloc/calloc vs. statische bzw. lokal auf dem Stack mit fester Größe allozierte Arrays.

Konkret (fixe Größe):

main() {
    char *charPtrArray[100];
    int integerArray[50];
    float floatArray[1000];
    ...
}

vs. (dynamische Größe)

main() {
    char **charPtrArray = (char **)malloc( sizeof(char *) * 100 );
    int *integerArray = (int *)malloc( sizeof(int) * 50 );
    float *floatArray = (float *)malloc( sizeof(float) * 1000);
    ...
}

auch:

int size = 1000; // berechnete Größe
float *floatArray = (float*)malloc( sizeof(float) * size );

In vielen Sprachen (Libraries) gibt es auch Datentypen, die sich nach dem Anlegen noch vergrößern/verkleinern lassen. Vielleicht meinst Du auch das. Das ist aber besonders abhängig von der verwendeten Sprache und eventuell auch der Bibliotheken (C++).

hilft das weiter?

Kommentar von Omnivore08 ,

Die Angabe einer Programmiersprache wäre nützlich -

In den Schlagworten steht Java. Aber so langsam hab ich mich auch dran gewöhnt Rätselraten um die Programmiersprache zu machen :D:D

Kommentar von sarahj ,

oh, das habe ich wohl übersehen (oder kam es später?).
Dann ist meine Antwort unnütz... ;-(

Kommentar von leonardomessi ,

wäre super wenn du ein beispiel für java hast :D

Kommentar von sarahj ,

siehe unten (oder oben?) im Kommentar.

Antwort
von grtgrt, 17

Ein Array heißt dynamisch, wenn man seine Länge (d.h. die Zahl der Speicherplätze, aus denen es besteht) auch während es im Gebrauch ist, noch vergrößeren oder verkleinern kann.

Für alle anderen Arrays - man nennt sie statische Arrays - liegt ihre Länge fest, noch bevor das Programm compiliert wird: Der Programmierer hat sie dann im Code fest vorgegeben.

Antwort
von Omnivore08, 20

Array's sind von Anfang an mit ihrer Größe bestimmt.

dynamische Arrays an sich gibt es nicht. Nur Quasi-dynamisch. Listen zum Beispiel. Die haben im Hintergrund aber auch nur eine feste Größe und werden bei Bedarf vergrößert. Dabei wird die alte Größe z.B. mal 1,5 genommen und dann die alten Daten in das neue Array geschrieben. Von außen merkt man davon nichts.

Antwort
von KindSpielzeugTV, 22

EIn Array hat normal eine Bestimmte anzahl an Elementn Ein Dynamisches Array hat eine Variable Anzahl an Elementen da die Genaue Anzahl zum Programmstart noch nicht bekannt ist und sich ändern kann. Genauere Infos kommen dann auf die Sprache an

Antwort
von WillTell, 17

Ganz ehrlich? Darüber gibt es im Internet dutzende Erklärungen, Definitionen und Beispiele und sogar Übungsaufgaben. Du machst eine Informatik Ausbildung, Programmierer und oder Studium und kannst google nicht benutzen?  Tip die Größe ist flexible.

Keine passende Antwort gefunden?

Fragen Sie die Community