2.7python设计一个排队系统

题目描述:

设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要及时反馈到用户。

思路:
本题不仅要实现队列常见的入队列和出队列的功能,而且还需要实现队列中任意一个元素都可以随时出队列,且出队列后需要更新队伍用户位置的变化。

代码实现:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/1/22 8:50
# @Author  : buu
# @Software: PyCharm
# @Blog    :https://blog.csdn.net/weixin_44321080
from collections import deque


class User:  # 用户类
    def __init__(self, id, name):
        self.id = id  # 某个用户的唯一标识
        self.name = name  # 用户的名字
        self.seq = 0  # 用来标记用户在队列中的位置

    def getName(self):
        return self.name

    def setName(self, name):
        self.name = name

    def getSeq(self): # 获取用户在队伍中的位置
        return self.seq

    def setSeq(self, seq): # 重置用户在队伍中的位置
        self.seq = seq

    def getId(self):
        return self.id

    def equals(self, arg0):
        o = arg0
        return self.id == o.getId()

    def toStrings(self): # 打印用户的信息
        return 'id: ' + str(self.id) + ', name: ' + self.name + ', seq: ' + str(self.seq)


class MyQueue: # 排队类
    def __init__(self): # self即MyQueue对象,q即dequeue对象
        self.q = deque()  # 新建一个从左向右的 dequeue() 对象,用来模拟排队

    def enQueue(self, u):  # 队尾来了一个新的用户
        u.setSeq(len(self.q) + 1) # 队尾用户的位置是最后一个
        self.q.append(u)

    def deQueue(self):  # 队头离开了队列
        self.q.popleft()
        self.updateSeq()

    def deQueueMove(self, u):  # 队列中有人离开了队列
        self.q.remove(u)
        self.updateSeq()

    def updateSeq(self): # 每次队伍变化都需要重置用户在队伍中的位置
        i = 1
        for u in self.q:  # 对于排队中的每一个用户
            u.setSeq(i)  # 标记队伍中每一个用户在队伍中的位置
            i += 1

    def printList(self):
        for u in self.q:
            print(u.toStrings())


if __name__ == '__main__':
    u1 = User(1, 'user1')
    u2 = User(2, 'user2')
    u3 = User(3, 'user3')
    u4 = User(4, 'user4')
    queue = MyQueue()  # 模拟排队队伍,从左到右
    queue.enQueue(u1)
    queue.enQueue(u2)
    queue.enQueue(u3)
    queue.enQueue(u4)  # 此时队伍: u1,u2,u3,u4
    queue.deQueue()  # 队首元素 u1 出队 ,此时队伍:u2,u3,u4
    queue.deQueueMove(u3)  # 队列中 u3 出队,此时队伍:u2,u4
    queue.printList()

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

发布了76 篇原创文章 · 获赞 2 · 访问量 2565

猜你喜欢

转载自blog.csdn.net/weixin_44321080/article/details/104066310
今日推荐