数据结构之python实现队列的链式存储实例

题目1:

在这里插入图片描述

python实现:

class QueueNode():
    def __init__(self):
        self.data = None
        self.next = None
class LinkQueue():
    def __init__(self):
        tQueueNode = QueueNode()
        self.front = tQueueNode
        self.rear = tQueueNode
    '''判断是否为空'''
    def IsEmptyQueue(self):
        if self.front == self.rear:
            iQueue = True
        else:
            iQueue = False
        return iQueue
    '''进队列'''
    def EnQueue(self,da):
        tQueueNode = QueueNode()
        tQueueNode.data = da
        self.rear.next = tQueueNode
        self.rear = tQueueNode
    '''出队列'''
    def DeQueue(self):
        if self.IsEmptyQueue():
            print("队列为空")
            return
        else:
            tQueueNode = self.front.next
            self.front.next = tQueueNode.next
            if self.rear == tQueueNode:
                self.rear = self.front
            return tQueueNode.data
    '''遍历顺序队列内的所有元素'''
    def QueueTraverse(self):
        if self.IsEmptyQueue():
            return
        else:
            tQueueNode = self.front.next
            while tQueueNode != self.rear:
                    print(tQueueNode.data,end = " ")
                    tQueueNode = tQueueNode.next
            print(tQueueNode.data,end = " ")
           
    '''链式队列长度'''
    def GetQueueLength(self):
        if self.IsEmptyQueue():
            return
        else:
            tQueueNode = self.front
            num = 0
            tQueueNode = self.front.next
            while tQueueNode != self.rear:
                num = num+1
                tQueueNode = tQueueNode.next
            num = num+1
            return num
class TestJP():
    def Josephus(self,n,k):
        qu = LinkQueue()
        i = 1
        while i <= n:
            qu.EnQueue(i)
            i = i+1
        print("队内元素为:",end = " ")
        qu.QueueTraverse()
        count = 0
        print("\n出队顺序为:")
        while qu.GetQueueLength() > 1:
            iNum = 1
            while iNum != k:
                tData = qu.DeQueue()
                qu.EnQueue(tData)
                iNum = iNum + 1
            print(qu.DeQueue(), end = " ")
            count = count + 1
            if count % 10 == 0:
                print()
        print("获得资格的为:",qu.DeQueue())
    def TestJosephus(self):
        peolenum = int(input("请输入总人数:"))
        gap = int(input("请输入要出列的编号:"))
        self.Josephus(peolenum,gap)
TJP =  TestJP()
TJP.TestJosephus()

结果如下:
在这里插入图片描述

题目2:在这里插入图片描述

python实现:

class QueueNode():
    def __init__(self):
        self.data = None
        self.next = None
class LinkQueue():
    def __init__(self):
        tQueueNode = QueueNode()
        self.front = tQueueNode
        self.rear = tQueueNode
    '''判断是否为空'''
    def IsEmptyQueue(self):
        if self.front == self.rear:
            iQueue = True
        else:
            iQueue = False
        return iQueue
    '''进队列'''
    def EnQueue(self,da):
        tQueueNode = QueueNode()
        tQueueNode.data = da
        self.rear.next = tQueueNode
        self.rear = tQueueNode
    '''出队列'''
    def DeQueue(self):
        if self.IsEmptyQueue():
            print("队列为空")
            return
        else:
            tQueueNode = self.front.next
            self.front.next = tQueueNode.next
            if self.rear == tQueueNode:
                self.rear = self.front
            return tQueueNode.data
    '''遍历顺序队列内的所有元素'''
    def QueueTraverse(self):
        if self.IsEmptyQueue():
            return
        else:
            tQueueNode = self.front.next
            while tQueueNode != self.rear:
                    print(tQueueNode.data,end = " ")
                    tQueueNode = tQueueNode.next
            print(tQueueNode.data,end = " ")
class TestM():       
    def MatchAB(self):
        quA = LinkQueue()    # 存放女生
        quB = LinkQueue()    # 存放男生
        print ("输入选手编号,如果男生输入M**,如果是女生输入F**,如果结束输入“#”:")
        num = input("请输入选手编号:")
        while num != "#":
            if num[0]== "F":
                quA.EnQueue(num) 
            elif num[0] == "M":
                quB.EnQueue(num)
            else:
                print("输入错误")
            num = input("请输入选手编号:")
        print("A队列的女生有:")
        quA.QueueTraverse()
        print("\nB队列的男生有:")
        quB.QueueTraverse()
        print()
        count = 0
        while True:
            if quA.IsEmptyQueue() and quB.IsEmptyQueue():
                print("两队均为空,组合结束")
                break
            elif quA.IsEmptyQueue():
                print("女生队为空")
                print("男生队还剩:")
                quB.QueueTraverse()
                break
            elif quB.IsEmptyQueue():
                print("男生队为空")
                print("女生队还剩:")
                quA.QueueTraverse()
                break
            else:
                result1 = quA.DeQueue()
                result2 = quB.DeQueue()
                print(result1,"组合",result2)
                count = count + 1
        print()
        print("共有",count,"个组合")
MAB = TestM()
MAB.MatchAB()

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40283816/article/details/87992240
今日推荐