Tietorakenteet ja algoritmit

Samankaltaiset tiedostot
Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit

TIETORAKENTEET JA ALGORITMIT

Capacity Utilization

Tietorakenteet ja algoritmit

Muita linkattuja rakenteita

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

Tietorakenteet ja algoritmit

C++11 seminaari, kevät Johannes Koskinen

3. Binääripuu, Java-toteutus

Efficiency change over time

The CCR Model and Production Correspondence

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

Choose Finland-Helsinki Valitse Finland-Helsinki

A TIETORAKENTEET JA ALGORITMIT

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

812336A C++ -kielen perusteet,

Tietorakenteet ja algoritmit

National Building Code of Finland, Part D1, Building Water Supply and Sewerage Systems, Regulations and guidelines 2007

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Other approaches to restrict multipliers

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

Tietorakenteet ja algoritmit

LYTH-CONS CONSISTENCY TRANSMITTER

Travel Getting Around

16. Allocation Models

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

The Viking Battle - Part Version: Finnish

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

MUSEOT KULTTUURIPALVELUINA

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Dynaamiset tietorakenteet

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Alternative DEA Models

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

Rakenteiset tietotyypit Moniulotteiset taulukot

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

KONEISTUSKOKOONPANON TEKEMINEN NX10-YMPÄRISTÖSSÄ

Ohjelmoinnin peruskurssien laaja oppimäärä

Tietorakenteet ja algoritmit

1. SIT. The handler and dog stop with the dog sitting at heel. When the dog is sitting, the handler cues the dog to heel forward.

Bounds on non-surjective cellular automata

Network to Get Work. Tehtäviä opiskelijoille Assignments for students.

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

Results on the new polydrug use questions in the Finnish TDI data

anna minun kertoa let me tell you

Lyhyt kertaus osoittimista

Dynaaminen muisti Rakenteiset tietotyypit

18. Abstraktit tietotyypit 18.1

Algoritmit 2. Luento 2 Ke Timo Männikkö

FIS IMATRAN KYLPYLÄHIIHDOT Team captains meeting

Tietueet. Tietueiden määrittely

Algoritmit 2. Luento 2 To Timo Männikkö

Tarua vai totta: sähkön vähittäismarkkina ei toimi? Satu Viljainen Professori, sähkömarkkinat

Exercise 1. (session: )

Curriculum. Gym card

Information on preparing Presentation

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

RINNAKKAINEN OHJELMOINTI A,

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

Tieto- ja tallennusrakenteet

toukokuu 2011: Lukion kokeiden kehittämistyöryhmien suunnittelukokous

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Green Growth Sessio - Millaisilla kansainvälistymismalleilla kasvumarkkinoille?

Osoittimet ja taulukot

Ohjelmoinnin peruskurssien laaja oppimäärä

1. Liikkuvat määreet

ITKP102 Ohjelmointi 1 (6 op)

4x4cup Rastikuvien tulkinta

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

Algoritmit 1. Luento 4 Ke Timo Männikkö

7.4 Variability management

Algoritmit 1. Demot Timo Männikkö

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

A TIETORAKENTEET JA ALGORITMIT

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

KMTK lentoestetyöpaja - Osa 2

Voice Over LTE (VoLTE) By Miikka Poikselkä;Harri Holma;Jukka Hongisto

Miksi Suomi on Suomi (Finnish Edition)

Use of spatial data in the new production environment and in a data warehouse

Operatioanalyysi 2011, Harjoitus 4, viikko 40

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

While we compile backlinks report, You can visit following handy links. Music download

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Algoritmit 2. Luento 7 Ti Timo Männikkö

S SÄHKÖTEKNIIKKA JA ELEKTRONIIKKA

TIEKE Verkottaja Service Tools for electronic data interchange utilizers. Heikki Laaksamo

Information on Finnish Language Courses Spring Semester 2018 Päivi Paukku & Jenni Laine Centre for Language and Communication Studies

S SÄHKÖTEKNIIKKA JA ELEKTRONIIKKA

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

SIMULINK S-funktiot. SIMULINK S-funktiot

Särmäystyökalut kuvasto Press brake tools catalogue

make and make and make ThinkMath 2017

A TIETORAKENTEET JA ALGORITMIT

Ohjelmoinnin peruskurssien laaja oppimäärä

Nuku hyvin, pieni susi -????????????,?????????????????. Kaksikielinen satukirja (suomi - venäjä) ( (Finnish Edition)

Transkriptio:

Tietorakenteet ja algoritmit Taulukon edut Taulukon haitat Taulukon haittojen välttäminen Dynaamisesti linkattu lista Linkatun listan solmun määrittelytavat Lineaarisen listan toteutus dynaamisesti linkattuna rakenteena Tietomäärittelyt tavalla 1 Esimerkkisovellus Funktioiden toteutuksia Tietomäärittelyt tavalla 2 Funktioiden toteutuksia 1

Taulukon etuja Arrays are sometimes called contiguous list as opposite to dynamically linked list. Advantages of arrays: A) Retrieving element by order number is effective (random access is possible) B) Searching by key (according which data is ordered) is effective because binary search can be used. 2

Taulukon haittapuolia Disadvantages of arrays: A) Static arrays Fixed size problem (nothing can be done during run time). B) Dynamic arrays Array can be expanded during run time. Price is that we must move data. C) Common disadvantages when the order of items must be maintained: Insert operation and delete operation need data moves. Dynamically linked list is an option for array as a data storage structure. To avoid the disadvantages of arrays we can use dynamically linked list. Then we also lose the advantages. 3

Introduction to linked list 1 The requirements for linked list: No upper limit for a number of elements. No extra space allocated at any moment. Data movements never needed. Solution is: Dynamically linked dynamically allocated list. The basic idea: The space is allocated for items one at a time from dynamic memory when needed. We allocate space for the pointer of next node every time when we allocate space for an item (node). Disadvantages of linked list Links need memory space. Random access is not possible. Binary search can not be applied. 4

Introduction to linked list 2 There is no best solution You have to choose the solution according the requirements of the application. For example in the application, where main operations are inserting, deleting and going through all elements in some order and where we never know the maximum number of elements in advance the dynamically linked list is the "best". If on the other hand, the main operation is searching data using a search key and insertions and deletions are rare operations, then array is the best solution. 5

Introduction to linked list 3 Tallennetun tiedon rakenne näyttää silloin muistissa esimerkiksi seuraavalta: a c b Pohditaan miksei muita vaihtoehtoja ole yo. tavoitteiden saavuttamiseksi. Ratkaisulla on myös hinta eli haittapuolet. 6

Different ways to define the node of linked list Option 1. typedef struct node *Tpointer; typedef struct node { Titem item; Tpointer next; Tnode; Option 2. typedef struct node { Titem item; struct node *next; Tnode; typedef struct node *Tpointer; //or typedef Tnode *Tpointer; Option 3. (C++) struct Tnode { ; Titem item; Tnode *next; typedef Tnode *Tpointer; Huom. Määrittelyissä on itseensä viittaus eli self reference. 7

Lineaarisen listan (ADT) toteutus Olemme toteuttaneet erilaisia säiliöitä (järjestetty lista, pino, jono) taulukolla. Nämä kaikki voidaan toteuttaa myös dynaamisesti linkatulla listalla. Otetaan esimerkiksi lista. Pidämme listan interfacen samana, jotta uutta listatoteutusta voidaan käyttää taulukkolistan asemesta muuttamatta itse sovellusta! Valitaan taulukolla aikaisemmin toteutetusta listasta malliksi funktiot: Tlist; void initialize_list(tlist* list); int number_of_items(const Tlist* list); int retrieve_ith(const Tlist* list, int i, Titem* data); void insert_to_list_end(tlist* list, Titem data); ja pari uutta funktiota void cleanup_list(tlist* list); void print_list (const Tlist* list); Tietotyypin nimi on sama kuin ennen, mutta sen määrittely on erilainen. 8

Lineaarisen listan tietomäärittelyt (Tapa 1) typedef char Titem; // listan alkiotyyppi voidaan vaihtaa // ja muutos ei saa näkyä muualla typedef struct node *Tpointer; Tämä on tapa 1, jossa pidetään kirjaa typedef struct node { ensimmäisen ja viimeisen solmun paikoista. Titem item; Pitämällä kirjaa myös viimeisen solmun Tpointer next; paikasta, saadaan loppuun lisäys tehokkaaksi. Tnode; Ratkaisu ei vastaa sivulla 6 olevaa kuvaa. typedef struct { Toisaalta sisällön mukaan järjestyksessä Tpointer first; olevassa listassa (Ordered list) ei sellaista operaatiota kuin loppuun lisäys ole edes Tpointer last; olemassa. Toisaalta taas tässä oleva ratkaisu Tlist; on sopiva esimerkiksi jonon toteutuksessa. void initialize_list(tlist* list); int number_of_items(const Tlist* list); int retrieve_ith(const Tlist* list, int i, Titem* data); jne. 9

Sovellusesimerkki void main (void) { Tlist list; initialize_list(&list); insert_to_list_end(&list, 'a'); insert_to_list_end(&list, 'b'); insert_to_list_end(&list, 'c'); printf("number of items in list is %d\n", number_of_items(&list)); print_list(list); cleanup_list(&list); 10

Funktioiden toteutusesimerkkejä 1 void initialize_list (Tlist* list) { list->first = NULL; list->last = NULL; void insert_to_list_end(tlist* list, Titem data) { Tpointer newnode; newnode = (Tpointer) malloc(sizeof(tnode)); newnode -> item = data; newnode->next = NULL; if (list->first == NULL) list->first = newnode; //ensimmäinen solmu else list->last->next = newnode; //muut solmut list->last = newnode; 11

Funktioiden toteutusesimerkkejä 2 void print_list (const Tlist* list) { Tpointer p = list->first; while (p!= NULL) { printf("%c ", p->item); //Tässä on yleisyysongelma. p = p->next; void cleanup_list(tlist* list) { Tpointer aux1 = list->first, aux2; while (aux1!= NULL) { aux2 = aux1->next; free(aux1); aux1 = aux2; initialize_list(list); 12

Lineaarisen listan tietomäärittelyt (Tapa 2) typedef char Titem; typedef struct node *Tpointer; typedef struct node { Tnode; Titem item; Tpointer next; typedef Tpointer Tlist; void initialize_list(tlist* list); int number_of_items(const Tlist* list); // listan alkiotyyppi voidaan vaihtaa // ja muutos ei saa näkyä muualla int retrieve_ith(const Tlist* list, int i, Titem* data); jne. Labraharjoituksena tehdään funktiot void initialize_list(tlist* list), void insert_to_list_end(tlist* list, Titem data) ja mahdollisesti muita funktioita tällä tietomäärittelyllä. Tämä on tapa 2, jossa pidetään kirjaa vain ensimmäisen solmun paikasta. Ratkaisu vastaa nyt sivulla 6 olevaa kuvaa. Tällainen on sopivampi esimerkiksi järjestyksessä olevassa listassa (Ordered list). 13