V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
netty
V2EX  ›  算法

人人都爱听故事,最好还能学到东西:我来讲讲李老板这精明鬼卖货的故事

  •  
  •   netty · 2020-02-15 00:01:59 +08:00 · 1666 次点击
    这是一个创建于 1772 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是一个关于老板精明卖货的故事。

    一、仓库与门店

    话说李老板有一个门店,用来做零售。
    还有一个小仓库,虽然面积不大,但好在离门店近,还能存点东西。

    二、进货

    每当进货的时候,商品要先存储到仓库。
    由于仓库又深又窄,容量还小,只能先进后出。

    后果是,旧的货全堆在最深处,如果过期了那可是要亏大本的啊!!
    这可要命,李老板有点愁眉苦脸的 &<&

    三、销售

    门店和仓库类似,货架又深又窄,容量倒还挺大,也只能先进后出。

    门店刚开始的时候,一件商品都没有。
    好在门店离仓库很近,商品只要一件件人肉搬过来就可以了。
    于是,李老板开始动手...

    说来这李老板还有点小聪明,为了不亏本,想出了一个好办法:
    每当门店商品卖完,货架空了。就把仓库的货全搬过来,按顺序一件件推进上货架。
    这样,新的货总是摆放在货架的最里面,而旧的货总是摆放在最外面。

    于是,旧货可以先卖,商品不容易过期,老板甚是开心啊 ^_^

    第一个栈:仓库,负责入库存储
    第二个栈:货架,等待销售

    class CQueue {
    // 用于入列,暂存数据,相当于仓库
    private LinkedList<Integer> warehouse;
    // 用于出列,为空则先从 warehouse 入列,再继续出列
    private LinkedList<Integer> queue;

    public CQueue() {
    warehouse = new LinkedList<>();
    queue = new LinkedList<>();
    }

    public void appendTail(int value) {
    warehouse.push(value);
    }

    public int deleteHead() {
    // 如果 queue 不为空,则直接 pop 后返回
    if (!queue.isEmpty()) {
    return queue.pop();
    }
    // 如果 queue 为空,则先将 warehouse 的所有数据倒进来
    while (!warehouse.isEmpty()) {
    queue.push(warehouse.pop());
    }
    // 若队列中没有元素,deleteHead 操作返回 -1
    return queue.isEmpty() ? -1 : queue.pop();
    }
    }
    1 条回复    2020-02-15 02:13:30 +08:00
    Xs0ul
        1
    Xs0ul  
       2020-02-15 02:13:30 +08:00
    看到"先进后出"就发现不对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:17 · PVG 09:17 · LAX 17:17 · JFK 20:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.