Tietorakenteet ja algoritmit

Samankaltaiset tiedostot
Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Algoritmit 1. Luento 4 Ke Timo Männikkö

TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

A TIETORAKENTEET JA ALGORITMIT

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

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

Algoritmit 2. Luento 2 To Timo Männikkö

Rakenteiset tietotyypit Moniulotteiset taulukot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Tietueet. Tietueiden määrittely

Dynaamiset tietorakenteet

Tietorakenteet ja algoritmit

Tieto- ja tallennusrakenteet

Algoritmit 1. Luento 3 Ti Timo Männikkö

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

3. Binääripuu, Java-toteutus

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

18. Abstraktit tietotyypit 18.1

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

Osoittimet ja taulukot

Algoritmit ja tietorakenteet / HL 1 Copyright Hannu Laine. Lista. Yleistä

Lyhyt kertaus osoittimista

A TIETORAKENTEET JA ALGORITMIT

Tietorakenteet ja algoritmit

Dynaaminen muisti Rakenteiset tietotyypit

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Osoitin ja viittaus C++:ssa

2. Perustietorakenteet

Osoittimet ja taulukot

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

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

Muita linkattuja rakenteita

Tietorakenteita 163. Yhteen suuntaan linkitetyn listan rakenne on siis seuraavan kuvan kaltainen:

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

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Ohjelmoinnin perusteet Y Python

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

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

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

Olio-ohjelmointi Syntaksikokoelma

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 3 Ti Timo Männikkö

ITKP102 Ohjelmointi 1 (6 op)

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

13 Operaattoreiden ylimäärittelyjä

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

Harjoitustyö: virtuaalikone

Moduli 2: Osoittimet ja taulukot. Joel Huttunen

Ohjelmoinnin perusteet Y Python

Harjoitus 4 (viikko 47)

Ohjelmoinnin peruskurssien laaja oppimäärä

struct info { typedef struct InfoT { char firstname[20]; char firstname[20]; char lastname[20]; char lastname[20]; int age; int age;

Algoritmit 1. Luento 1 Ti Timo Männikkö

Jakso 4 Aliohjelmien toteutus

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

(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ä.

Ohjelmoinnin perusteet Y Python

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Monipuolinen esimerkki

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

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

3. Pinot, jonot ja linkitetyt listat

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

1. Mitä seuraava ohjelma tulostaa? Vastaukseksi riittää yksi rivi joka esittää tulosteen. (6 p)

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Zeon PDF Driver Trial

Transkriptio:

Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko Itsestään kasvava (ja kutistuva) pino Enum tyyppi Jonon määritelmä Jonon sovelluksia Jonon toteutustapoja Yksinkertainen taulukkototeutus Rengaspuskuritoteutus Prioriteettijono 1

Lisää pinon toteutuksia Olemme nähneet kaksi erilaista pinon toteutusta. Niissä molemmissa on käytetty kiinteän kokoista taulukkoa. Pinon toteutukset ovat muuten, hyviä ja tehokkaita, mutta niissä on kiinteän koon ongelma. Jos taulukolle varattu kiinteä tila loppuu kesken, pinoon ei enää voi lisätä alkioita. Esimerkkipinoissamme push-funktio palauttaa NOT_OK. Jos ohjelmoija on varannut mahdollisimman ison taulukon, edellisen ongelman poistuminen ei ole kuitenkaan taattu ja voi olla niin, että pino käyttää tarpeettoman paljon muistia myös silloin, kun alkioita on pinossa vähän. Kiinteän koon ongelma voidaan poistaa käyttämällä dynaamista taulukkoa. Taulukon koko voitaisiin päättää ajonaikana esimerkiksi initialize_stack funktiossa (tällöin pinon interface muuttuisi, jos tästä vaihtoehdosta ei tehtäisi uutta funktiota, esim. initialize_stack_with_size). Dynaamista taulukkoa käytettäessä voidaan toteuttaa jopa automaattisesti kasvava pino. Seuraavassa tutustutaan tähän periaatteeseen. 2

Pinon toteutus dynaamisella taulukolla 1 Vertaa tätä osan 6 sivun 11 ratkaisuun. #define INCR_SIZE 4 typedef... Titem; typedef struct { Titem* array; int size; int top; } Tstack; Käytetään indeksointia taulukon alkioiden osoittamiseen. Stack segment or other Tstack array size 8 top 1 Dynamic memory b a 7 6 3 45 2 1 0 3

Funktioiden toteutusperiaatteet automaattisesti kasvavalla pinolla Automaattisesti kasvava pino saadaan, kun Power Point osan 6 sivun 11 pinoratkaisun eli Monisteen osan 4 Esimerkin 1 ratkaisun kahden funktion eli initialize-stack ja push toimintaa muutetaan seuraavasti. Funktion intialize_stack muutokset Varataan tilaa taulukolle vakion INCR_SIZE (alkioiden määrä) verran. Alustetaan myös Tstack tietueen kenttä size vakiolla INCR_SIZE. Funktion push muutokset Testataan onko taulukossa vielä tilaa lisättävälle alkiolle. Jos kaikki tila on jo varattu tehdään seuraavat toimenpiteet: 1) varataan tila uudelle suuremmalle taulukolle, johon mahtuu size + INCR_SIZE alkiota. 2) Siirretään jo syötetyt alkiot tähän uuteen taulukkoon 3) Poistetaan vanha pienempi taulukko muistista 4) Päivitetään array osoitin ja size kenttä. Lisätään lisättävä tieto uuteen taulukkoon kuten ennen. 4

Pinon toteutus dynaamisella taulukolla 2 #define INCR_SIZE 4 typedef... Titem; typedef struct { Titem* maxpointer; Titem* top; Titem* array; } Tstack; Käytetään osoittimia taulukon alkioiden osoittamiseen. Tstack maxpointer top Stack segment or other array Dynamic memory b a 7 6 3 45 2 1 0 5

Jonon määritelmä (Queue) Määritelmä. Jono on järjestettyjen alkioiden joukko, jossa lisäykset tapahtuvat aina loppuun ja jossa alkio voidaan ottaa vain alusta. Lisäksi jonossa alkioiden järjestyksen määrää syöttöjärjestys. Jonon operaatiot ovat: initialize (alustaa jonon) enqueue (vie alkion jonon loppuun) dequeue (ottaa alkion jonon alusta) is_empty (testaa, onko jono tyhjä) FIFO Vastaavat funktioiden prototyypit voisivat olla void initialize_queue (Tqueue *pqueue); Tboolean enqueue( Tqueue *pqueue, Titem item); Tboolean dequeue( Tqueue *pqueue, Titem *pitem); int is_empty(const Tqueue* pqueue); void print_queue (const Tqueue *pqueue); // apufunktio testaukseen 6

Jonon sovelluksia Jono säilyttää järjestyksen Palindromiprobleeman ratkaisu pinolla ja jonolla Erilaiset simulointitehtävät Service line Waiting line Käyttöjärjestelmissä Print queues Disk access Kaikki yhteiset resurssit moniajojärjestelmissä Näppäimistöpuskuri (ja muut puskurit) Hakemistorakenteen tulostus tasoittain Jne. 7

Palindromiprobleema pinolla ja jonolla #include stack.h #iinclude queue.h int onko_palindromi(const char* mrk_jono) { Tstack pino; Tqueue jono; // initialisoi pino ja jono // vie merkkijonon merkit pinoon ja jonoon for ( i = 0 ; i < strlen(mrk_jono) ; i++) { push(&pino, mrk); enqueu(&jono, mrk); } // Ota merkit tasatahtiin pinosta ja jonosta while(!is_empty(&pino) { pop(pino, &mrk1); dequeu(&jono, mrk2); if(mrk1!= mrk2) return 0; } return 1; } 8

Jonon erilaisia toteutustapoja 1. Yksinkertainen taulukkototeutus Taulukon koko on vakio Tiedon siirtämistä tarvitaan alkion poistoissa Yksinkertainen ja havainnollinen toteutus 2. Yksinkertainen taulukkototeutus dynaamisella taulukolla Taulukkoa voidaan kasvattaa ajonaikana automaattisesti Tiedon siirtämistä tarvitaan alkion poistoissa Tiedon siirtoa tarvitaan myös tilan kasvatuksessa 3. Rengaspuskuri kiinteäkokoisella taulukolla Taulukon koko on vakio Tiedon siirtämistä ei tarvita 4. Rengaspuskuri dynaamisella taulukolla Taulukkoa voidaan kasvattaa ajonaikana automaattisesti Tiedon siirtämistä ei tarvita alkion poistoissa Tiedon siirtoa tarvitaan tilan kasvatuksessa 5. Taulukoiden käyttö pointtereilla ilman indeksointia Tehokkaampi toteutus. Voidaan käyttää tapauksissa 1-4 6. Dynaamisesti linkattu listatoteutus Käsitellään myöhemmin 9

Yksinkertainen taulukkototeutus indeksoinnilla #define N 8 typedef... Titem; typedef struct { Titem array[n]; int n; } Tqueue; Täydellinen toteutus verkossa (Käytetään harjoituksen 7 pohjana) Edut: Yksinkertainen Havainnollinen Haitat: Kiinteä koko Poistossa tarvitaan tiedon siirtoa Tqueue array n a b c 3 10

Rengaspuskuritoteutus #define N 8 typedef... Titem; typedef struct { Titem array[n]; int first; int last; int no_of_items; } Tqueue; Täydellinen toteutus verkossa (Esimerkki 4, Moniste 4) Kuvassa tilanne, kun syötetty ensin a, b, c, d, e, f, g h Sitten poistettu kaksi alkiota ja sitten lisätty i Tqueue array first last no_of_items 0 1 2 3 4 5 6 7 i b c d e f g h 2 0 7 11