//Describe how you could use a single array to implement three stacks.
#include <iostream>
using namespace std;
int stackSize = 900;
int indexUsed = 0;//已经存放的value的个数
int stackTop[3] = {-1, -1, -1};
StackNode * buffer = new StackNode[stackSize];
void push(int stack, int value)
{
if (indexUsed > stackSize)
{
cout<<"Stack is full"<<endl;
return;
}
int lastIndex = stackTop[stack];
stackTop[stack] = indexUsed;
indexUsed ++;
buffer[stackTop[stack]] = new StackNode(lastIndex, value);
}
int pop(int stack)
{
int lastIndex = stackTop[stack];
int value = buffer[stackTop[stack]].value;
stackTop[stack] = buffer[stackTop[stack]].previous;
indexUsed --;
return value;
}
int top(int stack)
{
return buffer[stackTop[stack]].value;
}
bool isEmpty(int stack)
{
return stackTop[stack] != -1;
}
struct StackNode{
int previous;
int value;
StackNode(int _pre, int _val)
{
previous = _pre;
value = _val;
}
};
这个代码只是实现了简单的插入和回收工作,但是当删除以后的空余空间无法再次使用,这是这个代码的缺点。