使用队列获取Fibonacci数列第n个数(Python)

顺序队列实现:

#!/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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值