Tabela

Iz MaFiRaWiki

(Preusmerjeno iz Tabela (Java))

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