gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
05bdd0bfc66eeb3d2f55d802abc23bb81c6d0cdb
[spa1-materijali.git] / kodovi / liste / ListeRazlicitihElemenata.java
1 /**
2 * Demonstracija upotrebe dve klase koje garantuju da ce njihove liste imati
3 * samo razlicite elemente u sebi.
4 */
5 public class ListeRazlicitihElemenata {
7 static void listaRazlicitih() {
8 ListaRazlicitihStringova list = new ListaRazlicitihStringova();
9 list.dodaj("mango");
10 list.dodaj("mango");
11 list.dodaj("ananas");
12 list.dodaj("mango");
13 list.dodaj("nar");
14 list.dodaj("banana");
15 list.dodaj("jabuka");
17 System.out.println(list);
19 System.out.println("u listi mango:" + list.uListi("mango"));
20 System.out.println("u listi krastavac:" + list.uListi("krastavac"));
22 System.out.println();
24 System.out.println("izbaci krastavac:" + list.izbaci("krastavac"));
25 System.out.println("izbaci mango:" + list.izbaci("mango"));
26 System.out.println(list);
27 }
29 static void listaSortiranihRazlicitih() {
30 SortiranaListaRazlicitihStringova solist = new SortiranaListaRazlicitihStringova();
31 solist.dodaj("mango");
32 solist.dodaj("mango");
33 solist.dodaj("ananas");
34 solist.dodaj("mango");
35 solist.dodaj("nar");
36 solist.dodaj("banana");
37 solist.dodaj("jabuka");
39 System.out.println(solist);
41 System.out.println("u listi mango:" + solist.uListi("mango"));
42 System.out.println("u listi krastavac:" + solist.uListi("krastavac"));
44 System.out.println();
46 System.out.println("izbaci krastavac:" + solist.izbaci("krastavac"));
47 System.out.println("izbaci mango:" + solist.izbaci("mango"));
48 System.out.println(solist);
50 }
52 public static void main(String[] args) {
53 System.out.println("Lista sa razlicitim elementima:");
54 listaRazlicitih();
56 System.out.println();
58 System.out.println("Lista sa sortiranim razlicitim elementima:");
59 listaSortiranihRazlicitih();
60 }
62 }
64 /**
65 * Povezana lista stringova u kojoj su svi stringovi razliciti.
66 */
67 class ListaRazlicitihStringova {
68 class Element {
69 String info;
70 Element veza;
72 public Element(String s) {
73 this.info = s;
74 this.veza = null;
75 }
77 public String toString() {
78 return info + "";
79 }
80 }
82 // pokazivac na prvi element liste
83 Element prvi;
85 /** Kreira praznu listu stringova. */
86 public ListaRazlicitihStringova() {
87 this.prvi = null;
88 }
90 /** Vraca da li je lista prazna */
91 public boolean jePrazna() {
92 return prvi == null;
93 }
95 public void stampajNaEkran() {
96 if (prvi == null) {
97 Svetovid.out.println("Lista je prazna");
98 } else {
99 Svetovid.out.println("Sadrzaj liste:");
100 Element tekuci = prvi;
101 while (tekuci != null) {
102 System.out.println(tekuci.info);
103 tekuci = tekuci.veza;
105 System.out.println();
109 public String toString() {
110 String rez = "Lista: [ ";
111 Element tekuci = prvi;
112 while (tekuci != null) {
113 rez += tekuci.info + " ";
114 tekuci = tekuci.veza;
116 rez += "]";
117 return rez;
120 public void dodaj(String s) {
121 if (!uListi(s)) {
122 Element novi = new Element(s);
123 novi.veza = prvi;
124 prvi = novi;
128 /** Vraca da li String {@code s} postoji u listi. */
129 public boolean uListi(String s) {
130 Element tekuci = prvi;
131 while (tekuci != null && tekuci.info.compareTo(s) < 0) {
132 tekuci = tekuci.veza;
135 // da li smo trenutno na elementu
136 return tekuci != null && tekuci.info.equals(s);
139 /**
140 * Izbacuje string 's' iz liste, naravno ako postoji i vraca da li je
141 * operacija uspesno obavljena.
142 */
143 public boolean izbaci(String s) {
144 // proverimo da li je prvi element
145 if (prvi != null && prvi.info.equals(s)) {
146 prvi = prvi.veza;
147 return true;
148 } else {
149 /* trazimo u ostatku liste */
150 Element tekuci, prethodni;
151 tekuci = prvi;
152 prethodni = null;
153 while (tekuci != null && !tekuci.info.equals(s)) {
154 /*
155 * dok ne dodjemo do kraja liste ili ne nadjemo broj
156 */
157 prethodni = tekuci;
158 tekuci = tekuci.veza;
160 if (tekuci != null) {
161 /*
162 * znaci da nismo na kraju liste, odnosno da smo nasli element,
163 * prevezemo listu oko elementa
164 */
165 prethodni.veza = tekuci.veza;
166 return true;
167 } else {
168 return false;
175 /**
176 * Sortirana povezana lista stringova u kojoj su svi stringovi razliciti.
177 */
178 class SortiranaListaRazlicitihStringova {
179 class Element {
180 String info;
181 Element veza;
183 public Element(String s) {
184 this.info = s;
185 this.veza = null;
188 public String toString() {
189 return info + "";
193 // pokazivac na prvi element liste
194 Element prvi;
196 /** Kreira praznu listu stringova. */
197 public SortiranaListaRazlicitihStringova() {
198 this.prvi = null;
201 /** Vraca da li je lista prazna */
202 public boolean jePrazna() {
203 return prvi == null;
206 public void stampajNaEkran() {
207 if (prvi == null) {
208 Svetovid.out.println("Lista je prazna");
209 } else {
210 Svetovid.out.println("Sadrzaj liste:");
211 Element tekuci = prvi;
212 while (tekuci != null) {
213 System.out.println(tekuci.info);
214 tekuci = tekuci.veza;
216 System.out.println();
220 public String toString() {
221 String rez = "Lista: [ ";
222 Element tekuci = prvi;
223 while (tekuci != null) {
224 rez += tekuci.info + " ";
225 tekuci = tekuci.veza;
227 rez += "]";
228 return rez;
231 public void dodaj(String s) {
232 if (prvi == null || prvi.info.compareTo(s) > 0) {
233 Element novi = new Element(s);
234 novi.veza = prvi;
235 prvi = novi;
236 } else {
237 if (!prvi.info.equals(s)) {
238 Element prethodni = prvi;
240 while (prethodni.veza != null
241 && prethodni.veza.info.compareTo(s) < 0) {
242 prethodni = prethodni.veza;
244 if (prethodni.veza == null || !prethodni.veza.info.equals(s)) {
245 Element novi = new Element(s);
246 novi.veza = prethodni.veza;
247 prethodni.veza = novi;
253 /** Vraca da li String {@code s} postoji u listi. */
254 public boolean uListi(String s) {
255 Element tekuci = prvi;
256 while (tekuci != null && tekuci.info.compareTo(s) < 0) {
257 tekuci = tekuci.veza;
260 // da li smo trenutno na elementu
261 return tekuci != null && tekuci.info.equals(s);
264 /**
265 * Izbacuje string 's' iz liste, naravno ako postoji i vraca da li je
266 * operacija uspesno obavljena.
267 */
268 public boolean izbaci(String s) {
269 // proverimo da li je prvi element
270 if (prvi != null && prvi.info.equals(s)) {
271 prvi = prvi.veza;
272 return true;
273 } else {
274 /* trazimo u ostatku liste */
275 Element tekuci, prethodni;
276 tekuci = prvi;
277 prethodni = null;
278 while (tekuci != null && tekuci.info.compareTo(s) < 0) {
279 /*
280 * dok ne dodjemo do kraja liste ili ne nadjemo string
281 */
282 prethodni = tekuci;
283 tekuci = tekuci.veza;
285 if (tekuci != null && tekuci.info.equals(s)) {
286 /*
287 * znaci da nismo na kraju liste, odnosno da smo nasli element,
288 * prevezemo listu oko elementa
289 */
290 prethodni.veza = tekuci.veza;
291 return true;
292 } else {
293 return false;
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner