Implementácie

Vyhµadávanie pri metóde Separate chaining

 
 
//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;
}