Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avLina Johansson
1
Köer -- Kapitel 16
2
Principen med en kö Köer är FIFO datastrukturer First In – First Out enqueue() Lägg till data i kön (först) dequeue() Hämta data från kön (sist)
3
Principen med en kö enqueue( ’A’ ) enqueue( ’B’ ) enqueue( ’C’ ) enqueue( ’D’ ) dequeue( ) enqueue( ’E’ ) Kö ABCDE
4
Användningsområden Printer köer Asynkrona gränssnitt Kommunikation mellan olika processer på samma operativ system Data buffring
5
Implementeringar Statisk implementation Arraybaserad Dynamiska implementation Länkade listor
6
Med en array... ”Wraparound” Slipper flytta data Kräver start och slut index Snabbt Statisk maxstorlek Dubblering möjlig men kostsam
7
Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }
8
Tillstånd / Konstruktorn private Object [] array; private int back, front; private int size; public Queue() { array = new Object[50]; back = -1; front = 0; size =0; }
9
Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if(size < array.length) { back = (back + 1) array[back] = data; size++; } }
10
public void enqueue(Object data) { if(size == array.length) doubleQueue(); back = increment(back); array[back] = data; size++; } med Wraparound
11
Metoden -- ’int increment(int x)’ private int increment(int x) { if(++x == array.length) x=0; return x; } med Wraparound
12
Metoden -- ’Object dequeue()’ public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = front + 1; size--; } return value; }
13
public Object dequeue() { Object value = null; if(size > 0) { value = array[front]; front = increment(front); size--; } return value; } Med wraparound
14
Med en länkad lista... Arbetar bara mot ändarna på listan Lägger in först i listan Tar ut sist ur listan Långsam Minnesallokering Behöver ingen ”wrapping” Enklare implementation
15
Exempel public class Queue { private... public Queue() { } public void enqueue(Object data) { } public Object dequeue() { } }
16
Tillstånd / Konstruktorn private LinkedList list; public Queue() { list = new LinkedList(); }
17
Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { list.addFirst(data); }
18
Metoden -- ’Object dequeue()’ public Object dequeue() { return list.getLast(); }
19
Bättre lösning,som länkad lista private ListNode front; private ListNode back; public Queue() { front=back=null; }
20
Metoden -- ’void enqueue(Object data)’ public void enqueue(Object data) { if (isEmpty()) back=front=new ListNode(data); else back=back.next=new ListNode(data); }
21
Metoden -- ’Object dequeue()’ public Object dequeue() { if(isEmpty()) throw new UnderflowException(”Tom kö”); Object value=front.element; front=front.next; return value; }
22
Implementationsjämförelse Statisk implementation (Kan ha) mycket outnyttjat minne Snabb Dynamisk implementation Minimalt outnyttjat minne Långsam Konstant tid
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.