顺序队列和链式队列的python实现

队列: 是一种受限的线性数据结构,先进先出,尾端插入头端出列

顺序队列

数组实现的队列: 1.在出队的时候整个队列的数据都往头迁移,这样的话时间复杂度就是O(n),入队的时间复杂度为O(1) 2.出队的时候直接从队头弹出一个数据,然后头指针往后迁移​一步,这中出队操作的时间复杂度是O(1),但是入队就需要判定下是否队列满了,假如满了但是头指针在队头就扩充,假如头指针在队尾就做数据迁移

但是这两点在python上都体现不出来,因为list是动态数组

class Queue:

    def __init__(self):

        self.items = list()
        self.n = 0
        self.head = 0

    def enqueue(self,item):
        self.items.append(item)

    def dequeue(self):

        tmp = self.items[self.head]
        self.items.remove(self.head)
        self.head += 1
        return tmp

链式队列

加个tail的尾引用,出队操作,直接拿head.next作为新的head,入队则是 把新结点插入到尾结点的next,再把新结点作为尾结点

class Node:

    def __init__(self,value):
        self.value = value
        self.next = None


class LinkQueue:


    def __init__(self):
        self.head = None
        self.n = 0
        self.tail = None

    def enqueue(self,value):
        new_node = Node(value)
        if self.head == None :
            self.head = new_node
            self.tail = self.head
        else :
            self.tail.next = new_node
            self.tail = new_node
        self.n += 1

    def dequeue(self):
        if self.n == 0 : return False
        value = self.head.value
        self.head = self.head.next
        self.n -= 1
        return value

还有一种循环队列,可以解决队列的数据迁移问题,使得用数组实现的队列入队和出队操作时间复杂度都为o(1)

你可能感兴趣的:(数据结构和算法)