北大2020春数据结构课OJ作业 强迫症老板和他的洗碗工

本文通过分析堆栈特性解决北大2020春数据结构课程的在线作业问题,描述了洗碗工按照顺序洗盘子的逻辑,并提供具体代码实现。
摘要由CSDN通过智能技术生成

题目描述

结题思路主要还是利用堆栈的特性.

        洗碗工洗好的盘子摆放起来明显是一个堆栈. 我们用堆栈的出站入站来模拟洗盘子取盘子的过程.根据是否出现矛盾,进行判断.

从此处入手分析可知:

start 初始为0

首先我们假设洗碗工是按照要求顺序洗盘子的,因此可以将客户取到的盘子分为三种情况:

  1. 堆栈为空或者盘子号大于栈顶元素,将从start到取到的盘子号的盘子都push进堆栈,然后弹出。(因此只用压到盘子号-1的元素就好了,省了弹出)
  2. 取到的盘子号等于栈顶元素,将栈顶元素弹出
  3. 取到的盘子号小于栈顶元素。矛盾,说明没有按照顺序洗盘子,所以返回No.

具体代码如下:

class Stack():
    def __init__(self, limit=10):
        self.stack = []
        self.limit = limit
    def pop(self):
        if self.stack:
            return self.stack.pop()
        else:
            raise IndexError('pop from an empty stack')  # 空栈不能被弹出
    def push(self,x):
        if len(self.stack)<self.limit:
            self.stack.append(x)
        else:
            pri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值