Lista: |
List: |
Lista abstraktina tietotyyppinä on keskenään
samantyyppisten alkioiden kokoelma, jonka alkiot ovat toisiinsa nähden
peräkkäissuhteessa. Lista voi olla tyhjä, jolloin se ei sisällä yhtään alkiota.
Epätyhjä lista puolestaan sisältää mielivaltaisen määrän alkioita. Listan pituus
on listan sisältämien alkioiden lukumäärä. Listan pituus voi listan elinkaaren aikana
vaihdella huomattavasti, koska listaan voidaan lisätä ja siitä voidaan poistaa alkioita
kulloisenkin käyttötarpeen edellyttämällä tavalla. Listatyyppiin ei sisältynyt operaatiota listassa jo olevan alkion muuttamista varten. Muutosoperaation puuttuminen ei estä alkion muuttamista, mutta muutoksen tekeminen on hieman vaivalloista: Aluksi selvitetään muutettavan alkion asema ja haetaan kyseisessä asemassa oleva arvo esiin. Tällä tavoin saadaan muodostetuksi listan alkion kopio, johon halutut muutokset tehdään. Lopuksi alkuperäinen alkio poistetaan listasta ja viedään muutettu kopio samaan asemaan, mistä alkio poistettiin. Yhden alkion muuttaminen toisin sanoen muuttaakin koko listan. Pinossa ja pakassa saatavilla oleva alkio muutetaan aivan vastaavalla tavalla |
|
Pino: |
Stack: |
Kun listatyypin lisäys-, poisto- ja
hakuoperaatioiden sallitaan kohdistua vain listan yhteen päähän - joko vain listan
alkuun tai vain listan loppuun - johdutaan abstraktiin tietotyyppiin pino. Listan päistä
käytetään tällöin nimityksiä pinon pinta ja pinon pohja. Kaikki pino-operaatiot
kohdistuvat aina pinon pinnalle. Tämä merkitsee, että kaikista pinon alkioista vain
päällimmäisin eli pinon pinnalla oleva alkio on käsiteltävissä. Pinon toiseksi
päällimmäisimpään alkioon päästään käsiksi vain poistamalla pinosta ensin
päällimmäisin alkio. Tyhjässä pinossa päällimmäistä alkiota ei ole lainkaan.
Epätyhjään pinoon taas voi päällimmäisen alkion lisäksi sisältyä mielivaltainen
määrä muita alkiota, joiden lukumärää tosin ei tunneta. Pinon ominaisuuksiin ei
näet kuulu tietää, kuinka monta alkiota pino kullakin hetkellä sisältää. Pinoa
kutsutaan toisinaan myös LIFO-listaksi, jolloin viitataan pinon alkioille tyypilliseen
ominaisuuteen "last-in-first-out". Koska kaikkien pino-operaatioiden toiminta kohdistuu aina pinon pinnalle, ei operaatioita käytettäessä tarvitse yksilöidä käsittelykohtaa. Tästä syystä aseman käsite menettää pinojen tapauksessa merkityksensä. Vastaavasti ei puhuta myöskään pinon alkioiden etäisyydestä pinon huipulta (tai pohjalta): ainoan mahdollisen käsiteltävissä olevan alkion etäisyys pinon pinnalta on joka tapauksessa nolla. Useimmilla pino-operaatioilla onkin vain yksi parametri, nimittäin se pino, johon operaatio kohdistetaan. |
![]() |
Jono: |
Queue: |
Rajoittamalla listan käyttöä siten, että
sallitaan alkioiden lisääminen vain listan loppuun ja alkioiden poistaminen ja hakeminen
vain listan alusta, päädytään abstraktiin jonojen tietotyyppiin. Jono voi olla tyhjä
tai sisältää mielivaltaisen määrän alkioita. Epätyhjään jonoon sisältyvien
alkioiden lukumäärää ei tunneta. Jonoa kutsutaan joskus FIFO-listaksi, koska jonon
alkioilla on ominaisuus "first-in-first-out". Uusi
alkio asettuu aina jonon loppuun ja alkioita käsitellään saapumisjärjestyksessä.
Jonosta ei voi poistaa keskeltä.
Jono-operaatioissa
ei käsittelykohtaa tarvitse yksilöidä, koska käsittelykohta on aina ilmeinen. |
![]() |
Prioriteettijono: | Priority Queue: |
Nimitys prioriteettijono perustuu siihen, että alkioille määritellään tärkeysjärjestys eli prioriteetti, joka määrää alkioiden joukostapoistamisjärjestyksen: paremman prioriteetin omaava alkio poistetaan joukosta ennen huonomman prioriteetin omaavaa alkiota. Kyseessä ei toisin sanoen ole puhdas jono, josta alkiot poistetaan saapumisjärjestyksessä, vaan prioriteettijonoon vietävä alkio sijoittuu jonossa jo ennestään oleviin alkioihin nähden oman prioriteettinsa mukaisesti. Prioriteettijonosta saadaan tavallinen jono kiinnittämällä prioriteetti samaksi kuin saapumisjärjestys eli kun sallitaan alkioiden poistaminen ainoastaan tietyssä järjestyksessä, päädytään prioriteettijonoon. Alkioiden prioriteettijonoon viemistä ei mitenkään rajoiteta. | ![]() |
Pakka: |
Deque: |
Pino ja jono saadaan listasta rajoittamalla lisäys-, poisto- ja hakuoperaatiot kohdistuviksi aina vain listan jompaankumpaan päähän. Sallimalla nämä kolme operaatiota listan molemmissa päissä, muttei muualla, saadaan listasta abstrakti tietotyyppi pakka. | ![]() |
Taulukko: | Array: |
Silloin, kun kokoelman alkioihin on tärkeää päästä
käsiksi mielivaltaisessa järjestyksessä, mutta alkioita halutaan silti käsitellä
tehokkaasti myös peräkkäin, tarvitaan abstraktia taulukkotyyppiä. Taulukon alkioiden
välillä vallitsee peräkkäisyyssuhde, mutta alkiot ovat saatavilla toisistaan
riippumattakin, koska alkioiden asemat saadaan selville indeksoimalla eli ilmaisemalla
alkioiden suhteelliset etäisyydet taulukon alusta lukien. Alkiot sijaitsevat listassa peräkkäin ja useimmiten alkiot myös käsitellään peräkkäisjärjestyksessä. Käsittelysuunta tosin voi muuttua etenevästä takenevaksi, mutta kumpaankin suuntaan siirrytään alkio alkiolta. Muista listoista poiketen taulukot tukevat myös hajakäsittelyä, vaikka ovatkin sinänsä ilmiselvästi peräkkäisrakenteita. |
![]() |
Puu: | Tree: |
Puu määrää alkiokokoelmalle hierarkkisen rakenteen. Määritellään puu kokoelmaksi solmuja, jotka muodostavat hierarkkisen rakenteen. Solmujen hierarkia eli solmujen keskinäinen sijainti rakenteessa määräytyy solmujen välisen isä-relaation perusteella. Puun solmuista yksi, niin sanottu juuri (juurisolmu), on erityisasemassa: juurisolmulla ei ole isää. Puun kaikilla muilla solmuilla sen sijaan on yksiymmärteinen isäsolmu. Puun kukin solmu sisältää hallittavan alkiokokoelman yhden alkion, joka luonnollisesti voi olla minkä tahansa tyyppinen. | ![]() |
Binääripuu: | Binary tree: |
Rajoittamalla solmun alipuiden lukumäärää saadaan
joitakin tärkeitä puiden erikoistapauksia. ärimmillään voidaan alipuiden
määrä rajoittaa enintään yhteen, mutta tällainen puu on itse asiassa lista.
Enintään kahden alipuun salliminen puolestaan johtaa binääripuun käsitteeseen, joka
on yksi tietojenkäsittelytieteen keskeisimmistä peruspilareista. Binääripuu on joko tyhjä puu tai puu, jonka kullakin solmulla on yksi, kaksi tai ei yhtään poikaa. Solmun pojat erotetaan toisistaan kutsumalla toista vasemmaksi pojaksi ja toista oikeaksi pojaksi. Näistä kahdesta pojasta kumpi tahansa voi puuttua. Olennainen ero binääripuun ja sellaisen yleisen puun, jonka jokaisella solmulla on enintään kaksi poikaa, välillä on seuraava: Jos yleisen puun solmulla on vain yksi poika, on se ilman muuta isänsä vanhin eli vasemmanpuoleisin poika. Sen sijaan binääripuun yksipoikaisen solmun ainoa poika on joko vasen tai oikea poika sen mukaan, kumpi pojista puuttuu. Binääripuun solmun ainoa poika ei toisin sanoen ilman muuta ole vasemmanpuoleinen poika. |
![]() |
Joukko: | Set: |
Joukko on kokoelma mielivaltaisen tyyppisiä alkioita.
Alkiotyyppi voi siis olla yksinkertainen (kuten kokonaisluku tai merkkijono), tai
esimerkiksi joukko (kokonaisuus on siis joukkojen joukko). Joukon kaikki alkiot ovat
keskenään erilaisia, toisin sanoen sama alkio ei voi esiintyä joukossa samanaikaisesti
kahtena eri ilmentymänä. Mikäli joukon alkiot ovat joukkoja, voi alkiojoukkoihin toki
sisältyä keskenään samojakin alkioita, mutta saman joukon kaksi eri alkiojoukkoa
eivät voi olla keskenään täysin samat. Joukon alkiot ovat yleensä keskenään samaa tyyppiä. Atomeille oletetaan usein lineaarinen järjestys<[lue: "pienempi kuin" tai "edeltää"], joka täyttää seuraavat ehdot: 1) Jos a ja b ovat joukon S alkioita, vain yksi väittämistä a<b, a=b, b<a on tosi. 2) Jos a, b ja c ovat joukon S alkioita siten, että a<b ja b<c, niin a<c. Alkioiden järjestyksen ei tarvitse olla käyttäjälle näkyvä. Jos käyttäjä ei tarvitse järjestystä, toteutus voi määritellä sen sisäisesti sillä monet joukkojen toteutustavoista vaativat yksikäsitteisen järjestyksen. |
|
Suunnattu verkko: | Divertex graph: |
Suunnattu verkko G=(V, E) muodostuu solmujen (vertex, node) joukosta V ja suunnattujen kaarten (edge) joukosta E, jota kutsutaan joskus myös nuolten joukoksi. Solmut kuvaavat verkon perusalkioita ja solmujen väliset suhteet esitetään suunnattujen kaarten avulla. Suunnattu kaari on kahden solmun u ja v järjestetty pari (u, v), jota merkitään myös u ® v. Parin ensimmäinen solmu on suunnatun kaaren lähtösolmu ja jälkimmäinen solmu päätesolmu. Suunnattu kaari Ñ lyhyesti kaari, jos on selvää, että on kyse suunnatusta verkosta Ñ johtaa lähtösolmusta päätesolmuun. Kaari kuvaa parin jäsenten välistä naapuruussuhdetta: päätesolmu on lähtösolmun naapuri. Suhde on yksisuuntainen; päinvastainen naapuruussuhde vallitsee vain, jos verkossa on myös päinvastaiseen suuntaan suunnattu kaari. Solmulla voi olla mielivaltainen määrä naapureita ja vastaavasti solmu voi olla mielivaltaisen monen solmun naapuri. Solmu voi olla itsensä naapuri, ja naapuruus voi olla jopa moninkertaista, toisin sanoen lähtösolmusta päätesolmuun voi johtaa useita kaaria. Solmujen ja kaarten joukot ovat aina äärellisiä, joten verkkokin on äärellinen.Sekä verkon solmu että verkon kaari voidaan varustaa nimiöllä. | ![]() |
Suuntaamaton verkko: | Graph: |
Suuntaamaton verkko G=(V, E) koostuu solmuista ja kaarista kuten suunnattu verkkokin, mutta suuntaamattoman verkon kaaria ei varusteta suunnalla. Tämä merkitsee, että kaari (u, v) on järjestämätön pari ja se voidaan yhtä hyvin esittää muodossa (v, u). Koska kaarella ei ole suuntaa, voidaan molempia kaareen liittyviä solmuja kutsua kaaren päätesolmuiksi. Kaaren päätesolmut ovat toistensa naapureita, toisin sanoen naapuruussuhde on symmetrinen. Suunatusta verkosta poiketen, suuntaamattoman verkon kaaren ei sallita johtavan solmusta itseensä ja kahden eri solmun välillä saa olla vain yksi kaari. Abstraktin tietotyypin suuntamaton verkko operaatiot ovat samat kuin suunnatun verkon operaatiot. | ![]() |