gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4bff5d0)
raw | patch | inline | side by side (parent: 4bff5d0)
author | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 14 Apr 2016 14:53:27 +0000 (16:53 +0200) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 14 Apr 2016 14:55:33 +0000 (16:55 +0200) |
kodovi/liste/VisestrukoUredjenaLista.java | [new file with mode: 0644] | patch | blob |
diff --git a/kodovi/liste/VisestrukoUredjenaLista.java b/kodovi/liste/VisestrukoUredjenaLista.java
--- /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