![]() |
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;
}
} |