En komputado tabelo estas datumtipo, kies objektoj estas aroj da komponantoj (elementoj de tabelo, tabelanoj, valoroj), atingeblaj per unu aŭ pluraj indicoj (ankaŭ nomataj ŝlosiloj), komputeblaj dum programrulo. Objektojn de datumtipo tabelo oni nomas «tabelvariablo», «tabelvaloro» — sed plej ofte simple «tabelo», se la kunteksto sufiĉas por malambiguigi.
Kontraste al listo, tabelo estas objekto kies anoj estas ajnvice atingeblaj. Kontraste al rikordo, la indicoj aŭ ŝlosiloj, indikantaj komponanton, estas rultempe komputeblaj.
Dimensinombro de tabelo estas la nombro de indicoj necesaj kaj sufiĉaj por atingi tabelanon.
Per analogio kun konceptoj matematikaj, inspirintaj la koncepton komputadan, tabelojn unudimensiajn oni ofte nomas vektoro, kaj tabelojn dudimensiajn, matrico. Tiuj estas la plej ofte uzataj tabeloj. Malpli ofte estas uzataj tabeloj tridimensiaj; tre malofte oni bezonas pli grandajn dimensinombrojn.
En la programlingvo APL tabelo estas la ĉefa datumtipo; tiom ke la skalaroj estas klasataj kiel nuldimensiaj tabeloj.
Abstraktaj datumtipoj tabelaj
Teorie ĉi-supra priskribo difinas tabeltipon kiel abstraktan datumtipon: ĉiu datumstrukturo disponiganta priskribitan interfacon estas realigo de tia tipo: aro da komponantoj atingeblaj per rultempe komputeblaj indicoj. Por neprigi tiun teorian signifon oni povas uzi la epiteton abstrakta: «abstrakta tabelo».
Abstraktan tabelon oni povas realigi per diversaj datumstrukturoj, plej ofte per regulpaŝa masivo da memorĉeloj, per hakettabelo, per serĉarbo.
Tabelaj datumtipoj en programlingvoj
La ĝeneralcelaj programlingvoj disponigas unu aŭ du enkonstruitajn datumstrukturojn, elskatole realigantaj tabelojn.
Ĉar la unuaj «ĝeneralcelaj» programlingvoj estis precipe destinitaj por la taskoj de cifereca analitiko, en kiu rolas tradiciaj matricoj kaj vektoroj; kaj ĉar ties naiva realigo per regulpaŝa tabelo estas la plej simpla, tial tiu realigo iĝis la plej tradicia, kvazaŭnorma, kaj specife ĝin kutime implicas la nuda termino «tabelo».
Nur tiajn tabelojn elskatole disponigas, ekz-e, Paskalo:
const m=9, n=12, p=2;
type
matMxN = array[1..m, 1..n];
matNxP = array[1..n, 1..p];
matMxP = array[1..m, 1..p];
var AA: matMxN, BB: matNxP, CC: matMxP;
procedure matmult(var a: matMxN; var b: matNxP; var c: matMxP);
var i, j, k: integer;
begin
for i := 1 to n do
for j := 1 to m do
begin
c[i, j] := 0;
for k := 1 to p do
c[i, j] := c[i, j] + a[i, k] * b[k, j];
end
end; {matmult}
{...}
matmult(AA, BB, CC);
En la ekzemplo ni vidas difinon de 3 tabelaj datumtipoj (matMxN, matNxP, matMxP
), uzitaj por difini 3 tabelajn variablojn (AA, BB, CC
) kaj 3 tabelajn formalajn parametrojn (a, b, c
). La elementoj de (ekz-e) AA
estas
AA[1,1], AA[1,2], ... AA[1,12] AA[2,1], AA[2,2], ... AA[2,12] ... AA[9,1], AA[9,2], ... AA[9,12]
Ni vidas ankaŭ rultempe determinatajn elementojn a[i,k], b[k,j], c[i,j]
.
Aliajn tabelajn datumstrukturojn en tiaj lingvoj disponigas bibliotekoj, ekz-e STL por C++.
Por la lingvoj celantaj precipe simboltraktadon pli aktualas aspciaj tabeloj, tial tiaj programlingvoj iam disponigas nur hakettabelojn kiel la ĉefan kaj solan specon de tabeloj — tiel estas ekz-e en AWK.
Aliaj lingvoj, ekz-e Perlo, elskatole disponigas ambaŭ specojn (en Perlo @a
kaj %a
).