Implementácie

Vyhľadávanie v obojsmerne zreťazenom zozname podľa aktuálnej pozície

 
 
//sekvencne vyhladavanie zadanej hodnoty "hladany" v OZ zozname od zaznamu "aktualny" s podmienkou
//zoznam musi byt vzostupne usporiadany 
//(na zaciatku zoznamu je zaznam s najmensou hodnotou)
//zoznam musi byt ukonceny nulovymi ukazovatelmi
//funkcia vracia ukazovatel na najdeny zaznam (v pripade neuspechu vyhladavania vracia 0	
CZaznam_OZ* OZnajdi_sekv1_zaznam_podm(int hladany, CZaznam_OZ* aktualny){
	if (!aktualny) return 0;
	if (aktualny->hodnota()==hladany) return aktualny;

	if (hladany < aktualny->hodnota()) {
		do {
			aktualny=aktualny->predch();
			if (!aktualny) return 0;
		} while (hladany < aktualny->hodnota());
	if (aktualny->hodnota()==hladany) return aktualny;
	else return 0;
	}
	else {
		do {
			aktualny=aktualny->dalsi();
			if (!aktualny) return 0;
		} while (hladany > aktualny->hodnota());
	if (aktualny->hodnota()==hladany) return aktualny;
	else return 0;
	}
}
 
//sekvencne vyhladavanie zadanej hodnoty "hladany" v OZ zozname od zaznamu "aktualny" s podmienkou
//zoznam musi byt vzostupne ausporiadany 
//(na zaciatku zoznamu je zaznam s najmensou hodnotou)
//zoznam musi byt zretazeny dokola
//funkcia vracia ukazovatel na najdeny zaznam (v pripade neuspechu vyhladavania vracia 0  	
CZaznam_OZ* OZnajdi_sekv2_zaznam_podm(int hladany, CZaznam_OZ* aktualny){
	if (!aktualny) return 0;
	if (aktualny->hodnota()==hladany) return aktualny;

	CZaznam_OZ* prvy=aktualny;
	if (hladany < aktualny->hodnota()) {
		do {
			aktualny=aktualny->predch();
		} while (hladany < aktualny->hodnota() && aktualny!=prvy);
	if (aktualny->hodnota()==hladany) return aktualny;
	else return 0;
	}
	else {
		do {
			aktualny=aktualny->dalsi();
		} while (hladany > aktualny->hodnota() && aktualny!=prvy);
	if (aktualny->hodnota()==hladany) return aktualny;
	else return 0;
	}
}