1.问题描述:
试在一个长度为n的数组中实现两个栈,使得二者在元素的总数目为n之前都不会溢出,并且保证push和pop操作的时间代价为O(1)。
2.完整代码如下:
/* 77.6 - C++ - 在一个长度为n的数组中实现两个栈、且共享存储区[0,max_size-1] */
/* 构栈方法 - 栈顶相向,迎面增长 */
#include <iostream>
using namespace std;
//混合顺序栈的类ArrStack
template <typename T>
class ArrStack
{
private:
int top1, top2, MaxSize; //top1 - 栈1的栈顶指针,top2 - 栈2的栈顶指针,MaxSize - 数组最大容量
T *st; //存放类型为T的栈元素数组
public:
ArrStack(int size); //构造函数 - 为栈预先分配空间,初始化栈顶指针
~ArrStack(); //析构函数
bool push(const int i, const T item); //入栈
bool pop(const int i, T &item); //出栈
};
//构造函数
template <typename T>
ArrStack<T>::ArrStack(int size)
{
MaxSize = size;
st = new T[MaxSize]; //给混合栈预先分配存储空间
top1 = -1; //初始化栈1指针
top2 = MaxSize; //初始化