PriorityQ

 avatar
shinta0x01
python
a year ago
2.1 kB
7
Indexable
class Node:
    def __init__(self, data, priority=None):
        self.data = data
        self.priority = priority
        self.next = None


class Queue:
    def __init__(self):
        self.front = self.rear = None

    def enqueue(self, data, priority=None):
        node = Node(data, priority)
        current = self.front

        if self.is_empty():
            self.front = self.rear = node
        else:
            if self.front.priority is None:
                node.next = self.front
                self.front = node
                return
            if priority is None:
                self.rear.next = node
                self.rear = self.rear.next
                return
            elif priority < self.front.priority:
                node.next = self.front
                self.front = node
                return
            elif self.rear.priority and priority > self.rear.priority:
                self.rear.next = node
                self.rear = self.rear.next
                return
            else:
                while current.next:
                    if current.next.priority is None or priority < current.next.priority:
                        break
                    current = current.next
                node.next = current.next
                current.next = node

    def dequeue(self):
        if self.is_empty():
            return None
        else:
            self.front = self.front.next

    def get_front(self):
        return self.front.data if self.front else None

    def get_rear(self):
        return self.rear.data if self.rear else None

    def is_empty(self):
        return self.front is None

    def display(self):
        current = self.front

        while current:
            print(current.data, current.priority, '  ', end='')
            current = current.next
        print()


q = Queue()
q.enqueue(3)
q.enqueue(10, 3)
q.enqueue(5)
q.enqueue(1, 1)
q.enqueue(6, 6)
q.enqueue(2, 2)

q.display()
print(q.get_front())
print(q.get_rear())


Editor is loading...
Leave a Comment