queues deque

31
Queues Deque Basic Data Structures Queues and Deques Brad Miller David Ranum 1/25/06 Basic Data Structures

Upload: cuteblackeyes

Post on 18-Nov-2014

335 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Queues Deque

QueuesDeque

Basic Data StructuresQueues and Deques

Brad Miller David Ranum

1/25/06

Basic Data Structures

Page 2: Queues Deque

QueuesDeque

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 3: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 4: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

A Queue of Python Data Objects

8.4 True "dog" 4 frontrear

items

Basic Data Structures

Page 5: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 6: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Queue() creates a new queue that is empty. It needs noparameters and returns an empty queue.enqueue(item) adds a new item to the rear of thequeue. It needs the item and returns nothing.dequeue() removes the front item from the queue. Itneeds no parameters and returns the item. The queue ismodified.isEmpty() tests to see whether the queue is empty. Itneeds no parameters and returns a boolean value.size() returns the number of items in the queue. It needsno parameters and returns an integer.

Basic Data Structures

Page 7: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 8: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Queue Implementation in Python

1 c l a s s Queue:2 def __init__(self):3 self.items = []4

5 def isEmpty(self):6 re turn self.items == []7

8 def enqueue(self, item):9 self.items.insert(0,item)

10

11 def dequeue(self):12 re turn self.items.pop()13

14 def size(self):15 re turn len(self.items)

Basic Data Structures

Page 9: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 10: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

A Six Person Game of Hot Potato

Bill

David

Susan

Jane

Kent

pass to next person

and so on

Brad

until predefined counting constant

After 5 passes,Brad is eliminated

Basic Data Structures

Page 11: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

A Queue Implementation of Hot Potato

Brad Susan David Bill frontrear

Go to the rear(Pass the potato)

JaneKent

Bill Susan David frontrear JaneKentBrad

dequeueenqueue

Basic Data Structures

Page 12: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Hot Potato Simulation

1 def hotPotato(namelist, N):2

3 simqueue = Queue()4 f o r name in namelist:5 simqueue.enqueue(name)6

7 whi le simqueue.size() > 1:8 f o r i in range(N):9 simqueue.enqueue(simqueue.dequeue())

10

11 simqueue.dequeue()12

13 re turn simqueue.dequeue()

Basic Data Structures

Page 13: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 14: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Computer Science Laboratory Printing Queue

task task task task task

printing tasks in print queue

Lab Computers

Basic Data Structures

Page 15: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Printer Class I

1 c l a s s Printer:2 def __init__(self, pages):3 self.pagerate = pages4 self.currentTask = None5 self.timeRemaining = 06

7 def tick(self):8 i f self.currentTask != None:9 self.timeRemaining = self.timeRemaining - 1

10 i f self.timeRemaining == 0:11 self.currentTask = None12

13

14

15

Basic Data Structures

Page 16: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Printer Class II

16 def busy(self):17 i f self.currentTask != None:18 re turn True19 e l s e:20 re turn False21

22 def startNext(self,newtask):23 self.currentTask = newtask24 self.timeRemaining = newtask.getPages() \25 * 60/self.pagerate

Basic Data Structures

Page 17: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Task Class

1 import random2 c l a s s Task:3 def __init__(self,time):4 self.timestamp = time5 self.pages = random.randrange(1,21)6

7 def getStamp(self):8 re turn self.timestamp9

10 def getPages(self):11 re turn self.pages12

13 def waitTime(self, currenttime):14 re turn currenttime - self.timestamp

Basic Data Structures

Page 18: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Main Simulation I

1 from queue import *2 from printer import *3 from task import *4

5 import random6

7 def simulation(numSeconds, pagesPerMinute):8

9 labprinter = Printer(pagesPerMinute)10 printQueue = Queue()11 waitingtimes = []12

13 f o r currentSecond in range(numSeconds):14

15

Basic Data Structures

Page 19: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Main Simulation II

16 i f newPrintTask():17 task = Task(currentSecond)18 printQueue.enqueue(task)19

20 i f (not labprinter.busy()) and \21 (not printQueue.isEmpty()):22 nexttask = printQueue.dequeue()23 waitingtimes.append( \24 nexttask.waitTime(currentSecond))25 labprinter.startNext(nexttask)26

27 labprinter.tick()28

29 averageWait=sum(waitingtimes)/float(len(waitingtimes))30 p r i n t "Average Wait Time%6.2f seconds"%(averageWait),31 p r i n t "Tasks Remaining %3d"%(printQueue.size())

Basic Data Structures

Page 20: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

Printer Queue Simulation–The Main Simulation III

32

33

34 def newPrintTask():35 num = random.randrange(1,181)36 i f num == 180:37 re turn True38 e l s e:39 re turn False

Basic Data Structures

Page 21: Queues Deque

QueuesDeque

What Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

What if enrollment goes up and the average number ofstudents increases by 20?What if it is Saturday and students are not needing to getto class? Can they afford to wait?What if the size of the average print task decreases sincePython is such a powerful language and programs tend tobe much shorter?

Basic Data Structures

Page 22: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 23: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

A Deque of Python Data Objects

“dog" 4 “cat" True

frontrear

items

add to rear add to front

remove from rear remove from front

Basic Data Structures

Page 24: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 25: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Deque() creates a new deque that is empty. It needs noparameters and returns an empty deque.addFront(item) adds a new item to the front of thedeque. It needs the item and returns nothing.addRear(item) adds a new item to the rear of thedeque. It needs the item and returns nothing.removeFront() removes the front item from the deque.It needs no parameters and returns the item. The deque ismodified.removeRear() removes the rear item from the deque. Itneeds no parameters and returns the item. The deque ismodified.isEmpty() tests to see whether the deque is empty. Itneeds no parameters and returns a boolean value.size() returns the number of items in the deque. It needsno parameters and returns an integer.

Basic Data Structures

Page 26: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 27: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Deque Implementation in Python I

1 c l a s s Deque:2 def __init__(self):3 self.items = []4

5 def isEmpty(self):6 re turn self.items == []7

8 def addFront(self, item):9 self.items.append(item)

10

11 def addRear(self, item):12 self.items.insert(0,item)13

14 def removeFront(self):15 re turn self.items.pop()

Basic Data Structures

Page 28: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Deque Implementation in Python II

16

17 def removeRear(self):18 re turn self.items.pop(0)19

20 def size(self):21 re turn len(self.items)

Basic Data Structures

Page 29: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Outline

1 QueuesWhat Is a Queue?The Queue Abstract Data TypeImplementing a Queue in PythonSimulation: Hot PotatoSimulation: Printing Tasks

2 DequeWhat Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Basic Data Structures

Page 30: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

A Deque

r a d a r

frontrear

items

add to rear

rr

r a d a r

frontrear

itemsremove from rear remove from front

Add "radar" to the rear

Remove from front and rear

Basic Data Structures

Page 31: Queues Deque

QueuesDeque

What Is a Deque?The Deque Abstract Data TypeImplementing a Deque in PythonPalindrome-Checker

Palindrome Checker

1 def palchecker(aString):2 chardeque = Deque()3

4 f o r ch in aString:5 chardeque.addRear(ch)6

7 stillEqual = True8

9 whi le chardeque.size() > 1 and stillEqual:10 first = chardeque.removeFront()11 last = chardeque.removeRear()12 i f first != last:13 stillEqual = False14

15 re turn stillEqual

Basic Data Structures