//riadok (riadok) rozptylovej tabuklky pre zretazene rozptylovanie metodou separate chaining
class CRiadok_ZR_SCH {
CZaznam_JZ* nasledujuci_z_; //ukazovatel na nasledujuci zaznam
public:
.
.
.
};
//rozptylova tabulka so zretazenym rozptylovanim - separate chaining
class CTabulka_ZR_SCH : public CRiadok_ZR_SCH {
//rozptylova tabulka
CRiadok_ZR_SCH tabulka_[POCET_POLOZIEK_V_TABULKE];
//statisticke premenne na analyzu uspesnosti vkladania prvkov do tabulky
int p_pokusov_;
int p_posunuti_;
int p_najdeni_;
public:
.
.
.
};
//najdenie zadanej hodnoty "hodnota" v rozptylovej tabulky "tabulka"
//s poctom riadkov "p_riadkov" so zretazenym rozptylovanim metodou separate chaining
//funkcia vracia index polozky do ktorej bola hodnota vlozena
CZaznam_JZ* najdi_ZR_SCH(CRiadok_ZR_SCH* tabulka, int p_riadkov, int hodnota) {
int riadok = hodnota % p_riadkov;
if (tabulka[riadok].nasl_z()==0) {
return 0;
}
else {
CZaznam_JZ* aktualny=tabulka[riadok].nasl_z();
if (aktualny->hodnota()==hodnota) return aktualny;
while (aktualny->dalsi()!=0) {
aktualny=aktualny->dalsi();
if (aktualny->hodnota()==hodnota) return aktualny;
}
}
return 0;
} |
//vlozenie zadaneho zaznamu "zaznam" s hodnotou "hodnota" do rozptylovej tabulky "tabulka"
//s poctom riadkov "p_riadkov" so zretazenym rozptylovanim metodou separate chaining
//funkcia vracia index polozky do ktorej bola hodnota vlozena
int vloz_ZR_SCH(CRiadok_ZR_SCH* tabulka, int p_riadkov, int hodnota, CZaznam_JZ* zaznam) {
int riadok = hodnota % p_riadkov;
if (tabulka[riadok].nasl_z()==0) {
tabulka[riadok].nastav_nasl_z(zaznam);
zaznam->nastav_dalsi(0);
}
else {
CZaznam_JZ* aktualny=tabulka[riadok].nasl_z();
while (aktualny->dalsi()!=0) aktualny=aktualny->dalsi();
aktualny->nastav_dalsi(zaznam);
zaznam->nastav_dalsi(0);
}
return riadok;
} |