在python中如何使用队列
在python使用队列有两种方式,一种是使用list来模拟队列,另外一个自带的deque双端队列,但是deque是真的难用,可能我太菜了,难用的点是每次看队头或队尾的元素的时候都必须pop出来,然后还需要append进去,难受死了。
这里就自己实现了一个链表的python双端队列,挺简单的,大家有需要可以随便用,已经测试过了,没有毛病
class QueueNode:
def __init__(self, val, pre=None, next=None):
self.val = val
self.next = next
self.pre = pre
class Queue:
def __init__(self):
self.head = QueueNode(0)
self.tail = self.head
def getLen(self):
return self.head.val
def getTail(self):
return self.tail.val if self.head.val != 0 else None
def getHead(self):
return self.head.next.val if self.head.val != 0 else None
def appendTail(self, val):
self.head.val += 1
self.tail.next = QueueNode(val)
self.tail.next.pre = self.tail
self.tail = self.tail.next
def popTail(self):
if self.head.val == 0:
return None
self.head.val -= 1
result = self.tail
self.tail = self.tail.pre
self.tail.next = None
result.pre = None
return result
def appendHead(self, val):
self.head.val += 1
t = QueueNode(val)
t.next = self.head.next
t.pre = self.head
self.head.next = t
if self.head.val == 1:
self.tail = t
else:
t.next.pre = t
def popHead(self):
if self.head.val == 0:
return None
self.head.val -= 1
if self.head.val == 0:
self.tail.pre = None
self.head.next = None
result = self.tail
self.tail = self.head
return result
result = self.head.next
self.head.next = self.head.next.next
self.head.next.pre = self.head
result.next = None
result.pre = None
return result