一.题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。用vector来模拟。
二.题目分析
其实这道题目的题意也不难看懂,主要考察的是对vector的操作的熟练掌握。主要的操作如下:
1).判断第一个元素是什仫?如果是1则执行push操作,如果是2则执行pop操作,如果都不是则按错误处理;
2).push操作:如果当前栈不满则直接插入到当前的vector中,否则就要清空当前栈再进行插入操作。值得注意的是在清空之前要先保存当前栈;
3).pop操作:当前栈不为空则直接从当前栈删除,如果当前栈不为空的话从上一个栈删除;
三.代码实现
class SetOfStacks {
public:
vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
// write code here
vector<vector<int>> res;
vector<int> tmp;
for(int i=0;i<ope.size();i++) //遍历所有的集合栈
{
switch(ope[i][0])
{
case 1: //push操作
if(tmp.size() != size) //当前栈不满
tmp.push_back(ope[i][1]);
else{ //栈满
res.push_back(tmp);
tmp.clear();
tmp.push_back(ope[i][1]);
}
break;
case 2: //pop操作
if(!tmp.empty()) //当前栈不为空
tmp.pop_back();
else if(!res.empty()) //当前栈为空则从上一个栈pop元素
{
tmp=res[res.size()-1];
tmp.pop_back();
res.pop_back();
}
break;
default:
break;
}
}
if(!tmp.empty()){
res.push_back(tmp);
}
return res;
}
};
在这里就分享结束了~~~