//riadok (riadok) rozptylovej tabuklky pre zretazene rozptylovanie metodou coalesced chaining
class CRiadok_ZR_CCH {
int hodnota_; //hodnota polozky
bool prazdna_; //priznak, ci je riadok prazdna
int nasledujuca_p_; //index nasledujucej polozky
public:
.
.
.
};
//rozptylova tabulka so zretazenym rozptylovanim - coalesced chaining
class CTabulka_ZR_CCH : public CRiadok_ZR_CCH{
//rozptylova tabulka
CRiadok_ZR_CCH tabulka_[POCET_POLOZIEK_V_TABULKE];
//statisticke premenne na analyzu uspesnosti vkladania prvkov do tabulky
int p_pokusov_;
int p_najdeni_;
int p_posunuti_;
public:
.
.
.
};
//najdenie zadanej hodnoty "hodnota" v rozptylovej tabulke "tabulka"
//s poctom riadkov "p_riadkov" so zretazenym rozptylovanim metodou coalesced chaining
//funkcia vracia index polozky v ktorej bola hodnota najdena (v pripade neuspechu vracia -1)
int najdi_ZR_CCH(CRiadok_ZR_CCH* tabulka, int p_riadkov, int hodnota) {
int riadok = hodnota % p_riadkov;
if (tabulka[riadok].prazdna()) return -1;
else if (tabulka[riadok].hodnota()==hodnota) return riadok;
while ((riadok = tabulka[riadok].nasl_p())!=-1) {
if (tabulka[riadok].hodnota()==hodnota) return riadok;
}
return -1;
} |
//vlozenie zadanej hodnoty "hodnota" do rozptylovej tabulky "tabulka"
//s poctom riadkov "p_riadkov" so zretazenym rozptylovanim metodou coalesced chaining
//funkcia vracia index polozky do ktorej bola hodnota vlozena (v pripade neuspechu vracia -1)
int vloz_ZR_CCH(CRiadok_ZR_CCH* tabulka, int p_riadkov, int hodnota) {
int pokus=0;
int riadok = hodnota % p_riadkov;
if (tabulka[riadok].prazdna()) {
tabulka[riadok].nastav_hodnotu(hodnota);
tabulka[riadok].nastav_priznak(false);
return riadok;
}
else if (tabulka[riadok].nasl_p()==-1) {
int predch = riadok;
while (pokus < POCET_POLOZIEK_V_TABULKE) {
pokus++;
riadok = rnd_i(POCET_POLOZIEK_V_TABULKE);
if (tabulka[riadok].prazdna()) {
tabulka[riadok].nastav_hodnotu(hodnota);
tabulka[riadok].nastav_priznak(false);
tabulka[predch].nastav_nasl_p(riadok);
return riadok;
}
}
}
else while (pokus < POCET_POLOZIEK_V_TABULKE) {
pokus++;
riadok = tabulka[riadok].nasl_p();
if (tabulka[riadok].nasl_p()==-1) {
int predch = riadok;
while (pokus < POCET_POLOZIEK_V_TABULKE) {
pokus++;
riadok = rnd_i(POCET_POLOZIEK_V_TABULKE);
if (tabulka[riadok].prazdna()) {
tabulka[riadok].nastav_hodnotu(hodnota);
tabulka[riadok].nastav_priznak(false);
tabulka[predch].nastav_nasl_p(riadok);
return riadok;
}
}
}
}
return -1;
} |