Tabelo (datumstrukturo)

En komputado, la datumstrukturo **tabelo** estas la plej simpla kaj la plej kutima maniero realigi abstraktan tabelon, t.e. kolekton da komponantoj, aŭ **elementoj**, indikataj per numero aŭ pluropo da numeroj, kiujn oni nomas **indicoj**. Tia tabelo estas lokita en la komputila memoro tiel, ke la pozicion (la adreson) de ĉiu elemento oni povas komputi el la indica opo per simpla aritmetika formulo.

## Realigo 
Simpla ekzemplo pri tabela datumstrukturo estas tabelo el 10 32-bitaj reelaj elementoj, havantaj la indicojn 0≤*i*≤9; tian tabelon kreas la C-deklaro

```c
float T[10];
```

Supozu ke rultempe la tabelo iĝos lokita (ekz-e) ekde la adreso 2000; tiam la elementoj havos la adresojn
:2000, 2004, 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036
do la elemento `T[i]` havos la adreson 2000+4×*i*.

## Limigoj de la datumstrukturo 
La skizita realigo klarigas kelkajn ĝiajn limigojn kompare kun la abstrakta tabelo en ties plej ĝenerala formo (la asociaj tabeloj tiajn limigojn ne bezonas):

# La indicoj devas esti entjeroj aŭ konverteblaj al entjeroj — ili estas uzataj en aritmetika formulo.
# La elementoj devas esti samtipaj (aŭ almenaŭ samlongaj), ĉar la longo de la elemento aperas en la adreskalula formulo kiel paŝo de aritmetika progresio.
# La memoro estas rezervata por la tuta indicvariejo, t.e. se oni uzas la elementojn `T[i]` kaj `T[j], i&lt;j`, tiam ankaŭ ĉiuj interaj elementoj `T[k], i&lt;l&lt;j`, estas kreataj.

## Programlingva prezento de tabeloj 
En kelkaj programlingvoj la unua elemento en iu tabelo havas indicon 0, la dua havas indicon 1, kiel tiel plu. En aliaj lingvoj la unua elemento havas indicon 1, (kaj sekve 2, 3, ktp). Plej multaj programlingvoj havas tabelon kiel antaŭdifinitan datumtipon.

En kelkaj lingvoj, kiam la programisto kreas tabelon, tiu devas *deklari* la grandecon de la tabelo. Tio estas la nombro de elementoj, kiujn la tabelo povos enhavi, kaj ne estas ŝanĝebla post la deklaro -- do se la tabelo ne estus sufiĉe granda por enhavi ĉiom da la necesaj datumoj, la programisto devus krei alian tabelon. Tabelon, kies grando estas fiksita antaŭ la plenumo de la programo, oni nomas *statika tabelo*. Kelkaj lingvoj disponigas *dinamikajn tabelojn*, kies grandon la programo povas kalkuli dum sia plenumo, kaj fiksi ĉe prilabolo de la deklaro. Plue, en iuj lingvoj disponeblas tablejoj kapablaj kreski kaj ŝrinki post sia kreo, kiuj povas sin etendi laŭbezone. Tiajn tabelojn oni nomas *flekseblaj* aŭ *varilongaj*.

Ekzistas ankaŭ plurdimensiaj tabeloj — ĉiu elemento de tia tabelo havas pli ol unu indicojn. Ekz-e dudimensian tabelon oni povas uzi por prezenti matricon kun vertikaloj kaj horizontaloj.

## Tabeloj en Ĝavo 
En la programlingvo Ĝavo, tabelojn oni povas krei ĉi tiel:

```java
int[] miaTabelo = new int[5];
```

Tio kreas tabelon da entjeroj, kaj tiu tabelo povas enteni kvin entjerojn. La programisto nun povas enmeti entjerojn en la tabelon ĉi tiel:

```java
miaTabelo[0] = 1;
miaTabelo[1] = 18;
miaTabelo[2] = 5;
miaTabelo[3] = 33;
miaTabelo[4] = 50;
```

La programisto povas uzi la datumojn en la tabelo ĉi tiel:

```java
int k = 3 + miaTabelo[3]; // k nun egalas 3 + 33 = 36
miaTabelo[4] = k - miaTabelo[2]; // miaTabelo[4] nun egalas 31
```

## Vidu ankaŭ 
* Asocia tabelo
* Hakettabelo
* Tabelo (datumtipo)
* Variablo

Kategorio:Komputiko
Kategorio:Datumstrukturoj