Example #1
0
class MyQueue(object):
    def __init__(self):
        self.value = Queue()

    def peek(self):  #Enqueue element into the end of the queue.
        self.value.append(object)

    def pop(self):  #dequeue the element at the front of the queue
        tempStack = []
        while self.value.isEmpty() != 1:
            top = self.value.pop()
            tempStack.append(top)

        tempStack.pop

        while tempStack.isEmpty() != 1:
            top = tempStack.value.pop()
            self.value.append(top)

    def put(self, value):  #Print the element at the front of the queue.
        tempStack = []
        while self.value.isEmpty() != 1:
            top = self.value.pop()
            tempStack.append(top)

        frontElement = tempStack.pop()  #pop the element to be printed out
        print(frontElement)  #print the first element from the queue
        self.value.append(frontElement)  #put the element back into the 'queue'

        while tempStack.isEmpty() != 1:
            top = tempStack.value.pop()
            self.value.append(top)
Example #2
0
 def test_empty_queue(self):
     queue = Queue(1)
     self.assertAlmostEqual(queue.isFull(), False)
     self.assertAlmostEqual(queue.isEmpty(), True)
     queue.enqueue(12)
     self.assertAlmostEqual(queue.isFull(), True)
     self.assertAlmostEqual(queue.isEmpty(), False)
def getkeyword(keyword):
    keys = getkeys()
    consumer_key = keys[0]
    consumer_secret = keys[1]
    access_key = keys[2]
    access_secret = keys[3]

    line = keyword
    words = line.split(',')
    q = Queue(words)
    video_num = 0
    print(q.isEmpty())
    print(q.length())
    while not q.isEmpty():
        word = q.items[0]
        tImage = "images/" + str(video_num) + "-%01d.png"
        video = word + ".avi"
        tweets = readtweets(word, consumer_key, consumer_secret, access_key,
                            access_secret)
        imageflow(video_num, tweets)
        video_num = video_num + 1
        subprocess.call(
            ['ffmpeg', '-y', '-framerate', '.1', '-i', tImage, video])
        q.queuedown()
    return keyword
Example #4
0
class Queue_With_Max(object):
    def __init__(self, currentindex=0):
        self.maximums = Queue()
        self.data = Queue()
        self.current_index = currentindex

    def push_back(self, number):
        while not self.maximums.isEmpty() and number >= self.maximums.back().number_:
            self.maximums.pop_back()
        internaldata = Internal_Data(number, self.current_index)
        self.data.push_back(internaldata)
        self.maximums.push_back(internaldata)
        self.current_index += 1

    def pop_front(self):
        if self.maximums.isEmpty():
            raise KeyError('The queue is empty.')
        if self.maximums.front().index_ == self.data.front().index_:
            self.maximums.pop_front()
        return self.data.pop_front()

    def max(self):
        if self.maximums.isEmpty():
            raise KeyError('The queue is Empty.')
        return self.maximums.front().number_
Example #5
0
def simulation(numOfStd, pagePerMinute):
    labPrinter = Printer(pagePerMinute)
    printerQueue = Queue()
    waitingTimes = []
    currentSecond = 0
    taskCnt = numOfStd * 2

    while True:
        if newPrintTask() and taskCnt > 0:
            printerQueue.enqueue(Task(currentSecond))
            taskCnt -= 1

        if not labPrinter.busy() and not printerQueue.isEmpty():
            nextTask = printerQueue.dequeue()
            waitingTimes.append(nextTask.waitTime(currentSecond))
            labPrinter.startNext(nextTask)

        if taskCnt == 0 and not labPrinter.busy() and printerQueue.isEmpty():
            break

        labPrinter.tick()
        currentSecond += 1

    avgWait = sum(waitingTimes) / len(waitingTimes)
    print("Average Wait %6.2f seconds %3d tasks ramaining"%(avgWait, printerQueue.size()))
def main():
    q = Queue()
    q.isEmpty()
    q.enqueue(9)
    q.enqueue(2)
    q.enqueue(3)
    q.isEmpty()
    q.size()
    q.peek()
    q.print_list()
def main():
	q = Queue()
	q.isEmpty()
	q.enqueue(9)
	q.enqueue(2)
	q.enqueue(3)
	q.isEmpty()
	q.size()
	q.peek()
	q.print_list()
Example #8
0
 def test_remove(self):
     queue = Queue()
     queue.add(1)
     self.assertEqual(1, queue.remove())
     self.assertTrue(queue.isEmpty())
     queue.add(2)
     queue.add(3)
     self.assertEqual(2, queue.remove())
     self.assertEqual(3, queue.remove())
     self.assertTrue(queue.isEmpty())
Example #9
0
class WordLadder:
    """A class providing functionality to create word ladders"""
    stack = Stack()

    # TODO:
    # Implement whatever functionality is necessary to generate a
    # stack representing the word ladder based on the parameters
    # passed to the constructor.

    def __init__(self, w1, w2, wordlist):
        """Initialize WordLadder class with five attributes
        Args:
            w1: user input word one
            w2: user input word two
            wordlist: a list of legal english word with a specified length
        """
        self.w1 = w1
        self.w2 = w2
        self.wordlist = wordlist
        self.wordqueue = Queue()
        self.top_stack = Stack()
        self.top_stack.push(w1)
        self.wordqueue.enqueue(self.top_stack)

    def make_ladder(self):
        """Create word ladder between two words
        Returns:
            A stack containing varying words that make up a word ladder
        """
        created_word = {self.w1}
        copy_word_list = self.wordlist.copy()
        while not self.wordqueue.isEmpty():
            top_stack = self.wordqueue.dequeue()
            word = top_stack.peek()
            for i in range(len(word)):
                for ch in ascii_lowercase:
                    if ch != word[i]:
                        new_word = word[:i] + ch + word[i + 1:]
                        if (new_word in copy_word_list
                                and new_word not in created_word):
                            copy_word_list.remove(new_word)
                            created_word.add(new_word)
                            new_stack = top_stack.copy()
                            new_stack.push(new_word)
                            if new_word == self.w2:
                                return new_stack
                            else:
                                self.wordqueue.enqueue(new_stack)
                                if self.wordqueue.isEmpty():
                                    return None
Example #10
0
class TestQueue(unittest.TestCase):
    def setUp(self):
        self.q = Queue()

    def test_all(self):
        self.assertTrue(self.q.isEmpty())
        self.q.enqueue(4)
        self.q.enqueue('dog')
        self.q.enqueue(True)
        self.assertEqual(3, self.q.size())
        self.assertFalse(self.q.isEmpty())
        self.q.enqueue(8.4)
        self.assertEqual(4, self.q.dequeue())
        self.assertEqual('dog', self.q.dequeue())
        self.assertEqual(2, self.q.size())
Example #11
0
class WordLadder:
    """A class providing functionality to create word ladders"""

    # Implement whatever functionality is necessary to generate a
    # stack representing the word ladder based on the parameters
    # passed to the constructor.

    def __init__(self, w1, w2, wordlist):
        """given the two input words and wordlist,
        initialize the constructor"""
        self.wordlist = wordlist
        self.queue = Queue()
        self.w1 = w1
        self.w2 = w2
        # create alphabet list with letter a-z
        self.alphabet = []
        for letter in range(97, 123):
            self.alphabet.append(chr(letter))
        self.visited_words = set()

    def make_ladder(self):
        """return the __str__ of the stack result"""
        start_time = time.time()
        # init the queue with a stack that contains w1
        if self.queue.isEmpty():
            stack = Stack()
            stack.push(self.w1)
            self.queue.enqueue(stack)
        while not self.queue.isEmpty():
            current_stack = self.queue.dequeue()
            word = current_stack.peek()
            for i in range(len(word)):
                for letter in self.alphabet:
                    if letter != word[i]:
                        new_word_list = list(word)
                        new_word_list[i] = letter
                        new_word = "".join(new_word_list)
                        if (new_word in self.wordlist
                                and new_word not in self.visited_words):
                            self.visited_words.add(new_word)
                            if new_word == self.w2:
                                current_stack.push(new_word)
                                return current_stack.__str__()
                            else:
                                new_stack = current_stack.copy()
                                new_stack.push(new_word)
                                self.queue.enqueue(new_stack)
        return None
def stack_using_queue():
    q1 = Queue()
    q2 = Queue()
    choice = 1
    while (choice != 0):
        print("1. Push")
        print("2. Pop")
        choice = int(input(">"))

        if choice == 1:
            continue_add = 'y'
            while (continue_add != 'n'):
                q1.enqueue(input("Enter the item: "))
                continue_add = input("Continue (y/n): ")

        elif choice == 2:
            if not q1.isEmpty():
                for k in range(0, q1.size() - 1):
                    q2.enqueue(q1.dequeue())

                print("The popped element is: {}".format(q1.dequeue()))

                for t in range(0, q2.size()):
                    q1.enqueue(q2.dequeue())

            else:
                print("Queue empty")
Example #13
0
    def bfs(self, v, callback):
        # Previous setting
        d = {}
        pred = {}
        color = {}

        for i in vertices:
            color[i] = 'white'
            d[i] = 0
            pred[i] = None

        queue = Queue()
        queue.enqueue(v)

        while not queue.isEmpty():
            u = queue.dequeue()
            neighbors = self.adjList.get(u)
            color[u] = 'grey'

            for n in neighbors:
                if color[n] == 'white':
                    color[n] = 'grey'
                    # Count distance and set pred
                    d[n] = d[u] + 1
                    pred[n] = u
                    queue.enqueue(n)
            color[u] = 'black'
        print('distance is =>', d)
        print('predecessors is =>', pred)
        return pred
Example #14
0
	def buscaAmplitude(self,origin,destination):
		position = origin
		checked = []
		queue = Queue()

		if (position == destination):
			return True
		checked.append(position)
		queue.enqueue(position)

		while(not queue.isEmpty()):
			position = queue.dequeue()
			if (position == destination):
				return True
			checked.append(position)

			neighbors = self.neighbors(position)
			while(len(neighbors) != 0):
				position = neighbors.pop(0)

				try:
					i = checked.index(position)
				except ValueError:
					i = -1

				if (i == -1):
					if (position == destination):
						return True
					checked.append(position)
					queue.enqueue(position)

		return False
def BFS(g, s):
    nodes = g.keys()
    edges = [x for t in g.values() for x in t]
    explored = dict(zip(nodes, [0 for i in nodes]))
    dist = dict(zip(nodes, [99999 for i in nodes]))
    dist[s] = 0

    q = Queue()
    q.enqueue(s)
    if DEBUG_MODE: print "%s enqueued" % s
    explored[s] += 1

    if DEBUG_MODE: print "queue : %s" % q
    if DEBUG_MODE: print "explored : %s" % explored

    while not q.isEmpty():
        v = q.dequeue()
        if DEBUG_MODE: print "%s dequeued" % v
        for k in g[v]:
            if DEBUG_MODE: print "%s selected" % (k, )
            if not explored[k[1]]:
                explored[k[1]] += 1
                dist[k[1]] = dist[v] + 1
                q.enqueue(k[1])
                if DEBUG_MODE: print "%s enqueued" % k[1]

            else:
                if DEBUG_MODE: print "%s already explored." % k[1]
        if DEBUG_MODE: print "queue : %s" % q
        if DEBUG_MODE: print "explored : %s" % explored

    return explored, dist
Example #16
0
    def bfs(self, startNode):
        """
        This is a function that performs a Breadth First Search
        On the graph and prints out the order of the search
        """
        queue = Queue()

        # Mark all the nodes as not visited
        visited = {}
        for node in self.getNodes():
            visited[node] = False

        queue.enqueue(startNode)

        while not queue.isEmpty():
            s = queue.dequeue()
            visited[s] = True
            print s,

            # enqueue all the adjacent vertices to s
            # if they've not already been visited

            for adjacentNode in self.getAdjacent(s):
                if visited[adjacentNode] is False:
                    queue.enqueue(adjacentNode)
                    visited[adjacentNode] = True
Example #17
0
    def dfs(self, start, dest):
        self.getVertex(start).setPrev(None)
        q = Queue()
        q.enqueue(start)
        found = False
        while not q.isEmpty() and not found:
            name = q.dequeue()
            if name == dest:
                found = True
                break
            vetex = self.getVertex(name)
            for tmpv in vetex.getConnections():
                if tmpv.getColor() == "white":
                    tmpv.setColor("gray")
                    q.enqueue(tmpv.getId())
                    tmpv.setPrev(vetex)
            vetex.setColor("black")

        if found:
            print("found")
            tmp = self.getVertex(dest)
            while tmp is not None:
                print(tmp.getId(), end=" -> ")
                tmp = tmp.getPrev()
        else:
            print("not found")
Example #18
0
def simulation(numSeconds, pagesPerMinute):
    """
    打印任务模拟
    Args:
        numSeconds:numSeconds 时间内模拟打印
        pagesPerMinute:打印速度 pages/min
    """
    labprinter = Printer(pagesPerMinute)
    printQueue = Queue()
    waitingtimes = []

    for currentSecond in range(numSeconds):
        if newPrintTask():
            task = Task(currentSecond)
            printQueue.enqueue(task)
        #打印机空闲且队列不为空
        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            #下一个任务
            nexttask = printQueue.dequeue()
            waitingtimes.append(nexttask.waitTime(currentSecond))
            labprinter.startNext(nexttask)
        labprinter.tick()

    averageWait = sum(waitingtimes) / len(waitingtimes)
    print("Average wait %6.2f secs %3d tasks remaining." %
          (averageWait, printQueue.size()))
 def buildNodeList(self):
     result = {}
     if self.root:
         q = Queue()
         visitedNode = []
         q.enqueue(self.root)
         q.enqueue('EndLevelFlag')
         level = 0
         while(not q.isEmpty()):
             tmp = q.dequeue()
             if tmp == 'EndLevelFlag':
                 # finish building the current level
                 level += 1
             else:
                 # add node to Linked List
                 visitedNode.append(tmp)
                 if level in result.keys():
                     result[level].append(tmp)
                 else:
                     aList = LinkedList()
                     aList.append(tmp.value)
                     result[level] = aList
                 if tmp.left: q.enqueue(tmp.left)
                 if tmp.right: q.enqueue(tmp.right)
                 # add dummy item to represent the end of level
                 q.enqueue('EndLevelFlag')
     return result
Example #20
0
def deleteNode(root, data):
    if root is None:
        return
    q = Queue()
    node = None
    deep = None
    dleft = None
    dright = None
    result = []
    q.enqueue(root)

    while not q.isEmpty():
        node = q.dequeue()
        result.append(node.data)
        if node.getLeft():
            q.enqueue(node.getLeft())
            if node.getLeft().data == data:
                dleft = node
        if node.getRight():
            q.enqueue(node.getRight())
            if node.getRight().data == data:
                dright = node

    root.printAllLevelOrder()
    deep = node
    if dleft is not None:
        dleft.left = deep
        node.data = data
    elif dright is not None:
        dright.right.data, node.data = deep.data, data

    print("node here : ", deep, deep.data)
    deep = None
    root.printAllLevelOrder()
Example #21
0
def baseConverter(decNum, base):
    i_num = int(decNum)
    i_base = int(base)

    q = Queue()

    while i_num != 0:
        if i_base > i_num:
            q.enqueue(i_num)
            i_num = 0
        elif i_num % i_base == 0:
            c_num = i_num / i_base
            q.enqueue(c_num)
            i_num = i_num - i_base * c_num
        else:
            i = 1
            multiple = i_base
            while multiple < i_num:
                i += 1
                multiple = multiple * i

            i_num = i_num - i_base * (i - 1)
            q.enqueue(i - 1)
    out = ''
    while not q.isEmpty():
        out += str(q.dequeue())

    return out
def calcMinCoinNumForValue2(coinValueList, totalValue):
    knownCoinNumForValue = {}
    knownCoinChoice = {}
    knownCoinChoice[0] = ''
    q = Queue()
    q.enqueue((0,0))
    q.enqueue('endLevel')   # flag indicating end of level
    level = 1
    cnt = 0
    while(not q.isEmpty()):
        e = q.dequeue()
        if e== 'endLevel':
            level+=1
            q.enqueue('endLevel')
        else:
            currVal,valAdded = e
            for vi in coinValueList:
                if vi>=valAdded:
                    nextVal = currVal+vi
                    if nextVal==totalValue:
                        print str(vi)+' '+knownCoinChoice.get(currVal,'') # return empty string '' if knownCoinChoice[currVal] is undefined
                        print cnt
                        return level
                    elif nextVal>totalValue:
                        break
                    else:
                        cnt += 1
                        q.enqueue((nextVal,vi))
                        knownCoinNumForValue[nextVal]=level
                        if not knownCoinChoice.has_key(nextVal):
                            knownCoinChoice[nextVal] = str(vi)+' '+knownCoinChoice.get(currVal,'')
Example #23
0
class QueueTest(unittest.TestCase):
   def setUp(self):
      self.myqueue = Queue()

   def tearDown(self):
      del(self.myqueue)

   def test_create_empty_queue(self):
      self.assertEqual(self.myqueue.isEmpty(), True)

   def test_enqueue_element(self):
      self.myqueue.enqueue(1)
      self.assertEqual(self.myqueue.items[0], 1)

   def test_dequeue_element(self):
      self.myqueue.items.append(1)
      self.assertEqual(self.myqueue.dequeue(), 1)

   def test_ordering_enqueue_dequeue(self):
      self.myqueue.enqueue(1)
      self.myqueue.enqueue(2)
      self.assertEqual(self.myqueue.dequeue(), 1)
      self.assertEqual(self.myqueue.dequeue(), 2)

   def test_queue_size(self):
      self.myqueue.enqueue(1)
      self.myqueue.enqueue(2)
      self.myqueue.enqueue(3)
      self.assertEqual(self.myqueue.size(), 3)
Example #24
0
 def BFS(self, board, x, y, replacement):
     """
     :type board: List[List[str]]
     :rtype: void Do not return anything, modify board in-place instead.
     """
     if not board or not board[0]:
         return
     process = [False for l in board[0]]
     processed = [process[:] for l in board]        
     q = Queue(len(board)*len(board[0]))           
     target = board[x][y]
     q.enqueue((x,y))
     print('target = ', target)        
     processed[x][y] = True        
     while(not q.isEmpty()):
         (x1, y1) = q.dequeue()            
         board[x1][y1] = replacement
         for r,c in zip(self.row, self.col):
             #print r,c,len(q)
             #if isvalid(self, x1+r,y1+c, board, processed, target):                    
             i=x1+r
             j=y1+c
             if i>=0 and i<len(board) and j>=0 and j<len(board[0]) and board[i][j] == target and (not processed[i][j]):        
                 q.enqueue((i,j))
                # print r,c, i, j, board[i][j], processed[i][j], len(q)
                 processed[i][j] = True
                 
     return
    def BFS(self, start_vertex):
        start_vertex = self.get_vertex(start_vertex)

        if start_vertex is None:
            raise Exception(
                "Vertex {} is not found in graph".format(start_vertex))

        visited = [False] * len(self._vertices)
        traversed = []

        q = Queue()
        q.enqueue(start_vertex)

        while not q.isEmpty():
            v = q.dequeue()
            key = v.get_key()

            if not visited[key]:
                visited[key] = True
                traversed.append(key)

                for neighbor in v.get_connections():
                    if not visited[neighbor[0].get_key()]:
                        q.enqueue(neighbor[0])

        return traversed
Example #26
0
    def make_ladder(self):
        ASCII_VALUE_A = 97
        ASCII_VALUE_Z = 122
        stack = Stack()
        queue = Queue()
        stack.push(self.w1)
        queue.enqueue(stack)
        self.unique_word.add(self.w1)

        while not queue.isEmpty():
            stack1 = queue.dequeue()
            word = stack1.peek()

            for i in range(len(word)):
                word_list = list(word)
                for letter in range(ASCII_VALUE_A, ASCII_VALUE_Z + 1):
                    word_list[i] = chr(letter)
                    new_word = "".join(word_list)
                    if (new_word in self.wordlist
                            and new_word not in self.unique_word):
                        self.unique_word.add(new_word)
                        new_stack = stack1.copy()
                        new_stack.push(new_word)
                        if new_word == self.w2:
                            return new_stack
                        else:
                            queue.enqueue(new_stack)
        else:
            return None
Example #27
0
 def hasPathBFS(self, maze, start, destination):
     m, n = len(maze), len(maze[0])
     visited = [[False for _ in xrange(n)] for _ in xrange(m)]
     q = Queue(m * n)
     q.enqueue(start)
     visited[start[0]][start[1]] = True
     while not q.isEmpty():
         (i, j) = q.dequeue()
         if i == destination[0] and j == destination[1]:
             return True
         up, down, left, right = i, i, j, j
         while up > 0 and maze[up - 1][j] != 1:
             up -= 1
         while down < len(maze) - 1 and maze[down + 1][j] != 1:
             down += 1
         while left > 0 and maze[i][left - 1] != 1:
             left -= 1
         while right < len(maze[0]) - 1 and maze[i][right + 1] != 1:
             right += 1
         if not visited[up][j]:
             q.enqueue((up, j))
             visited[up][j] = True
         if not visited[down][j]:
             q.enqueue((down, j))
             visited[down][j] = True
         if not visited[i][left]:
             q.enqueue((i, left))
             visited[i][left] = True
         if not visited[i][right]:
             q.enqueue((i, right))
             visited[i][right] = True
     return False
 def test_queue_is_empty_after_last_item_is_dequeued(self):
   q = Queue()
   q.enqueue(1)
   q.dequeue()
   self.assertEquals(q.size(), 0)
   self.assertTrue(q.isEmpty())
   self.assertIsNone(q.peek())
def simulation(seconds, ppm):

    printer = Printer(ppm)
    q = Queue()
    waittimes = []

    for currentSecond in range(seconds):

        if newPrintTask():
            task = Task(currentSecond)
            q.enqueue(task)

        if (not printer.isBusy()) and (not q.isEmpty()):
            nextTask = q.dequeue()
            waittimes.append(nextTask.getTimeWaited(currentSecond))

            printer.startNextTask(nextTask)


        printer.countdown()

    averageWait = sum(waittimes)/len(waittimes)

    print "Average wait of %6.2f seconds; %3d tasks remaining." \
            % (averageWait, q.size())
    return
Example #30
0
def bfs(G, start):
    state = {}
    parentList = {}
    order = []
    # print "bfs started -- start :", start.name
    for vert in G:
        state[vert.name] = "undiscovered"
        parentList[vert.name] = None
    state[start.name] = "discovered"
    Q = Queue()
    Q.enqueue(start)
    while Q.isEmpty() == False:
        u = Q.dequeue()
        order.append(u.name)
        # print "Dequeued vertex", u.name
        # print "vertex adjs "
        # for v in u.connectedTo:
        #    print v.name,
        # print ""
        for v in u.connectedTo:
            if state[v.name] == "undiscovered":
                state[v.name] == "discovered"
                parentList[v.name] = u.name
                vert_v = G.getVertex(v.name)
                if Q.contains(vert_v) == False:
                    Q.enqueue(vert_v)
                    # print "Enqueued new", v.name
        state[u.name] = "processed"
    return order
Example #31
0
def bfs():
    s = input("enter start node")
    e = input("enter end node")
    start = g.getVertex(s)
    end = g.getVertex(e)
    if not start:
        print(f"{s} not in graph")
        return
    if not end:
        print(f"{e} not in graph")
        return
    Q = Queue()
    start.discovered = True
    Q.push(start)

    while not Q.isEmpty():
        current = Q.pop()
        if current.id == end.id:
            break

        for neighbour in current.connectedTo:
            if not neighbour.discovered:
                neighbour.discovered = True
                neighbour.parent = current
                Q.push(neighbour)

    curr = end
    while curr.parent is not None:
        if curr.id.isupper():
            print(f"was in {curr.id} with")
        else:
            print(f"{curr.id}")
        curr = curr.parent
    print(start.id)
Example #32
0
def BFS(graph, size, src_node, hospitals, pred, k):
    queue = Queue()
    visited = [False] * size
    hospitals_found = 0
    hospital_list = []  # stores all the hospitals found
    visited[src_node] = True
    queue.EnQueue(src_node)

    if str(src_node) in hospitals:
        hospitals_found += 1
        hospital_list.append(src_node)

    while not queue.isEmpty() and hospitals_found < k:
        current_node = queue.DeQueue()
        for neighbor in graph[current_node]:
            if not visited[neighbor]:
                visited[neighbor] = True
                pred[neighbor] = current_node
                queue.EnQueue(neighbor)
                if str(neighbor) in hospitals:
                    hospitals_found += 1
                    hospital_list.append(neighbor)
                    if hospitals_found >= k:
                        break
    return hospital_list
Example #33
0
def insertItem(root, item):
    if root is None:
        root = Tree(item)
        return

    newNode = Tree(item)
    q = Queue()
    node = None
    q.enqueue(root)

    while not q.isEmpty():
        node = q.dequeue()
        # for i in q.queue:
        #     print('i : ', i.data)

        if node.getLeft():
            q.enqueue(node.getLeft())
        else:
            node.left = newNode
            break

        if node.getRight():
            q.enqueue(node.getRight())
        else:
            node.right = newNode
            break

    root.printAllLevelOrder()
Example #34
0
    def bfs(self, source, target, path):
        source_vertex = self.get_vertex(source)

        # Initially none of the nodes are visited
        visited = [False] * len(self._vertices)

        # Since we are starting at source, mark it visited and push it onto the queue
        visited[source] = True
        q = Queue()
        q.enqueue(source_vertex)

        # We need to exhaust all the items in the queue to see if there is an augmented path
        # from source to target.
        while not q.isEmpty():
            current_vertex = q.dequeue()
            current_vertex_key = current_vertex.get_key()

            # For each of the edges(including reverse edges),
            # if the other end of the edge is not visited and has a positive flow
            # Mark it as visited and update the path to the node as the current vertex.
            for neighbor in current_vertex.get_connections():
                neighbor_vertex_key = neighbor[0].get_key()
                if not visited[neighbor_vertex_key] and neighbor[1] > 0:
                    q.enqueue(neighbor[0])

                    visited[neighbor_vertex_key] = True
                    path[neighbor_vertex_key] = current_vertex_key

                    # Along the way, if we reach the target, we have found an augmented path.
                    if neighbor_vertex_key == target:
                        return True

        # If the queue is exhausted, the no augmented path is available.
        return False
Example #35
0
def revKElements(input_string, k):
    s = Stack()
    q = Queue()
    l_string = input_string.split(',')
    n_string = l_string[:k]

    print('L_string', l_string)
    print(n_string, 'n_string')
    for value in n_string:
        q.enqueue(value)
    print(q, "q")

    while not q.isEmpty():
        s.push(q.dequeue())
    # for value in q:
    #     value = q.dequeue()
    #     s.push(value)
    print(q, 'q2')
    print(s, 's')

    while not s.isEmpty():
        q.enqueue(s.pop())
    print(q)
    print(list(q))
    print(', '.join(list(q) + l_string[k:]), 'q3')
Example #36
0
def wordLadderII(start, end, d):
    q = Queue()
    q.enqueue(start)
    q.enqueue('endLevel')
    h = {}
    res = 1
    visitedWord = []
    while not q.isEmpty():
        tmpWord = q.dequeue()
        if tmpWord == 'endLevel':
            res += 1
            q.enqueue('endLevel')
        else:
            for i in range(len(tmpWord)):
                for c in string.lowercase[:26]:
                    newWord = tmpWord[:i] + c + tmpWord[i+1:]
                    if newWord == end:
                        curr = [newWord]
                        prev = h.get(newWord,[tmpWord])
                        prev.extend(curr)
                        return prev
                    elif newWord in d:
                        prev = h.get(newWord,[tmpWord])
                        prevCopy = prev[:]
                        prevCopy.append(tmpWord)
                        h[newWord] = prevCopy
                        if newWord not in q and newWord not in visitedWord:
                            q.enqueue(newWord)
                            
    return 0
Example #37
0
class BFS:
    def __init__(self, node, graph):
        self.src = 0
        self.visited = []
        self.node = node
        self.graph = graph
        self.queue = Queue()
        self.dis = Queue()
        for i in range(node):
            self.visited.append(0)

    def bfs(self, node):
        self.src = node
        self.queue.enqueue(node)
        self.dis.enqueue(0)
        #self.visit(node)
        while not self.queue.isEmpty():
            temp = self.queue.Back()
            if self.visited[temp] == 0:
                self.visit(temp)
                for i in self.graph.g[temp]:
                    self.queue.enqueue(i)
                    self.dis.enqueue(self.dis.Back() + 1)
            self.queue.dequeue()
            self.dis.dequeue()

    def visit(self, node):
        print("node : ", node, " dis from ", self.src, " is : ",
              self.dis.Back())
        self.visited[node] = 1
Example #38
0
def josephus(N, M):
    q = Queue()
    for i in range(N):
        q.enqueue(i)
    result = []
    while not q.isEmpty():
        for i in range(M-1):
            q.enqueue(q.dequeue())
        result.append(q.dequeue())
    return result
Example #39
0
def searchBFS(graph, start):
    visited = []
    queue = Queue()
    queue.enqueue(start)
    while not queue.isEmpty():
        current = queue.dequeue()
        if current not in visited:
            visited.append(current)
            for edges in graph[current]:
                queue.enqueue(edges)
    return visited
Example #40
0
 def breadthFirstSearchTraverse(self, startVertex):  # use a queue to store the temporory vertex
     vertexQueue = Queue()
     if startVertex in self:
         vertexQueue.enqueue(startVertex)
     visitedVertex = []
     while not vertexQueue.isEmpty():
         currentVertex = vertexQueue.dequeue()
         visitedVertex.append(currentVertex)
         for neighborVertex in self.vertexList[currentVertex].getConnections():
             if neighborVertex.id not in visitedVertex:
                 vertexQueue.enqueue(neighborVertex.id)
     return visitedVertex
def solution(root):
    if root is None: return []
    q = Queue()
    q.enqueue(root)
    q.enqueue('EndLevel')
    res = []
    tmpRes = []
    while not q.isEmpty():
        tmp = q.dequeue()
        if tmp == 'EndLevel':
            res.append(tmpRes)
            tmpRes = []
            if not q.isEmpty():
                # otherwise infinite loop
                q.enqueue('EndLevel')
        else:
            tmpRes.append(tmp.val)
            if tmp.left: q.enqueue(tmp.left)
            if tmp.right: q.enqueue(tmp.right)
            
    return res[::-1]
Example #42
0
def ladderLength(start, end, dict):
    q = Queue()
    h, step = {}, 1
    h[start] = 0
    q.enqueue(start)
    q.enqueue(0)
    while not q.isEmpty():
        curr = q.dequeue()
        if curr == 0:
            if q.isEmpty(): return h.get(end,0)
            else: 
                q.enqueue(0)
                step += 1
        else:
            for i in range(len(curr)):
                for c in 'abcdefghijklmnopqrstuvwxyz':
                    tmp = curr[:i] + c + curr[i+1:]
                    if tmp == end: return step
                    if tmp in dict:
                        if tmp not in h:
                            q.enqueue(tmp)
                            h[tmp] = step
def zigzagLevel(root):
    if root is None: return root
    q = Queue()
    q.enqueue(root)
    q.enqueue('end')
    level, currLevel, res = 0, [], []
    while not q.isEmpty():
        tmp = q.dequeue()
        if tmp == 'end':
            if level % 2: # flip odd level
                currLevel = [r for r in currLevel[::-1]]
            level += 1
            res.append(currLevel)
            currLevel = []
            if not q.isEmpty(): 
                q.enqueue('end')
        else:
            currLevel.append(tmp.value)
            if tmp.left: q.enqueue(tmp.left)
            if tmp.right: q.enqueue(tmp.right)
    for r in res:
        print r
Example #44
0
def bfsIterative(node):
    if node is None:
        return []
    res = []
    q = Queue()
    q.enqueue(node)
    while not q.isEmpty():
        tmp = q.dequeue()
        res.append(tmp.value)
        if tmp.left:
            q.enqueue(tmp.left)
        if tmp.right:
            q.enqueue(tmp.right)
    return res
Example #45
0
 def levelOrder(self,a):
     q = Queue()
     r = a
     while r is not None:
         print(r.root.data)
         if r.root.left is not None:
             q.add(r.root.left)
         if r.root.right is not None:
             q.add(r.root.right)
         if q.isEmpty():
             print("empty")
             r = None
         else:
             r = q.delete()
Example #46
0
class QueueTestCase(unittest.TestCase):
    def setUp(self):
        self.queue = Queue()

    def test_isEmpty(self):
        self.assertEqual(self.queue.isEmpty(),True)

    def test_queue(self):
        self.queue.enqueue(12)
        self.queue.enqueue('queue')
        self.queue.enqueue('end')
        self.assertEqual(self.queue.size(),3)
        self.assertEqual(self.queue.dequeue(),12)
        self.assertEqual(self.queue.dequeue(),'queue')
        self.assertEqual(self.queue.size(),1)
Example #47
0
class Printer():
 
    def __init__(self, speed):
        self.speed = speed
        self.queue = Queue()
    
    def isIdle(self):
        return self.queue.isEmpty()
    
    def addTask(self, t):
        self.queue.enqueue(t)
        
    def removeTask(self):
        if not self.queue.isEmpty():
            return self.queue.dequeue()
    
    def getQueueSize(self):
        return self.queue.size()
    
    def getTimeToFinishCurrentTask(self):
        if self.queue.isEmpty():
            return 0
        else:
            return self.queue.peek().getPage() / float(self.speed)
Example #48
0
def BFS(graph, root, target):
    q = Queue()
    checked = []
    q.enqueue(root)
    path = 0
    while not q.isEmpty():
        v = q.dequeue()
        if v == target:
            return True
        elif v not in checked:
            for edge in graph[v]:
                if v not in checked:
                    q.enqueue(edge)
                checked.append(v)
            return False
def main(g, start):
    start.distance = 0
    start.predecessor = None
    q = Queue()
    q.enqueue(start)
    while not q.isEmpty():
        current = q.dequeue()
        print current
        for nbrkey in current.getConnections():
            if g.vertices[nbrkey].color == "white":
                q.enqueue(g.vertices[nbrkey])
                g.vertices[nbrkey].color = "grey"
                g.vertices[nbrkey].distance = current.distance + 1
                g.vertices[nbrkey].predecessor = current
        current.color = "black"
Example #50
0
 def levelByLevel(self, aFile):
     ''' Print the nodes of the BTree level-by-level on aFile.
     '''
     aFile.write("A level-by-level listing of the nodes:\n")
     aQueue = Queue()                                              #create an empty queue
     aQueue.enqueue(self.rootNode)                                 #enqueue the root node
     
     while not aQueue.isEmpty():
         aNode = aQueue.dequeue()                                  #get the next node in the queue
         aFile.write(str(aNode))                                   #write the node to the file
         
         for i in range(aNode.getNumberOfKeys()+1):                #for each of the items in the node
             child = self.readFrom(aNode.getChild()[i])            #get the child node
             if child != None:                                     #if there is a child node, enqueue it
                 aQueue.enqueue(child)
class Queue2Stack:

	def __init__(self,size1,size2):
		self.queue1 = Queue(size1)
		self.queue2 = Queue(size2)

	def push(self,data):
		self.queue1.push(data)

	def pop(self):
		while self.queue1.size!=1:
			self.queue2.push(self.queue1.pop())
		result = self.queue1.pop()
		while not self.queue2.isEmpty():
			self.queue1.push(self.queue2.pop())
		return result
Example #52
0
def levelOrder(root, result):
    if root is None:
    	return
    q = Queue()
    q.enQueue(root)

    while not q.isEmpty():
    	node = q.deQueue()
    	result.append(node.data)

    	if node.left :
    		q.enQueue(node.left)
    	if node.right:
    		q.enQueue(node.right)

    return result
Example #53
0
class test_queue(unittest.TestCase):

	def setUp(self):
		self.demo_queue = None
		self.demo_queue = Queue(10)

	def test_enqueue(self):
		item1 = self.demo_queue.enqueue("1")
		item2 = self.demo_queue.enqueue("2")
		item3 = self.demo_queue.enqueue("3")
		item4 = self.demo_queue.enqueue("4")
		item5 = self.demo_queue.enqueue("5")
		item6 = self.demo_queue.enqueue("6")
		item7 = self.demo_queue.enqueue("7")
		item8 = self.demo_queue.enqueue("8")
		item9 = self.demo_queue.enqueue("9")
		item10 = self.demo_queue.enqueue("10")
		item11 = self.demo_queue.enqueue("11")
		item12 = self.demo_queue.enqueue("12")				
								

		self.assertEqual(item1, True)
		self.assertEqual(item2, True)
		self.assertEqual(item3, True)
		self.assertEqual(item4, True)
		self.assertEqual(item5, True)
		self.assertEqual(item6, True)
		self.assertEqual(item7, True)
		self.assertEqual(item8, True)
		self.assertEqual(item9, True)
		self.assertEqual(item10, True)
		self.assertEqual(item11, False)																				
		self.assertEqual(item12, False)

		

	def test_dequeue(self):
		item1 = self.demo_queue.enqueue("1")
		item2 = self.demo_queue.enqueue("2")
		item3 = self.demo_queue.enqueue("3")
		self.assertEqual(self.demo_queue.dequeue(), True)		
		self.assertEqual(self.demo_queue.dequeue(), True)
		self.assertEqual(self.demo_queue.dequeue(), True)
		self.assertRaises(Exception, self.demo_queue.dequeue)						

	def test_isempty(self):
		self.assertEqual(self.demo_queue.isEmpty(), True)
Example #54
0
 def cloneGraph(self, node):
     if node is None: return node
     q = Queue()
     q.enqueue(node)
     self.nodeCopy[node] = UndirectedGraphNode(node.label)
     
     while not q.isEmpty():
         oldNode = q.dequeue()
         tmp = self.nodeCopy[oldNode]
         for nb in oldNode.neighbors:
             if nb not in self.nodeCopy:
                 ''' define new neighbor node if not previous defined (unvisited) '''
                 self.nodeCopy[nb] = UndirectedGraphNode(nb.label)
                 q.enqueue(nb)
             tmp.neighbors.append(self.nodeCopy[nb])
             self.nodeCopy[oldNode] = tmp
     return self.nodeCopy[node]
Example #55
0
def simulation(numSeconds, pagesPerMinute, studentsNum, taskNumPerStudent, maxTaskLength):

    labprinter = Printer(pagesPerMinute)
    printQueue = Queue()
    waitingtimes = []

    for currentSecond in range(numSeconds):
        if newPrintTask(studentsNum, taskNumPerStudent):
            task = Task(currentSecond, maxTaskLength)
            printQueue.enqueue(task)
        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            nexttask = printQueue.dequeue()
            waitingtimes.append(nexttask.waitTime(currentSecond))
            labprinter.startNext(nexttask)
        labprinter.tick()

    averageWait = sum(waitingtimes) / len(waitingtimes)
    return (averageWait, printQueue.size())
Example #56
0
def simulation(numSeconds, pagesPerMinute):
    labprinter = Printer(pagesPerMinute)
    printQueue = Queue()
    waitingtimes = []

    for currentSecond in range(numSeconds):
        if newPrintTask():
            task = Task(currentSecond)
            printQueue.enqueue(task)

        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            nexttask = printQueue.dequeue()
            waitingtimes.append(nexttask.waitTime(currentSecond))
            labprinter.startNext(nexttask)

        labprinter.tick()

    averageWait = sum(waitingtimes)/len(waitingtimes)
    print "Average Wait %6.2f secs %3d tasks remaining."%(averageWait,printQueue.size())
Example #57
0
def wordLadder(start, end, d):
    # assume correct input
    q = Queue()
    q.enqueue(start)
    q.enqueue('endLevel')
    visitedWord = []
    res = 1
    while not q.isEmpty():
        tmpWord = q.dequeue()
        if tmpWord == 'endLevel':
            res += 1
            q.enqueue('endLevel')
            continue
        visitedWord.append(tmpWord)
        for i in range(len(tmpWord)):
            for c in string.lowercase[:26]:
                newWord = tmpWord[:i] + c + tmpWord[i+1:]
                if end == newWord: return res
                elif newWord in d and newWord not in visitedWord and newWord not in q:
                    q.enqueue(newWord)
    return 0
Example #58
0
def simulation(numSeconds, pagePerMinute, numStudents):

    labprinter = Printer(pagePerMinute)
    printQueue = Queue()
    waitingTimes = []
    avTaskpTime = numSeconds // numStudents

    for currentSecond in range(numSeconds):

        if newPrintTask(avTaskpTime):
            task = Task(currentSecond)
            printQueue.enqueue(task)

        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            nextTask = printQueue.dequeue()
            waitingTimes.append(nextTask.waitTime(currentSecond))
            labprinter.startNext(nextTask)

        labprinter.tick()

    averageWait = sum(waitingTimes)/len(waitingTimes)
    print("Average Wait %6.2f secs and %3d tasks remaining, %3d tasks are printed" %(averageWait, printQueue.size(), len(waitingTimes)))
Example #59
0
#coding=latin1
'''
Created on 28 okt 2013

@author: MJ & YJ
'''

from queue import Queue

mening = input("Skriv en mening: ")

myq = Queue()
for ordet in mening.split():  # dela upp meningen i ord
    myq.put(ordet)            # och sätt in varje ord i kön

while not myq.isEmpty():      # alla köns element
    print(myq.get())          # skrivs ut

print()                       # tom rad
print(myq.get())              # None skrivs ut eftersom kön är tom