自定义类实现带超时功能的队列结构

26 篇文章 0 订阅

自定义类实现带超时功能的队列结构

一、 实验目的

  1. 了解标准库time中time函数的用法
  2. 了解如何定义一个类
  3. 理解队列结构的特点
  4. 理解入队和出队时超时功能的实现。

二、 实验内容

  • 编写程序,实现自定义类、模拟队列结构。
  • 要求实现入队、出队以及修改队列大小和判断队列是否为空,是否为满的功能,
  • 同时要求在入队时如果队列已满则等待指定时间,出队时如果队列已空则等待指定时间等辅助功能。
  • 自选现实生活案例演示类的该类的使用方法。
import time

class Que:
    """建立一个模拟队列结构"""

    def __init__(self, maxsize=float('inf')):
        self._maxsize = maxsize
        self.queue = []

    def getout(self):
        """出队"""
        if self.qsize() == 0:
            time.sleep(1)
            print("无人在此窗口排队打饭,请等待2S以上")
            return False
        else:
            return self.queue.pop(0)

    def putin(self, item):
        """入队,假设成功入栈需要2秒"""
        if self._maxsize <= self.qsize():
            print("请等待{}秒!".format(2 - (time.time() - self.lastintime)))
            return False
        else:
            time.sleep(2)
            self.lastintime = time.time()
            self.queue.append(item)
            return True

    def qsize(self):
        """队列中的项目数。"""
        return len(self.queue)

    def empty(self):
        """如果队列为空,则返回 True,否则返回 False。"""
        return not self.queue

    def full(self):
        """如果队列中有 maxsize 项,则返回 True。
        注意:如果队列是用 maxsize= float('inf')(默认值)初始化的,那么 full() 永远不会为 True。
        """
        if self._maxsize <= 0:
            return False
        else:
            return self.qsize() >= self._maxsize

    def modify(self, maxsize):
        """修改队列大小"""
        self._maxsize = maxsize


"""理想状态下模拟食堂排队打饭情况,假设窗口大妈盛饭需要2秒
部分同学可能看到本窗口菜品后又立即getout走开了,也有同学在思考人生不出队"""
# canteen_windows as cw
cw = Que(2)
print("--------------------------------------------------")
print("---第一人进入")
cw.putin("A")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

print("--------------------------------------------------")
print("---第二人进入")
cw.putin("B")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

print("--------------------------------------------------")
print("---第三人尝试进入进入")
cw.putin("C")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

# 一名小伙将排队扩容
cw.modify(3)

print("--------------------------------------------------")
print("---第三人进入")
print(cw.putin("C"))
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

print("--------------------------------------------------")
print("---第一人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

print("--------------------------------------------------")
print("---第二人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))

print("--------------------------------------------------")
print("---第三人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值