[Zacatecnik] Queue

[Zacatecnik] Queue

Příspěvekod Ariczek » 12 červenec 2012 18:44:04

V dnesnim dile naseho povidani si ukazeme jak si napsat vlastni FIFO strukturu, neboli Frontu :)

Pokud si chcete vyzkouset samy - zadani: napiste FIFO frontu s metodami - add pro pridani prvku, remove pro odebrani prvku a jeho vraceni, removeAll pro vyprazdneni cele fronty a length pro zjisteni poctu prvku ve fronte :)






Takze jedno mozne reseni :)

Vnitrni struktura bude pomoci jednosmerne zretezeneho spojoveho seznamu, zakladni stavebni kamen:

Kód: Vybrat vše
class Zaznam {
   public Zaznam next;
   public Object data;
}


Vlastni trida obsahuje 2 promenne odkazujici na zacatek a konec fronty:

Kód: Vybrat vše
public class Queue {

   private Zaznam First;
   private Zaznam Last;


Konstruktor je jednoduchy - jen nastavit null

Kód: Vybrat vše
   public Queue() {
      First = null;
      Last = null;
   }


Metoda pro pridani objektu do fronty - pokud je fronta prazdna nastavim first i last na prvek, jinak jen pridam za posledni prvek a prepisu last.
Kód: Vybrat vše
   public void add(Object o) {

      Zaznam z = new Zaznam();
      z.data = o;
      z.next = null;

      if (Last == null) {
         First = z;
         Last = z;
         return;
      }

      Last.next = z;
      Last = z;

      return;
   }


metoda odstrani z fronty a vrati prvni prvek. Pokud je fronta prazdna pak null:

Kód: Vybrat vše
   public Object remove() {

      if (First == null)
         return null;

      Object ret = First.data;
      First = First.next;

      if (First == null)
         Last = null;

      return ret;
   }


Vyprazdneni cele fronty je jednoduche - vse udela garbage collector :)

Kód: Vybrat vše
   public void removeAll() {
      First = null;
      Last = null;

      // o zbytek se postara garbage collector
   }


metoda zjisti pocet prvku ve fronte:

Kód: Vybrat vše
   public int length() {
      int len = 0;
      Zaznam iterator = First;
      while (iterator != null) {
         len++;
         iterator = iterator.next;
      }

      return len;
   }


No a pak jeste nejaka mala testovaci funkce main ze nam to funguje :)

Kód: Vybrat vše
   public static void main(String[] args) {
      Queue q = new Queue();

      q.add(new Integer(12));
      q.add(new Integer(5));

      System.out.println(q.length());

      q.remove();

      System.out.println(q.length());

      q.add(new Integer(27));

      q.removeAll();

      System.out.println(q.length());
   }

}


Pro hloubave duse - premyslejte nad zlepsenimi / jinacim pristupem :) co treba kdybychom chteli pouzit vnitrne pole misto spojoveho seznamu ? ;)

nekdy priste u dalsi casti naschle Ariczek.
Naposledy upravil Ariczek dne 13 červenec 2012 14:05:54, celkově upraveno 1
Ariczek
 
Příspěvky: 51
Registrován: 21 říjen 2011 10:54:52

Re: [Zaklady] Queue

Příspěvekod Wlezley » 12 červenec 2012 23:27:06

Ty vole pecka, ale dej spíš základy uplný - jak s javou začít? ;) Pak začnu i já a zkusíme se nějak poprat. :D
Uživatelský avatar
Wlezley
 
Příspěvky: 316
Registrován: 24 září 2011 22:54:46
Bydliště: Plzeň
Projekt: Wlezley EU

Re: [Zaklady] Queue

Příspěvekod Ariczek » 12 červenec 2012 23:37:11

definuj co je pro tebe zaklad :D ve vedlejsim topicu jsem napsal jak udelat hello world, jak to zkompilovat a jak to spustit... to mam fakt psat ze jsou tu int, double, char a boolean ? :D
Ariczek
 
Příspěvky: 51
Registrován: 21 říjen 2011 10:54:52

Re: [Zaklady] Queue

Příspěvekod Forlis » 13 červenec 2012 12:46:54

Zdar,

presne ako Wolf vraví, ja by som privítal základy. Definovanie základov (musíš si zobrať, že sme začiatoćníci v Jave, preto každé príkaz treba definovať ;)) Prijal by som návod o premenných, na záver nejaký príklad ktorí by sa rozobral (int znamená toto, robí toto, boolean robí toto, public robí toto, je to object alebo niečo také) a na záver nejakú úlohy, napríklad vytvor program, ktorí vypíše toto do dvoch riadkov pod seba ;) Samozrejme taký príklad ktorí je k téme toho návodu čo si vytvoril a čo by sme mali byť schopný vytvoriť ;)

Ďakujem.
Forlis
 
Příspěvky: 5
Registrován: 13 červenec 2012 12:43:14

Re: [Zaklady] Queue

Příspěvekod Ariczek » 13 červenec 2012 13:07:32

Uff... dobra :) a kde mam tedy navazat - hello world jste si vsichni napsali, zkompilovali, spustili - vse i pomoci eclipse ? :) podle tutorialu viewtopic.php?f=35&t=40#p342 ? :)

nebo se mam porad i zastavovat u toho - otevreme si eclipse, udelame novy projekt, dame si tam package, a pridame novou class ? :D misto abych napsal jen udelame si novou class :)
Ariczek
 
Příspěvky: 51
Registrován: 21 říjen 2011 10:54:52

Re: [Zaklady] Queue

Příspěvekod Forlis » 13 červenec 2012 13:52:53

Samozrejme, napísal som si to v Eclipse rovno a skompiloval (kompilujem but v NetBeast IDE alebo Eclipse) zatiaĽ nikdy nie v príkazovom riadku (keď mám Eclipse tak to nepovažujem za dôležité). No pokračoval by som porade, (neviem ako Wolf) ja by som privítal "Premenné": 1. Vysvetlenie kódov: boolean, char, byte, na každé príklad a vysvetlenie príkladu 2. Nejaký väčší príklad na premenné a tiež vysvetlenie použitých premenných 3. Úloha na dobrú noc (napísať nejakú premennú asi). ;) Je to asi moc, ale musím to využiť kým nepracuješ, lebo potom asi nebudu čas.

Diki ari
Forlis
 
Příspěvky: 5
Registrován: 13 červenec 2012 12:43:14

Re: [Zacatecnik] Queue

Příspěvekod Wlezley » 16 červenec 2012 23:40:13

Já se k tý javě asi v nejbližší době neprokopu, mám teď na levý ruce rozdrcený kloub, takže i to odepisování zde mi dělá docela problémy. Ale moje pravačka je docela hbytá. :D Nicméně je to prostě peklo.
Uživatelský avatar
Wlezley
 
Příspěvky: 316
Registrován: 24 září 2011 22:54:46
Bydliště: Plzeň
Projekt: Wlezley EU


Zpět na Java

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


cron