C++ 集合栈

/**

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

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

当涉及到二维数组时,可以使用一维数组临时变量,
一维数组的语义是:二维数组中的最后一行

涉及到多维数组时,需要将一维数组作为单元添加到多维数组中
而不能将一个个元素作为单元添加到多维数组中

**/

#include<iostream>
using namespace std;
#include<vector>

class SetOfStacks {
public:
    vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
        // write code here
        vector<vector<int> > result;
        vector<int> temp_line;
        for(unsigned int i=0;i<ope.size();i++){
            if(ope[i][0]==1){
                // 说明为push操作
                if(temp_line.size()==size){
                    result.push_back(temp_line);
                    temp_line.clear();// 清空一维向量
                    temp_line.push_back(ope[i][1]);
                }
                else{
                    temp_line.push_back(ope[i][1]);
                }
            }
            else{
                if(temp_line.size()==0){
                    // 说明当前的一维向量是空
                    temp_line=result[result.size()-1];
                    result.pop_back();
                    temp_line.pop_back();
                }
                else{
                    temp_line.pop_back();
                }
            }
        }
        if(temp_line.size()>0){
            result.push_back(temp_line);
        }
        return result;
    }
};

int main(){
    vector<vector<int> > ope,output;

    int a1[]={1,2};
    int a2[]={1,6};
    int a3[]={1,8};
    int a4[]={2,2};

    vector<int> line1(a1,a1+2);
    vector<int> line2(a2,a2+2);
    vector<int> line3(a3,a3+2);
    vector<int> line4(a4,a4+2);

    ope.push_back(line1);
    ope.push_back(line2);
    ope.push_back(line3);
    ope.push_back(line4);

    // cout<<"hahaha"<<ope[0].size()<<endl;

    SetOfStacks s;
    output=s.setOfStacks(ope,2);

    cout<<output.size()<<"length of output in dimension 1"<<endl;

    cout<<output[0].size()<<"length of output in dimension 2"<<endl;


    for(unsigned int i=0;i<output.size();i++){
        for(unsigned int j=0;j<output[0].size();j++){
            cout<<output[i][j]<<endl;
        }
    };

    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值