Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Samankaltaiset tiedostot
Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

3. Pinot, jonot ja linkitetyt listat

A TIETORAKENTEET JA ALGORITMIT

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

18. Abstraktit tietotyypit 18.1

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

3. Pinot, jonot ja linkitetyt listat

Algoritmit 1. Luento 4 Ke Timo Männikkö

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

3. Pinot, jonot ja linkitetyt listat

TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Algoritmit 1. Luento 3 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Ohjelmointi 2 / 2010 Välikoe / 26.3

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

2. Perustietorakenteet

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Ohjelmistotuotanto, kurssikoe , H. Laine Arvostelu

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

3. Binääripuu, Java-toteutus

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Java-API, rajapinnat, poikkeukset, UML,...

3. Komponentit ja rajapinnat

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Algoritmit 2. Luento 2 Ke Timo Männikkö

Metodien tekeminen Javalla

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Algoritmit 1. Demot Timo Männikkö

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Rajapinta (interface)

3. Software components and interfaces

14. Poikkeukset 14.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisältö. 22. Taulukot. Yleistä. Yleistä

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Taulukoiden käsittely Javalla

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Listarakenne (ArrayList-luokka)

Java UI-komponentit (JTable) Juha Järvensivu 2007

Olio-ohjelmointi Javalla

16. Javan omat luokat 16.1

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Java kahdessa tunnissa. Jyry Suvilehto

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

T Henkilökohtainen harjoitus: FASTAXON

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 7 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

Aikavaativuuden perussäännöt

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

11. Javan valintarakenteet 11.1

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisältö. 2. Taulukot. Yleistä. Yleistä

Luokan muodostimet (Constructors)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

Luokan sisällä on lista

Java-kielen perusteet

4. Sekvenssit Astetta soveltavat sekvenssit

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

15. Ohjelmoinnin tekniikkaa 15.1

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

A TIETORAKENTEET JA ALGORITMIT

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Olio-ohjelmointi Syntaksikokoelma

9. Periytyminen Javassa 9.1

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

4. Perustietorakenteet: pino, jono ja lista

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Mikä yhteyssuhde on?

Ohjelmointi 2 / 2011 Välikoe / 25.3

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen,

Mitä poikkeuskäsittely tarkoittaa?

15. Ohjelmoinnin tekniikkaa 15.1

Tietorakenteet, laskuharjoitus 4,

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Poikkeustenkäsittely

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1

Ohjelmoinnin jatkokurssi, kurssikoe

UML ja luokkien väliset suhteet

11. Javan toistorakenteet 11.1

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

KOHDELUOKAN MÄÄRITTELY

Tietorakenteet, laskuharjoitus 6,

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Transkriptio:

Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio) eli lisätään Push(alkio) eli lisätään eli poistetaan päällimmäinen alkio Push(alkio) eli lisätään Tietorakenteet, syksy 007 Pinon tarkempi määrittely Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Push(x): lisää n x pinon päälle : palauttaa pinon päällimmäisen alkion (ja poistaa sen pinosta) tapahtuu virhe, jos pino on tyhjä Muutamia pinon mahdollisia apumetodeja IsEmpty(): palauttaa arvon true, jos pino on tyhjä, ja muuten arvon false Tietorakenteet, syksy 007 Pinon tarkempi määrittely Top(): palauttaa pinon päällimmäisen alkion poistamatta sitä pinosta tapahtuu virhe, jos pino on tyhjä käytetään joskus myös nimeä Peek() Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota pinossa on Esimerkki Top() palauttaa päällimmäisen alkion poistamatta sitä palauttaa (ja poistaa) päällimmäisen alkion pino on tyhjä virhe! 5 IsEmpty() palauttaa arvon true Size() palauttaa arvon Push(alkio5) lisää pinon päälle alkion 5 palauttaa ja poistaa päällimmäisen alkion IsEmpty() palauttaa arvon false Tietorakenteet, syksy 007 Tietorakenteet, syksy 007

Pinon rajapinta Javalla public interface Stack { public int size(); public boolean isempty(); public Object top() throws StackEmptyException; public void push (Object element); public Object pop() throws StackEmptyException; public class StackEmptyException extends RuntimeException { public StackEmptyException(String err) { super(err); Pinon taulukkototeutus Abstrakti määrittely ei ota kantaa toteutustapaan Perustapa: pinon alkiot talletetaan taulukkoon Taulukkototeutuksen osat: kokoa N oleva taulukko S muuttuja top, joka kertoo taulukon päällimmäisen alkion indeksin toteutustavan aiheuttama rajoitus: pinoon mahtuu korkeintaan N alkiota, missä N on taulukon koko Tietorakenteet, syksy 007 5 Tietorakenteet, syksy 007 6 Pinon taulukkototeutus Esim. pino taulukossa S, jonka koko on N = 0 pinossa alkiota alkio alkio alkio alkio top = Push(alkio5) lisää alkion 5 kohtaan top + alkio alkio alkio alkio alkio5 top = top + = ja arvoa top kasvatetaan yhdellä alkio alkio alkio alkio alkio5 Pinon taulukkototeutus tyhjä pino top = pino on täynnä alkio alkio alkio alkio alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 top = 9 top = N, seuraava paikka N menisi taulukon rajojen yli nyt Push(x) tuottaisi virheen (ylivuoto) top = Tietorakenteet, syksy 007 7 Tietorakenteet, syksy 007 8

Pinon taulukkototeutus Javalla public class ArrayStack implements Stack { public static final int defaultn = 000; private int N; private Object S[]; private int top = -; public ArrayStack() { this(defaultn); public ArrayStack(int size) { N = size; S = new Object[N]; Pinon taulukkototeutus Javalla public int size() { return (top + ); public boolean isempty() { return (top < 0); public void push(object obj) { if (size() == N) throw new StackFullException("Stack overflow."); S[++top] = obj; Tietorakenteet, syksy 007 9 Tietorakenteet, syksy 007 0 Pinon taulukkototeutus Javalla public Object top() throws StackEmptyException { throw new StackEmptyException("Stack is empty."); return S[top]; public Object pop() throws StackEmptyException { Object elem; throw new StackEmptyException("Stack is Empty."); elem = S[top]; S[top--] = null; return elem; Tietorakenteet, syksy 007 Jono (queue) Jono: ensimmäisenä sisään, ensimmäisenä ulos (FIFO, First In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys jonon perälle (enqueue), ja jonon ensimmäisen alkion poisto (dequeue) alkio alkio alkio alkio alkio alkio alkio alkio alkio Enqueue(alkio) Enqueue(alkio) Dequeue() Dequeue() Tietorakenteet, syksy 007

Jonon tarkempi määrittely Jono Q on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Enqueue(x): lisää n x jonon perälle Dequeue(): palauttaa jonon ensimmäisen alkion (ja poistaa sen jonosta) tapahtuu virhe, jos jono on tyhjä Jonon tarkempi määrittely Front(): palauttaa jonon ensimmäisen alkion poistamatta sitä jonosta tapahtuu virhe, jos jono on tyhjä Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota jonossa on Vastaavat apumetodit kuin pinolla IsEmpty(): palauttaa arvon true, jos jono on tyhjä, ja muuten arvon false Tietorakenteet, syksy 007 Tietorakenteet, syksy 007 Esimerkki Front() aiheuttaa virheen Enqueue(alkio) lisää alkion alkio Size() palauttaa arvon alkio Enqueue(alkio) lisää alkion alkio alkio IsEpmty() palauttaa arvon false alkio alkio Front() palauttaa alkion poistamatta sitä alkio alkio Enqueue(alkio) lisää alkion alkio alkio alkio Dequeue() palauttaa ja poistaa alkion alkio alkio Jonon rajapinta Javalla public interface Queue { public int size(); public boolean isempty(); public Object front() throws QueueEmptyException; public void enqueue (Object element); public Object dequeue() throws QueueEmptyException; public class QueueEmptyException extends RuntimeException { public QueueEmptyException(String err) { super(err); Tietorakenteet, syksy 007 5 Tietorakenteet, syksy 007 6

Jonon taulukkototeutus Jonon taulukkototeutuksen osat: kokoa N oleva taulukko Q muuttuja f irst, joka kertoo jonon ensimmäisen alkion paikan taulukossa jos jono on tyhjä, first kertoo mihin ensimmäinen alkio asetetaan muuttuja rear, joka kertoo seuraavan taulukossa vapaana olevan alkion indeksin Jonon taulukkototeutus Esim. jono taulukossa Q, jonka koko on N = 0 jonossa 5 alkiota alkio alkio alkio alkio alkio5 first = 0 rear = 5 Dequeue palauttaa ja poistaa alkion alkio alkio alkio alkio5 first = 0 rear = 5 ja arvoa first kasvatetaan yhdellä alkio alkio alkio alkio5 first = rear = 5 Tietorakenteet, syksy 007 7 Tietorakenteet, syksy 007 8 Jonon taulukkototeutus alkutilanne alkio8 alkio9 first = 7 rear = 9 Enqueue(alkio0) lisää alkion 0 kohtaan 9 alkio8 alkio9 alkio0 first = 7 rear = 9 arvoa rear kasvatetaan yhdellä alkio8 alkio9 alkio0 rear = (rear + )%N = 0%0 = 0 first = 7 Jonon taulukkototeutus lähtötilanne alkio alkio alkio alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 rear = first = Enqueue(alkio) lisäsi alkion kohtaan alkio alkio alkio alkio alkio5 alkio6 alkio7 alkio8 alkio9 alkio0 first = rear = ongelma, jos jonon tyhjyys tutkitaan ehdon first == rear pohjalta (a la luentomoniste) Tietorakenteet, syksy 007 9 Tietorakenteet, syksy 007 0

Jonon taulukkototeutus ratkaisu : sallitaan vain N alkiota (a la luentomoniste) ratkaisu : ylläpidetään erikseen tieto alkioiden lukumäärästä (nämä kalvot) jonon alkioiden lukumäärä ratkaisussa : jos alkioita vähemmän kuin N, niin alkioiden lkm = (rear + N first)%n aaa a9 a0aaa rear = first = 8 rear + N = + 0 = Jonon taulukkototeutus Javalla public class ArrayQueue implements Queue { public static final int defaultn = 000; private int N; private Object Q[]; private int first = 0; private int rear = 0; private int items = 0; public ArrayQueue() { this(defaultn); public ArrayQueue(int size) { N = size; Q = new Object[N]; Tietorakenteet, syksy 007 Tietorakenteet, syksy 007 Jonon taulukkototeutus Javalla public int size() { return items; public boolean isempty() { return (items == 0); public void enqueue(object obj) { if (size() == N) throw new QueueFullException("Queue overflow."); Q[rear] = obj; rear = (rear+) % N; items++; Tietorakenteet, syksy 007 Jonon taulukkototeutus Javalla public Object front() throws QueueEmptyException { throw new QueueEmptyException("Queue is empty."); return Q[front]; public Object dequeue() throws QueueEmptyException { Object elem; throw new QueueEmptyException("Queue is Empty."); elem = Q[front]; Q[front] = null; front = (front+) % N; items--; return elem; Tietorakenteet, syksy 007

Loppuhuomautuksia Sekä pinon että jonon taulukkototeutuksen tilavaatimus on Θ(N) muuttumaton, eikä riipu alkioiden lukumäärästä n jos N suuri arvoon n nähden, suuri osa taulukon muistitilasta käyttämättä jos N liian pieni, tila voi loppua kesken Kukin tässä käsitelty perus- sekä apumetodi omaa suoritusajan Θ() Tietorakenteet, syksy 007 5