面试14之请实现一种数据结构SetOfStacks
来源:互联网 发布:java两年经验工资多少 编辑:程序博客网 时间:2024/05/17 21:47
题目描述
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。
给定一个操作序列int[][2] ope(C++为vector<vector<int>>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][](C++为vector<vector<int>>),为完成所有操作后的SetOfStacks,顺序应为从下到上,默认初始的SetOfStacks为空。保证数据合法。
思路:插入删除的时候都在最后一个栈,当删除和插入的时候一定要检查是否满了或空了,
#include<iostream>using namespace std;#include<vector>//思路:我们用二维数组来模拟集合栈, ope是一个二维数组,如果每一行的第一个元素是0,表示这一行除了第一个元素都要插入到这个集合栈中去,如果这一行第一个元素是1,后面的元素我们不关心,并且删除集合栈中的最后一个元素,//但是要注意如果集合栈最后一个栈如果只有一个元素,得把这个栈从集合栈中删除。vector<vector<int> > setofstacks(vector<vector<int> > ope,int size) //size表示每一个集合栈的大小,也就是vector<int> 的容量。{vector<vector<int> > v;vector<int> temp;for(int i = 0; i < ope.size(); ++i) //{if(ope[i][0] == 1) //表示这要插入元素了。{if(!v.empty()&& v[v.size()-1].size() < size) //继续插入的时候应该检查上次插入的时候最后一个栈是否满了。{ temp = v[v.size()-1]; //拿出最后一个栈。v.pop_back();}for(int j = 1; j < ope[i].size(); ++j) //将这个数组每一行的元素读入。{temp.push_back(ope[i][j]);if(temp.size() == size){v.push_back(temp);temp.clear(); //清空,防止对下一次有影响。}}if(!temp.empty()) //如果最后temp中还有剩下元素,但是不够size大小时,这些元素也得插入到集合栈中去。{v.push_back(temp);temp.clear(); //清空。}}else //ope[i][0] == 2表示要删除最后一个元素了。{vector<int > ret = v[v.size()-1]; //最后一行。看最后一行删除后是不是为空,为空的话得将这一行删除。v.pop_back(); //删除最后一行ret.pop_back(); //删除最后一个元素if(!ret.empty()) //最后一行删除最后一个元素不空{v.push_back(ret); //再将这行写回去。}}}return v;}void test(){vector<vector<int> > v; //用二维数组模拟集合栈。vector<int > v1;v1.push_back(1) ;//表示要插入元素到集合栈中。for(int i = 3; i < 7; ++i){v1.push_back(i);}v.push_back(v1);v1.clear();v1.push_back(1); //表示要插入元素到集合栈中。for(int i = 10; i < 20; ++i){v1.push_back(i);}v.push_back(v1);v1.clear();v1.push_back(2); //表示要从集合栈中删除最后一个元素。v1.push_back(333);v.push_back(v1);vector<vector<int> > ret;ret = setofstacks(v,3); //集合栈中每一个栈3个元素。for(int i = 0; i < ret.size(); ++i){for(int j = 0; j < ret[i].size(); ++j){cout << ret[i][j] << " ";}cout <<endl;}}int main(){test();cout << "hello..." <<endl;return 0;}
0 0
- 面试14之请实现一种数据结构SetOfStacks
- 面试数据结构之---链表
- 面试准备之数据结构
- 面试宝典之数据结构
- java面试之HashMap的实现原理和底层数据结构
- [Python面试知识]数据结构之栈和队列实现
- 面试官之初体验,请考虑
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- 一种关系数据库实现的Tree数据结构
- 一种关系数据库实现的Tree数据结构
- 北航面试之数据结构试题
- 数据结构面试之五—二叉树的常见操作(递归实现部分)
- 程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 数据结构面试之五—二叉树的常见操作(递归实现部分
- 数据结构面试之五—二叉树的常见操作(递归实现部分)
- 【数据结构】 两个栈实现一个队列【面试】
- 【数据结构】 一个数组实现两个栈【面试】
- Windows终端颜色设置
- CSU 1903: Tricky数
- 51nod 1091 线段重叠
- 6.1.4.Drv/PWM(Character Device Drv)
- HDU---1829 A Bug's Life【并查集】
- 面试14之请实现一种数据结构SetOfStacks
- Js选择框脚本 移动操作select 标签中的 option 项的操作事项
- Linux——分区时出现This partition should be marked for use as an "EFI boot partition"
- 多频段融合方法——图像拼接
- Android与h5交互
- 【Eclipse】安装Eclipse Color Theme 插件
- struts2_json
- 实现水平居中和垂直居中的方法
- Service使用详解