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