Tabela

Iz MaFiRaWiki

Tabela je podatkovna struktura, ki realizira matematično strukturo matrike ali terice. Do elementov tabele imamo dostop prek indeksov. Tabela je zbirka več podatkov istega tipa.


Podatkovni tipi:

tabela
element
indeks
boolean

Osnovne operacije:

Pripravi: {{}} → tabela
Vstavi: tabela × element × indeks → tabela
JeDefiniran: tabela × indeks → boolean
Vrednost: tabela × indeks → element 


Vsaka tabela ima znano velikost. Sprememba velikosti ni dovoljena in jo bo izvajalni sistem preprečil. V tabeli je spravljenih toliko elementov kot je njena velikost.

Primer tabele dolžine 10:

Slika:tabela1.jpg

Z modrimi številkami 0 - 9 so označeni indeksi. Prvi element v tabeli (v tem primeru element a) ima indeks 0, drugi element (b) ima indeks 1, tretji element (c) ima indeks 2... S pomočjo indeksov lahko dostopamo do poljubnega elementa v tabeli.


Pri delu s tabelami najprej napovemo spremenljivko ustreznega tipa. V Javi za npr. cela števila to naredimo tako:

int[] tabela;

Nato pa zasežemo ustrezen pomnilniški prostor.

tabela = new int[10];


Zgoraj napisano pa lahko naredimo kar v enem koraku. Spodaj sta primera, kako deklariramo tabelo celih števil (int) in tabelo realnih števil (double), pri čemer je n naravno število in pomeni velikost tabele. Ko to velikost določimo, je ne moremo več spreminjati.

int[] tabela = new int[n];
double[] tabela = new double[n];

V tem primeru Java vseh n števil nastavi na 0 (pri tabeli celih števil) oz. na 0.0 (pri tabeli realnih števil).


Dostop do poljubnega elementa v tabeli v Javi

int[] tabela = {1, 2, 3, 4, 5};
tabela[0] = 1
tabela[1] = 2
tabela[2] = 3
tabela[3] = 4
tabela[4] = 5


Izpis tabele v Javi

Tabelo v javi izpišemo s pomočjo zanke for:

for(int i = 0; i < tabela.length; i++) {
     System.out.print(tabela[i] + " ");
   }

Kot vidimo, smo tukaj uporabili ukaz tabela.length, ki nam pove velikost tabele.


Spreminjanje vrednosti elementa v tabeli v Javi

Za zgled je tokrat podana tabela nizov. Kot vidimo, nam v tem primeru (ko naštevamo vrednosti) ni potrebno napisati velikosti tabele, saj jo prevajalnik izačuna sam.

String[] tabela = {"a", "b", "lep", "dan"};
tabela[0] = "knjiga";

Nova tabela je sedaj:

String[] tabela = {"knjiga", "b", "lep", "dan"};


Pri tabelah, ki realizirajo matriko, je indeks urejen par.

Na naslednji sliki lahko vidimo:

element a ima indeks (0,0),

element b ima indeks (0,1),

element e ima indeks (1,0),

element f ima indeks (1,1),

in tako naprej.

Slika:tabela2.JPG

To tabelo (matriko) bi v Javi deklarirali takole (recimo da so elementi cela števila):

 int[][] tabela = new int[3][4];

Lahko pa kar naštejemo elemente:

int[][] tabela = {{1,2,3,4},{5,6,7,8},{9,1,3,5}};

Velikost te matrike (število elementov) oz. število vrstic, ki je v tem primeru 3 dobimo z naslednjim ukazom:

tabela.length

Drugo dimenzijo - število stolpcev oz. število elementov v posamezni vrstici pa dobimo tako:

tabela[0].length

V tem primeru smo pogledali kar dolžino prvega elementa (tabela[0]), lahko pa bi pogledali tudi dolžino drugega (tabela[1]) ali tretjega elementa (tabela[2]).



Vse tabele v Javi so vedno enodimenzionalne. Večdimenzionalnost tabele "ponaredimo" tako, da vsakemu elementu tabele priredimo novo tabelo.

Nikjer pa ni rečeno, da morajo biti vse prirejene tabele enakih dimenzij.

Zgled:

Naša tabela bo dvodimezionalana, toda vnaprej lahko predpišemo samo eno dimenzijo.

int[][] trikotnik = new int[5][];
//sprehodimo se čez elemente tabele in vsakemu priredimo novo 
//tabelo drugačne dimenzije
for(int i = 0; i < trikotnik.length; i++) {
 trikotnik[i] = new int[i + 1];

}

Grafična predstavitev zgornjega zgleda izgleda takole:

0
0 0
0 0 0
0 0 0 0
0 0 0 0 0


S tabelami lahko realiziramo tudi tenzorje višjih rangov.

Primeri uporabe

Tabela je zelo uporabna za obdelovanje v zankah. Če bi radi imeli naprimer tabelo prvih 100 števil, bi nam naštevanje teh števil vzelo veliko časa. Zato si namesto tega pomagamo z zanko for:

  1. int[] prvihStoStevil = new int[100];
  2. for(int i = 0; i < prvihStoStevil.length; i++) { //tukaj bi lahko napisali tudi i < 100
  3. prvihStoStevil[i] = i + 1; //i + 1 zato, ker ima prvi element v tabeli indeks 0
  4. }

V primeru, da bi radi imeli tabelo 100 naključnih števil, napišemo naslednje:

  1. int[] nakljucnaStevila = new int[100];
  2. for(int i = 0; i < prvihStoStevil.length; i++) { //tukaj bi lahko napisali tudi i < 100
  3. nakljucnaStevila[i] = (int)(Math.random() * 100);
  4. }


Algoritem za iskanje najmanjšega elementa v tabeli:

 kandidat <-- prvi element tabele
 za vse ostale elemente v tabeli
    če  trenutni element < kandidat // če smo našli manjšega od trenutno najmanjšega
         kandidat = najmanjsi
 vrni kandidat


Metoda v javi, ki poišče najmanjši element v delu tabele od indeksa zacetek do indeksa konec:

Slika:tabela3.JPG

  1. public static int poisciNajmanjsega(int[] tabela, int zacetek, int konec) {
  2. int najmanjsi = tabela[zacetek]; //prvi element v tabeli
  3. for (int i = zacetek+1; i <= konec; i++) {
  4. if (tabela[i] < najmanjsi) {
  5. najmanjsi = tabela[i];
  6. }
  7. }
  8. return najmanjsi;
  9. }


Primer uporabe metode

Ta zgled poišče najmanjši element v celi tabeli.

  1. public class NajmanjsiTest {
  2. public static void main(String[] args) {
  3. int a[] = {14, 22, 3, 6, 54, 10};
  4. int m = Najmanjsi.poisciNajmanjsega(a, 0, a.length - 1);
  5. System.out.println("Najmanjsi element je " + m);
  6. }
  7. }
Osebna orodja