Datastruktur

Fra Holstebro HTX Wiki
(Omdirigeret fra Dataabstraktion)
Skift til: navigering, søgning

En datastruktur er blot variabler eller mere komplicerede strukturer, der på en systematisk måde indeholder de data som programmet handler om[1].

Datastrukturen vil normalt afspejle det problem man arbejder med, men behøves ikke direkte at have en sammenhæng med den visning der er i programmet.

Dataabstraktion

Dataabstraktionen er den måde man har forsimplet sin datastruktur på, så dataene bliver enkle at arbejde med.

Når man udformer sin datastruktur og laver en dataabstraktion ind i datastrukturen, så er det vigtigt at man tænker over hvordan man skal behandle sine data - hvis man f.x. ønsker at kunne sortere sine data, så er det lettest at have en abstraktion der er på tal-form.

Eksempel med Regression

Hvis man skal lave et program, der kan udføre en regression af et sæt data, så giver det ingen mening at navngive enkelt-variabler til hvert punkt. Man vil i stedet anvende et array med punkter eller i en lidt simplere form, to arrays, et med X-koordinater og et med Y-koordinater.

Da man ikke kan sige hvor mange datapunkter brugeren vil indtaste, så skal der også være en variabel der angiver antallet af indtastede punkter.

Disse datastrukturer siger intet om hvordan man vil vise de indtastede data - det kan gøres som punkter i et koordinat-system, eller man kan blot liste dem op i en tabel. Man kan evt. gøre begge dele.

Hvis man vælger løsningen med en tabel, så kan man få en overvejelse om man skal vise alle data, hvis der f.x. er mulighed for at indtaste 500 datapunkter, så bliver det en noget voldsom visning - man kunne så vælge at an kun viser f.x. 10 eller 20 af de indtastede punkter.

Alt dette vil kunne laves på samme datastruktur.

Dette eksempel har ikke den store dataabstraktion.

Koden til datastrukturen i Processing

final int Max = 100;

float [] pointX = new float[Max];
float [] pointY = new float[Max];
int antal = 0;

Eksempel med Vendespil

Visningen for et vendespil kan være ganske klassisk som vist her:

Visning af et vendespil
Visning af et vendespil

En naturlig datastruktur til denne visning kunne være et to-dimensionel array på 6 x 4 elementer, hvor hver billede-visning er navngivet ud fra disse to indexes.

Man kunne også vælge et en-dimensionelt array, hvor henvisningen til billedet blive lavet ud fra et index.

Indholdet af arrayet (dataabstraktionen) kunne være billed-navnene, så man på simpel vis kunne få vist sine billeder, men man kunne også vælge blot at have tal fra 1 - 12 (hvert tal skal optræde to steder i arrayet, for at der skal være to matchene billeder), denne dataabstraktion ville gøre det lettere at sammenligne billederne. Vælger man den simple dataabstraktion med tal, så kunne man navngive sine billeder 1.PNG til 12.PNG, så ville det igen være simpelt at anvende billederne. Man kunne også vælge at lave en ekstra datastruktur, hvor de 12 billednavne var lagret, så indholdet i den ene datastruktur henviser til den anden.

To dimensionelt array med filnavne direkte i

Her kan man oprette datastrukturen som vist her - udformet i Processings C-variant:

String [][] plade = {{"dropbox.PNG", "notepad.PNG", "pickit.PNG" ....},
                     .
                     .
                     {"excel.PNG", "acrobat.PNG", "acrobat.PNG" ....}};

En dimensionelt array med tal-angivelser

Her kan man oprette datastrukturen som vist her - udformet i Processings C-variant, og med den efterfølgende kode der fylder data i arrayet (skal blandes efterfølgende):

int [] plade = new int[24];
// læg tallene 1, 1, 2, 2, 3, 3 .... 12, 12 ind i arrayet
for (int n = 0; n < 12; n++) {
  plade[n*2] = n+1;
  plade[n*2+1] = n+1;
}

I dette eksempel kan man så navngive sine billeder 1.PNG, 2.PNG ... 12.PNG.

En dimensionelt array med index-angivelser til et andet array

Her kan man oprette datastrukturen som vist her - udformet i Processings C-variant, og med den efterfølgende kode der fylder data i arrayet (skal blandes efterfølgende):

int [] plade = new int[24];
String [] billeder = {"dropbox.PNG", "notepad.PNG", "pickit.PNG" .... "excel.PNG", "acrobat.PNG"}
// læg tallene 0, 0, 1, 1, 2, 2 .... 11, 11 ind i arrayet
for (int n = 0; n < 12; n++) {
  plade[n*2] = n;
  plade[n*2+1] = n;
}

I dette eksempel kan man hente billednavnet som følger:

  billednavn = billeder[plade[n]];

Referencer

  1. Datastrukturer Generel omtale