Пример #1
0
class AnimalQueue(object):
    def __init__(self):
        self.dogs = Queue()
        self.cats = Queue()
        self.order = 0

    def enqueue(self, animal):
        animal.order = self.order
        self.order += 1
        if isinstance(animal, Dog):
            self.dogs.enqueue(animal)
        if isinstance(animal, Cat):
            self.cats.enqueue(animal)

    def dequeue_any(self):
        if self.dogs.queue_empty():
            return self.dequeue_cat()
        elif self.cats.queue_empty():
            return self.dequeue_dog()
        elif self.dogs.peek().order < self.cats.peek().order:
            return self.dequeue_dog()
        else:
            return self.dequeue_cat()

    def dequeue_dog(self):
        return self.dogs.dequeue()

    def dequeue_cat(self):
        return self.cats.dequeue()
Пример #2
0
def queue_operations():
    '''USER OPERATIONS OF A QUEUE IMPLEMENTATION'''
    queue = Queue()
    while choice > 0:
        queue_menu = [('MAIN MENU', -1), ('EXIT', 0), \
                    ('ENQUEUE', 1), ('DEQUEUE', 2), ('FRONT', 3), ('REAR', 4), ('SIZE', 5)]
        print_menu(queue_menu)
        choice = int(input().strip())
        if choice == 1:
            print('ENTER ITEM :', end=' ')
            queue.enqueue(int(input().strip()))
            print('ENQUEUE OPERATION SUCCESSFUL.')
        elif choice == 2:
            if queue.is_empty():
                print('UNDERFLOW')
            else:
                print('DEQUEUED VALUE :', queue.dequeue())
        elif choice == 3:
            if queue.is_empty():
                print('UNDERFLOW')
            else:
                print('FRONT :', queue.front())
        elif choice == 4:
            if queue.is_empty():
                print('UNDERFLOW')
            else:
                print('REAR :', queue.rear())
        elif choice == 5:
            print('QUEUE SIZE :', queue.size())
Пример #3
0
def test_clear():
    myQ = Queue()
    myQ.enqueue(3)
    myQ.enqueue(4)
    myQ.clear()
    assert myQ.size() == 0
    assert myQ.isEmpty()
    assert myQ.toList() == []
Пример #4
0
def hotPotato(names, num):
    simQueue = Queue()
    for name in names:
        simQueue.enqueue(name)

    while simQueue.size() > 1:
        for i in range(num):
            simQueue.enqueue(simQueue.dequeue())

        simQueue.dequeue()
    return simQueue.dequeue()
def hotpotato(names, num):
    circular_queue = Queue()

    for name in names:
        circular_queue.enqueue(name)

    while circular_queue.size() > 1:
        for k in range(num - 1):
            circular_queue.enqueue(circular_queue.dequeue())
        circular_queue.dequeue()
    print circular_queue.dequeue()
def bfs_paths(graph, source, destination):
    '''ALL POSSIBLE PATHS FROM SOURCE TO DESTINATION USING BREADTH-FIRST SEARCH'''
    queue = Queue()
    queue.enqueue((source, [source]))
    while not queue.is_empty():
        (vertex, path) = queue.dequeue()
        for next_node in graph[vertex].keys():
            if next_node == destination:
                yield path + [next_node]
            else:
                queue.enqueue((next_node, path + next_node))
Пример #7
0
def play(players, rounds):
    '''
    Play hot potato game
  '''
    que = Queue()
    for player in players:
        que.enqueue(player)

    while que.size() > 1:
        for _ in range(rounds):
            que.enqueue(que.dequeue())

        que.dequeue()

    print("Last player in the filed : {} ".format(que.dequeue()))
def bfs(graph, source):
    '''BREADTH-FIRST SEARCH'''
    queue = Queue()
    visited, distance = set(), {}

    distance[source] = 0
    queue.enqueue(source)
    visited.add(source)

    while not queue.is_empty():
        u = queue.dequeue()
        for v in graph[u].keys():
            if v not in visited:
                visited.add(v)
                distance[v] = distance[u] + 1
                queue.enqueue(v)
    return distance
Пример #9
0
def exists_route_bfs(directed_graph, u, v):
    """Returns True if there exist a route between nodes u and v
    in directed_graph. Uses BFS.
    """
    if u is v:
        return True
    for w in directed_graph:
        w.discovered = False
    q = Queue()
    q.enqueue(u)
    u.discovered = True
    while not q.queue_empty():
        u = q.dequeue()
        for neighbour in u.neighbours:
            if not neighbour.discovered:
                if neighbour is v:
                    return True
                q.enqueue(neighbour)
                neighbour.discovered = True
    return False
Пример #10
0
def simulation(timeInsec, ppm):

    printer = Printer(ppm)
    printQueue = Queue()
    waitingTImes = []

    for second in range(timeInsec):
        if newPrintTask():
            task = Task(second)
            printQueue.enqueue(task)

        if (not printer.busy()) and (not printQueue.isEmpty()):
            nexttask = printQueue.dequeue()
            waitingTImes.append(nexttask.waitTime(second))
            printer.startNext(nexttask)

        printer.tick()
    averageWait = sum(waitingTImes) / len(waitingTImes)
    print("Average Wait %6.2f secs %3d tasks remaining." %
          (averageWait, printQueue.size()))
Пример #11
0
 def levelorder(self):
     myq = Queue()
     myq.enqueue(self)
     while not myq.isEmpty():
         cur = myq.dequeue()
         yield cur.data
         myq.enqueue(cur.left) if cur.left else ()
         myq.enqueue(cur.right) if cur.right else ()
Пример #12
0
def subtree(r1, r2):
    q = Queue()
    q.enqueue(r1)
    while not q.queue_empty():
        x = q.dequeue()
        if x.key == r2.key and same_tree(x, r2):
            return True
        if x.left is not None:
            q.enqueue(x.left)
        if x.right is not None:
            q.enqueue(x.right)
    return False
Пример #13
0
class TestQueueMethods(unittest.TestCase):

    def setUp(self):
        # Setup
        self.q = Queue(1)
        self.q.enqueue(2)
        self.q.enqueue(3)
        return 

    def tearDown(self):
        #Clear For Next Test
        self.q = None

    def test_peek(self):
        self.assertEqual(self.q.peek(), 1)
        pass

    def test_enqueue(self):
        self.q.enqueue(4)
        self.assertEqual(self.q.peek(),1)
        pass

    def test_deque(self):
        self.assertEqual(self.q.dequeue(),1)
        self.assertEqual(self.q.dequeue(),2)
        self.assertEqual(self.q.dequeue(),3)
        pass

    def test_total(self):
        self.assertEqual(self.q.dequeue(),1)
        self.q.enqueue(4)
        self.assertEqual(self.q.dequeue(),2)
        self.assertEqual(self.q.dequeue(),3)
        self.assertEqual(self.q.dequeue(),4)
        self.q.enqueue(5)
        self.assertEqual(self.q.peek(),5)
        pass
Пример #14
0
def same_tree2(root1, root2):
    q = Queue()
    q.enqueue(root1)
    q.enqueue(root2)
    while not q.queue_empty():
        x, y = q.dequeue(), q.dequeue()
        if x.key != y.key:
            return False
        if x.left is not None and y.left is not None:
            q.enqueue(x.left)
            q.enqueue(y.left)
        elif x.left is not y.left:
            return False
        if x.right is not None and y.right is not None:
            q.enqueue(x.right)
            q.enqueue(y.right)
        elif x.right is not y.right:
            return False
    return True
Пример #15
0
 def test_enqueue_for_empty_queue(self):
     empty_queue = Queue()
     person1 = "person1"
     empty_queue.enqueue(person1)
     self.assertEqual("person1", empty_queue.head.value,
                      empty_queue.tail.value)
Пример #16
0
def test_enqueue_dequeue():
    myQ = Queue()
    myQ.enqueue(2)
    assert myQ.dequeue() == 2
Пример #17
0
def test_toList():
    myQ = Queue()
    myQ.enqueue(3)
    myQ.enqueue(4)
    assert myQ.toList() == [4, 3]
Пример #18
0
def test_size():
    myQ = Queue()
    myQ.enqueue(2)
    assert myQ.size() == 1