先进先出结构
用数组实现一个顺序队列
class ArrayQueue:
def __init__(self, length):
self.queue = [None]*length
self.length = length
self.front = 0
self.rear = 0
def in_queue(self, element):
if self.rear < self.length:
self.queue[self.rear] = element
self.rear += 1
else:
print("队列已满")
def out_queue(self):
if self.is_empty():
return False
else:
self.queue[self.front] = None
self.front += 1
def is_empty(self):
if self.front == self.rear:
return True
def front_queue(self):
if self.is_empty():
return False
else:
return self.queue[self.front]
if __name__ == '__main__':
arrayQueue = ArrayQueue(5)
arrayQueue.in_queue(1)
arrayQueue.in_queue(2)
arrayQueue.in_queue(3)
arrayQueue.out_queue()
arrayQueue.out_queue()
print(arrayQueue.front_queue(), arrayQueue.front, arrayQueue.rear)
print(arrayQueue.queue)
用链表实现一个链式队列
class QueueNode:
def __init__(self):
self.data = None
self.next = None
class LinkQueue:
def __init__(self):
node = QueueNode()
self.front = node
self.rear = node
def is_empty(self):
if self.front == self.rear:
return True
else:
return False
def in_queue(self, element):
node = QueueNode()
node.data = element
self.rear.next = node
self.rear = node
def out_queue(self):
if self.is_empty():
print("队列为空")
return
else:
node = self.front.next
self.front.next = node.next
if self.rear == node:
self.rear = self.front
return node.data
def front_queue(self):
if self.is_empty():
print("队列为空")
return
else:
return self.front.next.data
if __name__ == '__main__':
queue = LinkQueue()
queue.in_queue(1)
queue.in_queue(2)
queue.in_queue(3)
print(queue.out_queue())
print(queue.out_queue())
print(queue.out_queue())
print(queue.out_queue())
实现一个循环队列
class RingQueue:
def __init__(self, length):
self.queue = [None]*length
self.length = length
self.count = 0
self.front = 0
self.rear = 0
def in_queue(self, element):
if self.count < self.length:
self.queue[self.rear] = element
self.count += 1
self.rear = self.rear+1 if self.rear+1 < self.length else 0
else:
print("队列已满")
def out_queue(self):
if self.is_empty():
return False
else:
self.queue[self.front] = None
self.count -= 1
if self.front < self.length:
self.front += 1
else:
self.front = 0
def is_empty(self):
if self.count == 0:
return True
def front_queue(self):
if self.is_empty():
return False
else:
return self.queue[self.front]
if __name__ == '__main__':
ringQueue = RingQueue(5)
ringQueue.in_queue(1)
ringQueue.in_queue(2)
ringQueue.in_queue(3)
ringQueue.in_queue(4)
ringQueue.in_queue(5)
ringQueue.in_queue(3)
ringQueue.out_queue()
ringQueue.out_queue()
ringQueue.in_queue(6)
ringQueue.out_queue()
ringQueue.in_queue(7)
print(ringQueue.front_queue(), ringQueue.front, ringQueue.rear)
print(ringQueue.queue)