From: Doni Pracner Date: Thu, 14 Apr 2016 14:53:27 +0000 (+0200) Subject: Novi primer: Visestruko uredjena lista X-Git-Url: https://svarog.pmf.uns.ac.rs/gitweb/?a=commitdiff_plain;h=44d3d50b3046f738e9a7788f3e1cacf34cfbc28e;p=spa1-materijali.git Novi primer: Visestruko uredjena lista --- diff --git a/kodovi/liste/VisestrukoUredjenaLista.java b/kodovi/liste/VisestrukoUredjenaLista.java new file mode 100644 index 0000000..7775c70 --- /dev/null +++ b/kodovi/liste/VisestrukoUredjenaLista.java @@ -0,0 +1,118 @@ +/* + * Primer koriscenja pokazivaca za kreiranje strukture u okviru koje su elementi + * istovremeno povezani na razlicite nacine i omogucavaju razlitice prolaske kroz + * listu u zavisnosti od potreba. + */ +public class VisestrukoUredjenaLista { + + public static void main(String[] args) { + SpisakMerenja sm = new SpisakMerenja(); + sm.dodaj(1, 192, 150); + sm.dodaj(2, 160, 70); + sm.dodaj(3, 170, 65); + sm.dodaj(4, 202, 120); + sm.dodaj(5, 180, 80); + + System.out.println(sm); + System.out.println(sm.poTezini()); + } + +} + +/** + * U okviru ove klase se skladiste podaci o merenjima, predstavljeni + * id-om, visinom i tezinom. Podacima se pamte uredjeno i po + * visini i po tezini. + * + */ +class SpisakMerenja { + + // pamte se dva pokazivaca za dva kriterijuma + private Merenje najnize; + private Merenje najlakse; + + class Merenje { + public Merenje(int id, double visina, double tezina) { + this.id = id; + this.visina = visina; + this.tezina = tezina; + } + + int id; + double visina; + double tezina; + + // pamte se dva pokazivaca za sledece objekte + // po razlicitim kriterijumima + Merenje vise; + Merenje teze; + + public String toString() { + return id + ": " + visina + ", " + tezina; + } + } + + public void dodaj(int id, double visina, double tezina) { + Merenje novo = new Merenje(id, visina, tezina); + + // dodajemo u strukturu po visini + if (najnize == null || najnize.visina > visina) { + novo.vise = najnize; + najnize = novo; + } else { + Merenje prethodno = najnize; + while (prethodno.vise != null && prethodno.vise.visina < visina) { + prethodno = prethodno.vise; + } + novo.vise = prethodno.vise; + prethodno.vise = novo; + } + + // dodajemo u strukturu po drugom kriterijumu tezini + if (najlakse == null || najlakse.tezina > tezina) { + novo.teze = najlakse; + najlakse = novo; + } else { + Merenje prethodno = najlakse; + while (prethodno.teze != null && prethodno.teze.tezina < tezina) { + prethodno = prethodno.teze; + } + novo.teze = prethodno.teze; + prethodno.teze = novo; + } + } + + public String toString() { + String rez = "Merenja po visini: ["; + if (najnize != null) { + rez += " " + najnize; + Merenje tekuci = najnize.vise; + while (tekuci != null) { + rez += " | " + tekuci; + tekuci = tekuci.vise; + } + } + rez += " ]"; + return rez; + } + + public String poTezini() { + String rez = "Merenja po tezini: ["; + if (najlakse != null) { + rez += " " + najlakse; + Merenje tekuci = najlakse.teze; + while (tekuci != null) { + rez += " | " + tekuci; + tekuci = tekuci.teze; + } + } + rez += " ]"; + return rez; + } + + public String poVisini() { + // omogucavamo da imamo i ovaj naziv + return toString(); + } + +} \ No newline at end of file