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;
}
};