FONForum
http://www.fonforum.org/

Treba mi prevod :) (sa C na Javu)
http://www.fonforum.org/viewtopic.php?f=8&t=6902
Stranica 1 od 1

Autoru:  kliford [ 02.07.2006. 14:26:18 ]
Tema posta:  Treba mi prevod :) (sa C na Javu)

Problem vezan sa strukture podataka :) ... postoje neki zadaci sa olanchavanjem i jos tako nekim stvarima koje nikome nisu jasne..
Onda smo nashli kodove za to, ali na C-u, a od ljudi koji posecuju temu o strukturama niko se nije javio da zna C...
Ja ne znam C, mada bih mogao da ga protumacim, ali mi se cini da ovi kodovi imaju malko sintaksnih greshchica... Pa, ako neko zna C i Javu, ako bi bio ljubazan da na ovoj temi
(http://www.fonforum.org/viewtopic.php?t ... c&start=50 drugi post odozdo) prevede ove kodove na Javu, bice mu zahvalno 10-ak ljudi koji shtrebaju sad to :)

Autoru:  zlatko [ 02.07.2006. 14:37:16 ]
Tema posta: 

C je zakon jezik, šteta što se više ne radi. Mada se i pre radio ali slabo, dok sam ne zalegneš da naučiš nema 'leba. C je mnogo jaka osnova za sve kasnije čak i ako je verovatnoća da će se u njemu programirati mala.

Autoru:  Bageri [ 02.07.2006. 15:50:47 ]
Tema posta: 

Klif ovaj kod je istovetan u Javi, samo shto je metoda izvuchena iz konteksta.


Pazi ovako.

1. Kreiraj klasu ListNode
2. Atributi klase ListNode su Data i Next
3. Data atribut cuva objekat(vrednost cvora)
4. Next atribut drzi adresu sledeceg cvora.
5. Time dobijamo da mozemo da se proshetamo kroz listu i ispitamo sve vrednosti, ako imamo adresu prvog cvora. Prvo ispitamo prvi, pa prvi.Next, pa prvi.Next.Next...
6. Poslednji element ima Next atribut null tj. ne postoji sledeci cvor.
7. Kreiraj klasu List
8.List je klasa koja sadrzi atribut Head koji je pokazivac na prvi cvor u listi i atribut Current(bez kojeg mozemo ziveti) i metode Add, Remove i na primer printAllNodes - metoda koja prodje kroz sve cvorove od prvog do poslednjeg i ispishe ih.
9. Ako je Head null znaci da u listi nema nijedan cvor.

Metoda Add - Ubacuje novi na prvo mesto. Akcije su sledece:
Napraviti novi ListNode. U Data atribut upisati zeljenie objekat. U Next atribut upisati adresu prvog (to je Head atribut).
Poshto je sada novi ListNode prvi element u Head atribut upisati adresu prvog.

Evo prostiji kod.
Znaci imamo Current atrubut i hocemo nov cvor da ubacimo pre njega.

Kod:

   public void Add(Object aData){
      ListNode pom = new ListNode(aData, Curent);
 //Ako je Current null, pom ubacujemo na poslednje mesto u listi
     if (Curent==Head) Head=pom; // Pom je pocetak liste
     else nadjiPrethodni().Next=pom; // Povezujemo prethodni sa pom cvorom
      }

  public ListNode nadjiPrethodni()
 {
 ListNode cvor=Head;
 if (Curent==Head) return null; // Nema prethodnog ovo je prvi cvor
 while ((cvor.Next!=Current) and (cvor!=null))
 cvor=cvor.Next;
 if (cvor!=null) return null; // ne postoji Current cvor u listi
 return cvor; //vraca prethodni cvor
 }

 

Autoru:  kliford [ 02.07.2006. 16:14:17 ]
Tema posta: 

Bre, Bageri, hvala na trudu, ali to sto si napisao vec sve znamo :D
A onaj kod sam probao da prevedem, ali me neke stvari malo bune...
Sta je to uopste olancavanje i sl??? Ovo sto si napisao nema veze sa nasim pitanjem... :)

Autoru:  zlatko [ 02.07.2006. 16:21:45 ]
Tema posta: 

Njima je prebao algoritam za heširanje koji radi sa mod operacijom. Pa se razrešavanje preklapanja radi pretraživanjem na više ili olančavanjem. Samo kod olančavanja se pojavljuje lista.

Evo ja sam se trudio da budem što bukvalniji (npr. nisam koristio gotove javine liste) a opet u duhu jave i programiranja uopšte. I naravno one HashTabela... klase imaju samo jednu metodu implementiranu, dakle kod nije gotov. Tu mora da ima metoda add(int vrednost), get(int index), ... Ali sve te metode će u sebi zvati hash metodu, a njena implementacija je jedono što vam se traži na ispitu:
Kod:
package yu.ac.bg.fon.strukture;

public class Zapis {
   private int kljuc;
   private int info;

   public Zapis(int kljuc, int info) {
      this.kljuc = kljuc;
      this.info = info;
   }

   public int getInfo() {
      return info;
   }

   public void setInfo(int info) {
      this.info = info;
   }

   public int getKljuc() {
      return kljuc;
   }
}



package yu.ac.bg.fon.strukture;

public abstract class HashTabIntSaLinProb {
   class Clan {
      boolean slobodan;
      Zapis z;
   }

   private Clan[] niz;

   public HashTabIntSaLinProb(int velicinaTabele) {
      this.niz = new Clan[velicinaTabele];
   }

   public HashTabIntSaLinProb() {
      this(10);
   }

   private Zapis hashing(int k) {
      int h = k % niz.length;
      Zapis trazeniZapis = null;

      if (niz[h].z.getKljuc() == k) {
         trazeniZapis = niz[h].z;
      } else {
         while (trazeniZapis == null && ++h < niz.length) {
            if (niz[h].z.getKljuc() == k) { // i 1. if moze da
               trazeniZapis = niz[h].z; // se umetne ovde
            }
         }
      }

      return trazeniZapis;
   }
}



package yu.ac.bg.fon.strukture;

public abstract class HashTabIntSaOlanc {
   class Clan {
      boolean slobodan;
      Zapis z;
      Element lista;
   }

   class Element {
      Zapis z;
      Element sled;
   }

   private Clan[] niz;

   public HashTabIntSaOlanc(int velicinaTabele) {
      this.niz = new Clan[velicinaTabele];
   }

   public HashTabIntSaOlanc() {
      this(10);
   }

   private Zapis hashing(int k) {
      int h = k % niz.length;
      Zapis trazeniZapis = null;

      if (niz[h].z.getKljuc() == k) {
         trazeniZapis = niz[h].z;
      } else {
         Element el = niz[h].lista;

         while (trazeniZapis == null && el != null) {
            if (el.z.getKljuc() == k) {
               trazeniZapis = el.z;
            }
            el = el.sled;
         }
      }

      return trazeniZapis;
   }
}

Autoru:  zlatko [ 02.07.2006. 16:35:30 ]
Tema posta: 

Olancavanje je rešavanje kolizije.

Heš f. služi da se element koji se čuva dobije što brže, a ne da se sekvencionalno traži ili da se čuva sortirano pa binarno pretražuje. Tu se bukvano pogađa gde bi taj element trebao biti. To pogađanje radi heš funkcija.

Npr. imaš niz od 20 elementata. Najprostija heš f. traži ostatak deljenja broja koji se unosi sa dužinom niza. Tako će broj 1 da se stavi na niz[1], broj 9 na niz[9], broj 30 na niz[10] itd. E sad i 21 i 41.... će da ide na niz[1] pa ako je ta lokacija u nizu popunjena dešava se kolizija.

Jedan način rešavanja toga je da ako je niz[1] zauzeto da se gleda prvi sledeći nezauzeti, npr. niz[2] i tu da se smesti element.

Drugi je da se napravi lista, pa ako je lokacija zauzeta da se napravi čvor liste i u njega strpa element u koliziji. To je ulančavanje (lista == lanac).

Ove heš funkcije koje su bile date u C-u su tražile elemente, dakle radile suprotno od onog što sam pričao.

Probaj da nacrtaš izgled memorije pa će ti sve biti jasno.

Autoru:  kliford [ 02.07.2006. 17:37:44 ]
Tema posta: 

Auh... Zlatko, hvala ti mnogo na iscrpnom odgovoru... :)

Stranica 1 od 1 Sva vremena su u UTC + 1 sat
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/