First. Problem’s Description

Second. Problem’s Solution

I don’t think there is any point that’s difficult to solve.

Three. Code For Solution

class TripleInOne {
   
private:
    int *Data;
    int sSize = -1;
    unsigned int s_begin[3];
    unsigned int s_cur[3] = {
   0, 0, 0};   //how many elem in stack
public:
    TripleInOne(int stackSize) {
   
        auto tmp = new int[stackSize * 3]{
   };
        if(!tmp)    exit(0);
        Data = tmp;
        sSize = stackSize;
        s_begin[0] = 0;
        s_begin[1] = stackSize;
        s_begin[2] = 2 * stackSize;
    }
    
    void push(int stackNum, int value) {
   
        if(s_cur[stackNum] < sSize)    Data[s_begin[stackNum] + s_cur[stackNum]++] = value;
    }
    
    int pop(int stackNum) {
   
        return !s_cur[stackNum] ? -1 : Data[s_begin[stackNum] + --s_cur[stackNum]];
    }
    
    int peek(int stackNum) {
   
        return !s_cur[stackNum] ? -1 : Data[s_begin[stackNum] + s_cur[stackNum] - 1];
    }
    
    bool isEmpty(int stackNum) {
   
        return s_cur[stackNum] == 0;
    }
};

Four. Processing Results