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

Samankaltaiset tiedostot
Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

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

A TIETORAKENTEET JA ALGORITMIT

18. Abstraktit tietotyypit 18.1

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

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

3. Pinot, jonot ja linkitetyt listat

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

TIETORAKENTEET JA ALGORITMIT

3. Pinot, jonot ja linkitetyt listat

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

3. Pinot, jonot ja linkitetyt listat

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

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

4. Sekvenssit Astetta soveltavat sekvenssit

2. Perustietorakenteet

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 3, ratkaisuja

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

Algoritmit 1. Luento 3 Ti Timo Männikkö

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Listarakenne (ArrayList-luokka)

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Luokan sisällä on lista

A TIETORAKENTEET JA ALGORITMIT

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

Mikä yhteyssuhde on?

Algoritmit 1. Luento 6 Ke Timo Männikkö

3. Binääripuu, Java-toteutus

Olio-ohjelmointi Javalla

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Rajapinta (interface)

Olio-ohjelmointi Syntaksikokoelma

Tietorakenteet ja algoritmit - syksy

Tieto- ja tallennusrakenteet

Tietorakenteet, laskuharjoitus 4,

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

Tietorakenteet ja algoritmit

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

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

Tietorakenteet, laskuharjoitus 6,

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

Rakenteiset tietotyypit Moniulotteiset taulukot

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

Java kahdessa tunnissa. Jyry Suvilehto

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

4. Perustietorakenteet: pino, jono ja lista

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Aikavaativuuden perussäännöt

Algoritmit 1. Luento 1 Ti Timo Männikkö

Ohjelmointi 2 / 2010 Välikoe / 26.3

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Luokan muodostimet (Constructors)

Tietorakenteet, laskuharjoitus 4,

Ohjelmoinnin perusteet Y Python

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

KOHDELUOKAN MÄÄRITTELY

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

Tarkennamme geneeristä painamiskorotusalgoritmia

14. Poikkeukset 14.1

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin peruskurssien laaja oppimäärä

ITKP102 Ohjelmointi 1 (6 op)

Tietorakenteet, laskuharjoitus 7, ratkaisuja

14. Poikkeukset 14.1

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmoinnin peruskurssien laaja oppimäärä

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Muita linkattuja rakenteita

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Miten käydä läpi puun alkiot (traversal)?

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Ohjelmoinnin peruskurssien laaja oppimäärä

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

UML ja luokkien väliset suhteet

Algoritmit 2. Luento 14 Ke Timo Männikkö

Ohjelmointiharjoituksia Arduino-ympäristössä

Transkriptio:

Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai loppuun Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen alkio2 alkio3 alkio2 PushFront(alkio2) PushFront(alkio3) muita nimityksiä mm. InsertFront, AppendLeft Tietorakenteet, syksy 2007 1 Tietorakenteet, syksy 2007 2 Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushBack(x): lisää tietoalkion x jonon perään alkio2 PushBack(alkio2) PushBack(alkio3) vastaa pinon Push(x)- ja tavallisen jonon Enqueue(x)-metodia muita nimityksiä mm. InsertLast, Append Tietorakenteet, syksy 2007 3 Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PopFront(): palauttaa ensimmäisen alkion (ja poistaa sen jonosta) alkio2 alkio3 alkio3 tapahtuu virhe, jos jono on tyhjä PopFront() PopFront() tavallisen jonon vastine: Dequeue() Tietorakenteet, syksy 2007 4

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PopBack(): palauttaa viimeisen alkion (ja poistaa sen jonosta) alkio2 tapahtuu virhe, jos jono on tyhjä vastaa pinon Pop()-metodia PopBack() PopBack() Vastaavat apumetodit IsEmpty(): palauttaa arvon true, jos jono D tyhjä, ja muuten arvon false Front(): palauttaa jonon ensimmäisen alkion poistamatta sitä jonosta tapahtuu virhe, jos D on tyhjä IsEmpty() palauttaa false Front() palauttaa alkion 1, ei poista Tietorakenteet, syksy 2007 5 Tietorakenteet, syksy 2007 6 Back(): palauttaa jonon viimeisen alkion poistamatta sitä jonosta tapahtuu virhe, jos D on tyhjä vastaa pinon Top()-metodia Size(): palauttaa kokonaislukuarvon, joka kertoo kuinka monta alkiota jonossa D on Back() palauttaa alkion 3, ei poista Size() palauttaa lukumäärän 3 Tietorakenteet, syksy 2007 7 Kaksiloppuisen jonon taulukkototeutus Kaksiloppuinen jono taulukossa: esimerkiksi jonon taulukkototeutusta matkien kokoa N oleva taulukko D muuttuja f irst: jonon ensimmäisen alkion indeksi jos jono on tyhjä, first kertoo mihin ensimmäinen alkio asetetaan muuttuja rear: seuraavan taulukossa vapaana olevan alkion indeksi muuttuja items: jonon alkioiden lukumäärä Tietorakenteet, syksy 2007 8

PushFront(x) taulukossa 1 2 3 alkio7 alkio8 alkio9 0 first = 6 1 2 3 alkio x alkio7 alkio8 alkio9 0 PushBack(x) taulukossa 1 2 3 alkio7 alkio8 alkio9 0 first = 6 1 2 3 alkio x alkio7 alkio8 alkio9 0 D.PushFront(x) if items = N then virhe("d täynnä") first (first + N 1) mod N D[first] x items items + 1 first = (first + N 1) mod N = 5 rear = (rear + 1) mod N = 4 D.PushBack(x) if items = N then virhe("d täynnä") D[rear] x rear (rear + 1) mod N items items + 1 first = 6 Tietorakenteet, syksy 2007 9 Tietorakenteet, syksy 2007 10 PopFront() taulukossa 1 2 3 alkio7 alkio8 alkio9 0 first = 6 1 2 3 alkio8 alkio9 0 PopBack() taulukossa alkio5 alkio6 alkio7 alkio8 alkio9 0 rear = 0 first = 4 alkio5 alkio6 alkio7 alkio8 alkio9 first = (first + 1) mod N = 7 first = 4 rear = (rear + N 1) mod N = 9 D.PopFront() if items = 0 then virhe("d tyhjä") elem D[first] vapauta D[f irst] first (first + 1)mod N items items 1 Return elem D.PopBack() if items = 0 then virhe("d tyhjä") rear (rear + N 1)mod N elem D[rear] vapauta D[rear] items items 1 Return elem Tietorakenteet, syksy 2007 11 Tietorakenteet, syksy 2007 12

Taulukko A Obj. x

Obj. x A3 Obj. x A3 viite seuraav. alkioon A3 Obj. x A4 Linkitetyn listan solmu (node) Javalla class Node { private Object element; private Node next; public Node() { this(, ); } public Node(Object e, Node n) { element = e; next = n; } public void setelem(object newelem) { element = newelem; } public void setnext(node newnext) { next = newnext; } public Object getelem() { return element; } public Node getnext() {return next; } } Tietorakenteet, syksy 2007 14

Tyypillinen yhteen suuntaan linkitetty lista: An : viite ensimmäiseen solmuun : viite viimeiseen solmuun = =, jos lista tyhjä kukin solmu omaa viitteen seuraavaan solmuun viimeisen solmun viite = An Lisäys linkitetyn listan L alkuun L.InsertFront(x) tmp new Node(x, ) if = then tmp tmp Tietorakenteet, syksy 2007 15 Tietorakenteet, syksy 2007 16 An An Lisäys linkitetyn listan L loppuun L.InsertBack(x) tmp new Node(x, ) if = then tmp else.setnext(tmp) tmp Poisto linkitetyn listan L alusta L.RemoveFront() if = then virhe("lista tyhjä") elem.getelem().getnext() if = then return elem Tietorakenteet, syksy 2007 17 Tietorakenteet, syksy 2007 18

An Poisto linkitetyn listan L lopusta L.RemoveBack() tmp.setnext() if = then elem.getelem() virhe("lista tyhjä") tmp if = then return elem return L.RemoveFront() tmp while tmp.getnext() do tmp tmp.getnext() Tietorakenteet, syksy 2007 19 Kaksiloppuisen jonon toteutusvaihtoehtoja Kuvatut linkitetyn listan lisäys/poisto-operaatiot toteuttavat kaksiloppuisen jonon tilavaatimus: O(n), missä n jonon alkioiden lukumäärä (vrt. taulukkototeutus: O(N)) tila skaalautuu suoraan solmujen lukumärään suhteen taulukkototeutuksen operaatioiden suoritusaika Θ(1), mutta......linkitetyn listan metodi RemoveBack() eli PopBack() oli O(n) toiseksi viimeisen solmun haku! Tietorakenteet, syksy 2007 20 Kahteen suuntaan linkitetty lista Myös viimeisen solmun poisto onnistuu ajassa Θ(1), jos käytetään kahteen suuntaan linkitettyä listaa An kukin solmu omaa viitteen sekä seuraavaan että edeltävään solmuun toteutus samankaltainen kuin yhteen suuntaan linkitetyllä listalla Kahteen suuntaan linkitetty lista An DL.InsertFront(x) tmp new Node(x,, ) if = then tmp else.setprev(tmp) tmp Tietorakenteet, syksy 2007 21 Tietorakenteet, syksy 2007 22

Kahteen suuntaan linkitetty lista An Kahteen suuntaan linkitetty lista An DL.RemoveFront() if = then virhe("lista tyhjä") elem.getelem().getnext() if = then else.setprev() return elem Tietorakenteet, syksy 2007 23 Lisäys/poisto kaksoislinkitetyn listan lopussa onnistuu symmetrisesti, Prev Next Tietorakenteet, syksy 2007 24