集合栈

题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。

给定一个操作序列int[][2] ope(C++为vector&ltvector&ltint>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[],为完成所有操作后的SetOfStacks,顺序应为从下到上,默认初始的SetOfStacks为空。保证数据合法。

solution:

# -*- coding:utf-8 -*-
class SetOfStacks:
    def __init__(self):
        self.stack = []
        self.size = None

    def setOfStacks(self, ope, size):
        if not ope:
            return []
        self.size = size
        for op in ope:
            if op[0]==1:
                self.push(op[1])
            else:
                self.pop()
        return self.stack

    def push(self,value):
        if not self.stack:
            self.stack.append([])
        if len(self.stack[-1]) < self.size:
            self.stack[-1].append(value)
        else:
            self.stack.append([value])

    def pop(self):
        if self.stack and self.stack[-1]:
            top = self.stack[-1].pop()
            if not self.stack[-1]:
                self.stack.pop()
            return top
posted @ 2019-07-13 22:48  bernieloveslife  阅读(171)  评论(0编辑  收藏  举报