1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.

Slides:



Advertisements
Liknende presentasjoner
Kap 04 Lister. Listestrukturer Listestrukturer hensiktsmessige ved såkalte flyktige tabeller (tabeller med relativt mye innsetting/sletting)
Advertisements

Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
Matematisk Induksjon.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no
INF 295 Forelesning 15 - kap 9 Grafer Hans Fr. Nordhaug (Ola Bø)
Sortering og søk. Sortering av data som ligger på en fil Prisipielt to hovedmåter gjøre dette på: 1.Arbeide mot filen 1.Lese en linje, og lese de resterende.
INF150 Programmering mandag 11.9
Kap 01 Innledning I dette kapitlet skal vi se litt følgende hovedtemaer: - Kursoppbygging - Hva er algoritmer og datastrukturer - Anvendelser - …
Kap 07 Stakk I dette kapitlet skal vi se på datastrukturen stakk.
Kap 02 Tabeller / Tabelloperasjoner. Enkeltvariable Les inn nedbørmengde for årets 12 måneder: Les n1 Les n2 … Les n12 n1 n2 n12.
Kap 10 Graf.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Prioritetskø (Heap) Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 13 - kap 6 Andre prioritetskøer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 10 Invarianter og Hashing Hans Fr. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
INF 295 forelesning 12 Repetisjon per 17. februar Hans F. Nordhaug (Ola Bø)
Sorterings- Algoritmer Algoritmer og Datastrukturer.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Prioritetskøer Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Iterator i Java boolean hasNext() E next() void remove()
Geometri 1.
Forelesning 9 Are Raklev.
Måling.
Forelesning 4 Are Raklev.
Den epigenetiske klokken
Arbeidsgiver skal utføre risikovurdering.
Måling.
AST En kosmisk reise Forelesning 2:
Forelesning 5: Dopplereffekten Relativitetsteori Partikkelfysikk
Are Raklev Teoretisk fysikk, rom FØ456,
Program Frokost serveres Velkommen og introduksjon til dagens tema Heidi Pedersen, Stipendiat, NTNU Svein Bergem, Stipendiat, Nasjonal kompetansetjeneste.
Forsering av fag og fraværsgrense i videregående skole
Retorikk.
De indre planetene og månen – del 2:
Matematikk i skole og lærerutdanning
Hvilke spørsmål har dere etter å sett denne rullen?
SAB Arbeidsgruppe 4 – organisasjons- og beslutningsstruktur
Ungdomstrinn i utvikling på Volda ungdomsskule
Bransjeforum for handel, service, kultur og reiseliv
Informasjonsmøte
MULTIFUNKSJONSHALL DRAMMEN
Norsk dødelighet og RISK-arbeidet
Are Raklev Teoretisk fysikk, rom FØ456,
Lecture 10.
Are Raklev Teoretisk fysikk, rom FØ456,
ELEVER, FORELDRE OG DE SOM JOBBER PÅ EKROM OG KRINGSJÅ
Val av framandspråk på Xxxx vidaregåande skole Programfag (Vg2 og Vg3)
Algebra 3 Grunnskolelærerutdanningen 1–7, nett Matematikk 1, modul 2
Algebra 2 Grunnskolelærerutdanningen 1–7, nett Matematikk 1, modul 2
Eric Jul PSE Inst. for informatikk
Begynnerkurs i Python Realfagskonferansen 2019 Henrik H. Løvold
Utskrift av presentasjonen:

1 Kap 08 Kø

2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes kun i den andre enden av listen, kalt foran. Kø: FIFO (First In First Out). To basis-operasjoner knyttet til kø: qAddInnsetting av element i en kø qRemoveFjerning av element fra en kø

3 Ikke-sirkulær kø - Eks Legg merke til at vi initielt har satt Foran = 1, til tross for at vi ikke har noen elementer i køen. Dette vil forenkle algoritmene noe.

4 Sirkulær kø - Eks Legg merke til den noe merkelige avslutningen med Foran = 5 og Bak = 4 til tross for at vi ikke har noen elementer i køen. g h

5 qAdd - Array-implementering Ikke-sirkulær kø qAdd (queue,post,bak,max,full) /*Rutinen plasserer en post (et element) i en kø */ /*queue:Køen som posten skal plasseres i*/ /*post:Posten som skal plasseres i køen*/ /*bak:Enden av køen*/ /*max:Maksimalt antall elementer i køen*/ /*full:Returnerer med vedien true*/ /*hvis køen er full*/ /*slik at post ikke kan plasseres*/ IF bak = max THEN full:= true ELSE full := false bak:= bak + 1 queue[bak]:= post ENDIF foran xxx bak

6 qRemove -Array-implementering Ikke-sirkulær kø qRemove (queue,post,foran,bak,tom) /*Rutinen plasserer en post (et element) i en kø */ /*queue:Køen som posten skal hentes/slettes fra*/ /*post:Posten som skal hentes/slettes i køen*/ /*foran:Fronten av køen*/ /*bak:Enden av køen*/ /*tom:Returnerer med vedien true*/ /*hvis køen er tom*/ /*slik at post ikke kan hentes/slettes*/ IF bak < foran THEN tom:= true ELSE tom := false post := queue[foran] foran := foran + 1 ENDIF foran xxx bak

7 Sirkulær kø - Modulus-funksjonen mod(a,b) = rest ved divisjon av heltall a med heltall b mod(5,2) = 1 mod(3,5) = 3 mod(a,b) skrives i Java og C++ som : a % b

8 Sirkulær kø - Test på tom kø Tom kø: mod(bak,max) + 1 = foran Dessverre viser det seg at den samme relasjonen også gjelder når køen er full. x x

9 Sirkulær kø - Tom kø / Full kø Foregående problem kan løses ved alltid å la minst en plass være ledig. Ett element i køen:foran = bak Tom kø:mod(bak,max) + 1 = foran Full kø:mod(mod(bak,max) + 1,max) + 1 = foran

10 qAdd - Array-implementering Sirkulær kø qAdd (queue,post,foran, bak,max,full) /*Rutinen plasserer en post (et element) i en sirkulær kø */ /*queue:Køen som posten skal plasseres i*/ /*post:Posten som skal plasseres i køen*/ /*foran:Fronten av køen*/ /*bak:Enden av køen*/ /*max:Maksimalt antall elementer i køen*/ /*full:Returnerer med vedien true*/ /*hvis køen er full*/ /*slik at post ikke kan plasseres*/ IF mod(mod(bak,max)+1,max)+1 = foran THEN full:= true ELSE full := false bak:= mod(bak,max) + 1 queue[bak]:=post ENDIF foran xxx bak

11 qRemove - Array-implementering Sirkulær kø qRemove (queue,post,foran,bak,tom) /*Rutinen plasserer en post (et element) i en sirkulær kø */ /*queue:Køen som posten skal hentes/slettes fra*/ /*post:Posten som skal hentes/slettes i køen*/ /*foran:Fronten av køen*/ /*bak:Enden av køen*/ /*tom:Returnerer med vedien true*/ /*hvis køen er tom*/ /*slik at post ikke kan hentes/slettes*/ IF mod(bak,max)+1 = foran THEN tom:= true ELSE tom := false post := queue[foran] foran := mod(foran,max) + 1 ENDIF foran xxx bak

12 qAdd - Lenket liste implementering qAdd (post,bak) /*Rutinen plasserer en post (et element) i en kø */ /*post:Posten som skal plasseres i køen*/ /*bak:Peker til enden av køen*/ p := new qNode p.data := post p.lenke := null bak.lenke := p bak := p foran DataLenke bak x

13 qRemove - Lenket liste implementering qRemove (post,foran,bak,tom) /*Rutinen plasserer en post (et element) i en kø impl som lenket liste*/ IF foran = bak THEN tom := true ELSE tom := false p := foran.lenke post := p.data foran.lenke := p.lenke IF bak = p THEN bak := foran ENDIF delete(p) ENDIF foran DataLenke x bak

14 Anvendelser - Tidsdeling Tidsdelingsssytem med bruk av felles ressurser. Prosess A er i øyeblikket under kjøring. A gjør forespørsel om bruk av printer. Tidsperiode for A løper ut under printing. A plasseres i en ready-queue (alle kjøreressurser er tilgjengelige for A) B overtar kjøringen. B gjør forespørsel om bruk av printer. B går inn i en blocked-queue inntil A er printet ferdig. readyQueue A blockedQueue B

15 Anvendelser - Prioritetskø Prioritetskø Hensiktsmessig med lenket liste implementering siden innsetting i en slik prioritetskø ikke nødvendigvis kan gjøres i enden av listen.

16 Klassehierarki - Kø QueueAsArray I_Queue QueueAsLinkedList Test I_ContainerA_Container I_ComparableA_Object

17 ENDEND