Professional Documents
Culture Documents
Algoritmit1 Luento6
Algoritmit1 Luento6
binäärihaku
Vertailujen lukumäärä
Esim. n = 50
Esim. n = 1000
Binäärihakua voi käyttää järjestetylle aineistolle. Tehokkuuden edellytys on, että to-
teutus on tehty niin, että keskimmäinen alkio (käytännössä kaikki alkiot) on suoraan
saatavilla.
Kertausta aiemmilta kerroilta ja johdattelua linkitetyn listan käyttöön
Abstraktit tietotyypit: jono, pino, lista (järjestämätön tai järjestetty).
Käytännön toteutuksessa tietorakenteena
taulukko linkitetty lista
• keskellä olevan alkion saaminen tehokkaasti • lisäys ja poisto välistä tehokkaasti
• vaatii ennalta annetun maksimikoon, koko • muistiosoite jokaiselle seuraajalle, solmuja
rajoitettu voidaan lisätä kunnes muisti loppuu
• muistiosoite taulukon alkuun • edellyttää yleensä enemmän ohjelmakoodia,
• soveltuu binäärihakuun järjestetystä listasta osoittimet alkioihin.
• Jokaisessa alkiossa osoitin (linkki, viite) seuraavaan alkioon listassa, esim. next.
Listan läpikäynti
• Varataan uudelle alkiolle tila dynaamisesta Esimerkki: Muodostetaan linkitetty lista (li-
sätään alkioita tyhjään listaan). Jokainen
muistista.
listan alkio on SolmuOlento-tyyppinen olio,
• Osoitin uuteen alkioon (esim. uusi). joka sisältää string-tyyppisen arvon ja refe-
• Tallennetaan tietosisältö alkion kenttiin. renssin seuraavaan alkioon.
···
uusi.next = plista;
plista = uusi;
Lisäys listan keskelle
uusi.next = pj.next;
pj.next = uusi;
Lisäys listan loppuun
pviim.next = uusi;
uusi.next = null;
pviim = uusi;
Poistaminen linkitetystä listasta
plista = pois.next;
Listan keskeltä poistaminen
pj.next = pois.next;
Linkitetty lista, jossa osoitin myös viimeiseen alkioon
Alkutietue
pj.next = pois.next;
Rengaslista (engl. circular list)
• Ei null-osoitinta lopussa
• Rengas on käyty läpi, kun tullaan takaisin samaan alkioon kuin mistä lähdettiin.
Rengaslistassa listaosoitin voi olla myös osoitin viimeiseen alkioon.
• Lisäys sekä alkuun että loppuun olisi helppoa (ei tarvita koko listan läpikäyntiä).
• Jokaisesta tietueesta osoitin sekä seuraavaan että edelliseen (esim. prev) alkioon.
• Lisäys ja poisto mielivaltaiseen paikkaan voidaan tehdä ilman että täytyy erikseen
hakea naapurialkioita.
uusi.prev = seur.prev;
uusi.next = seur;
seur.prev.next = uusi;
seur.prev = uusi;
Kaksoislinkitetty rengaslista alkutietueella