集合栈
题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为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