gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Novi primer: Visestruko uredjena lista
[spa1-materijali.git] / kodovi / liste / VisestrukoUredjenaLista.java
1 /*
2 * Primer koriscenja pokazivaca za kreiranje strukture u okviru koje su elementi
3 * istovremeno povezani na razlicite nacine i omogucavaju razlitice prolaske kroz
4 * listu u zavisnosti od potreba.
5 */
6 public class VisestrukoUredjenaLista {
8 public static void main(String[] args) {
9 SpisakMerenja sm = new SpisakMerenja();
10 sm.dodaj(1, 192, 150);
11 sm.dodaj(2, 160, 70);
12 sm.dodaj(3, 170, 65);
13 sm.dodaj(4, 202, 120);
14 sm.dodaj(5, 180, 80);
16 System.out.println(sm);
17 System.out.println(sm.poTezini());
18 }
20 }
22 /**
23 * U okviru ove klase se skladiste podaci o merenjima, predstavljeni
24 * id-om, visinom i tezinom. Podacima se pamte uredjeno i po
25 * visini i po tezini.
26 *
27 */
28 class SpisakMerenja {
30 // pamte se dva pokazivaca za dva kriterijuma
31 private Merenje najnize;
32 private Merenje najlakse;
34 class Merenje {
35 public Merenje(int id, double visina, double tezina) {
36 this.id = id;
37 this.visina = visina;
38 this.tezina = tezina;
39 }
41 int id;
42 double visina;
43 double tezina;
45 // pamte se dva pokazivaca za sledece objekte
46 // po razlicitim kriterijumima
47 Merenje vise;
48 Merenje teze;
50 public String toString() {
51 return id + ": " + visina + ", " + tezina;
52 }
53 }
55 public void dodaj(int id, double visina, double tezina) {
56 Merenje novo = new Merenje(id, visina, tezina);
58 // dodajemo u strukturu po visini
59 if (najnize == null || najnize.visina > visina) {
60 novo.vise = najnize;
61 najnize = novo;
62 } else {
63 Merenje prethodno = najnize;
64 while (prethodno.vise != null && prethodno.vise.visina < visina) {
65 prethodno = prethodno.vise;
66 }
67 novo.vise = prethodno.vise;
68 prethodno.vise = novo;
69 }
71 // dodajemo u strukturu po drugom kriterijumu tezini
72 if (najlakse == null || najlakse.tezina > tezina) {
73 novo.teze = najlakse;
74 najlakse = novo;
75 } else {
76 Merenje prethodno = najlakse;
77 while (prethodno.teze != null && prethodno.teze.tezina < tezina) {
78 prethodno = prethodno.teze;
79 }
80 novo.teze = prethodno.teze;
81 prethodno.teze = novo;
82 }
83 }
85 public String toString() {
86 String rez = "Merenja po visini: [";
87 if (najnize != null) {
88 rez += " " + najnize;
89 Merenje tekuci = najnize.vise;
90 while (tekuci != null) {
91 rez += " | " + tekuci;
92 tekuci = tekuci.vise;
93 }
94 }
95 rez += " ]";
96 return rez;
97 }
99 public String poTezini() {
100 String rez = "Merenja po tezini: [";
101 if (najlakse != null) {
102 rez += " " + najlakse;
103 Merenje tekuci = najlakse.teze;
104 while (tekuci != null) {
105 rez += " | " + tekuci;
106 tekuci = tekuci.teze;
109 rez += " ]";
110 return rez;
113 public String poVisini() {
114 // omogucavamo da imamo i ovaj naziv
115 return toString();
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner