gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Novi primer: Visestruko uredjena lista
authorDoni Pracner <quinnuendo@gmail.com>
Thu, 14 Apr 2016 14:53:27 +0000 (16:53 +0200)
committerDoni Pracner <quinnuendo@gmail.com>
Thu, 14 Apr 2016 14:55:33 +0000 (16:55 +0200)
kodovi/liste/VisestrukoUredjenaLista.java [new file with mode: 0644]

diff --git a/kodovi/liste/VisestrukoUredjenaLista.java b/kodovi/liste/VisestrukoUredjenaLista.java
new file mode 100644 (file)
index 0000000..7775c70
--- /dev/null
@@ -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
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner