Professional Documents
Culture Documents
Algoritmit1 Luento4
Algoritmit1 Luento4
• tietorakenne.
Muistitilan analysointi
• Muistitilaa tarvitaan
– ohjelmakoodille
– käsiteltävälle datalle.
– operaatiot metodeiksi
https://www.cs.usfca.edu/˜galles/visualization/SimpleStack.html
• pop(): (palauttaa ja) poistaa pinon päällimmäisen alkion, mikäli pinossa on alkioita
• isEmpty(): palauttaa totuusarvon true, jos pino on tyhjä ja totuusarvon false, jos
pinossa ainakin yksi alkio
D
C
B B
A A A
Esimerkki
• Oikein: ( ) ( [ ( ) ( ) ] ( ) )
• Väärin: [ ( ) ( ] )
| ( [ ( | ) ] { ( ) } )
pohja pino huippu merkkijono
Sulkujen tarkistaminen
5. Jos a jokin oikea sulku ja pinon päällä saman tyyppinen vasen sulku, niin pop().
Muuten lopetetaan (sulut väärin).
7. Toistetaan kohdasta 2.
Esimerkki
| | 1 2 + 4 * 3 +
Aliohjelma seuraava() käy pinoa hyö- | 1 2 | + 4 * 3 +
dyntämällä lauseketta läpi vasemmalta | 3 | 4 * 3 +
oikealle ja palauttaa operaattorimerkin | 3 4 | * 3 +
tai numeron tai merkin, joka ilmoittaa, | 12 | 3 +
että ollaan päästy lausekkeen loppuun. | 12 3 | +
| 15 |
• Alkioita n kappaletta.
• Tallennetaan alkiot taulukkoon taulu[0...n-1] (taulukon koko mahdollisesti tätä
suurempi).
• Ensimmäisenä pinoon tallennettava alkio asetetaan (pinon pohjalle) paikkaan taulu[0],
toinen paikkaan taulu[1] jne.
• Pinon huipulla oleva (päällimmäinen) alkio on paikassa taulu[n-1].
• Ennen push-operaatiota testataan, että pino ei ole täysi.
(alkiota lisätessä taulu[n]=alkio, n kasvaa yhdellä)
• Ennen pop-operaatiota testataan, että pino ei ole tyhjä.
(alkiota palauttaessa ja poistaessa n pienenee yhdellä, alkio=taulu[n])
• Pino-operaatiot ovat vaativuudeltaan O(1).
• Pinon käyttö algoritmissa ei kasvata oleellisesti algoritmin aikavaatimusta.
• Alkiot tallennetaan tyyppiä PinoSolmu oleviin tietueisiin, joissa viite pinossa kyseisen
alkion alla olevan alkion PinoSolmu-tietueeseen (linkitys pinon huipulta kohtii pohjaa
ja viite päällimmäiseen alkioon).
https://www.khanacademy.org/computer-programming/queue-visualization/47347064774
• dequeue(): palauttaa ja poistaa ensimmäisen alkion jonosta, mikäli jono ei ole tyhjä
• isEmpty(): palauttaa totuusarvon true, jos jono on tyhjä ja totuusarvon false, jos
jonossa ainakin yksi alkio
• front(): mikäli jono ei ole tyhjä, palauttaa jonon ensimmäisen alkion (keula-alkion)
sitä poistamatta.
Esimerkki:
Luodaan tyhjä jono, jossa tilaa korkeintaan 4 alkiolle. isEmpty=true
dequeue()=A, size()=3 B C D
• Alkioita n kappaletta.
• Listan kulku eteenpäin: siirrytään alkiosta a alkioon succ(a) (paitsi jos a viimeinen).
• Listan kulku taaksepäin: siirrytään alkiosta a alkioon pred(a) (paitsi jos a ensim-
mäinen).
• Alkion käyttöönotto (saanti, engl. access): alkion tietoja käytetään tai muutetaan
• Listan tyhjennys.
• Muistilan vapauttaminen.