顺序队列实现:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class SequenceQueen:
#初始化
def __init__(self):
self.front=0
self.rear=0
self.MaxQueenSize=100
self.datas=[0 for x in range(0,self.MaxQueenSize)]
def IsEmptyQueen(self):
return self.front==self.rear
def IsFullQueen(self):
# return self.rear+1>=self.MaxQueenSize
return (self.rear+1)%self.MaxQueenSize==self.front
def EnterQueen(self,data):
if self.IsFullQueen():
return
else:
# self.rear=self.rear+1
self.rear=(self.rear+1)%self.MaxQueenSize
self.datas[self.rear]=data
def ExitQueen(self):
if self.IsEmptyQueen():
return
else:
# self.front=(self.front+1)
self.front=(self.front+1)%self.MaxQueenSize
return self.datas[self.front]
def GetFront(self):
if self.IsEmptyQueen():
return
else:
# return self.datas[self.front+1]
return self.datas[(self.front+1)%self.MaxQueenSize]
def GetLength(self):
return (self.rear-self.front+self.MaxQueenSize)%self.MaxQueenSize
class UnitTest:
def Fibonacci(self,n):
if n==0:
print(1)
return 1
if n==1:
print(1,1)
return 1
queen=SequenceQueen()
queen.EnterQueen(1)
queen.EnterQueen(1)
i=1
while i<n:
numHead=queen.ExitQueen()
numRear=queen.GetFront()
num=numHead+numRear
queen.EnterQueen(num)
i=i+1
while queen.GetLength()!=1:
queen.ExitQueen()
return queen.ExitQueen()
test=UnitTest()
print(test.Fibonacci(5))
链式队列实现:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class StackNode:
def __init__(self,data)
self.next=None
self.data=data
class LinkQueen:
#初始化
def __init__(self):
headNode=StackNode(None)
self.front=headNode
self.rear=headNode
def IsEmptyQueen(self):
return self.front==self.rear
def EnterQueen(self,data):
cNode=StackNode(data)
self.rear.next=cNode
self.rear=cNode
def ExitQueen(self):
if self.IsEmptyQueen():
return
else:
tNode=self.front.next
self.front.next=tNode.next
if tNode==self.rear
self.rear=self.front
return tNode.data
def GetFront(self):
if self.IsEmptyQueen():
return
else:
return self.front.next.data
class UnitTest:
def Fibonacci(self,n):
if n==0:
print(1)
return 1
if n==1:
print(1,1)
return 1
queen=SequenceQueen()
queen.EnterQueen(1)
queen.EnterQueen(1)
i=1
while i<n:
numHead=queen.ExitQueen()
numRear=queen.GetFront()
num=numHead+numRear
queen.EnterQueen(num)
i=i+1
while queen.front.next!=queen.rear:
queen.ExitQueen()
return queen.ExitQueen()
test=UnitTest()
print(test.Fibonacci(5))