栈的定义
- 栈是一种特殊的线性表
- 栈只能在线性表一方进行操作
- 栈顶(top):允许操作的一方
- 栈底(Bottom):不允许操作的一方
栈的特性
- 后进显出先出
栈的操作
- 创建栈(Stack() )
- 销毁栈( ~Stack() )
- 清空栈( clear() )
- 进栈( push() )
- 出栈( pop() )
- 获取栈顶元素( top() )
- 获取栈的大小( size() )
栈的实现
template <typename T>
class Stack : public Object
{
public:
virtual void push(const T& e) = 0;
virtual void pop() = 0;
virtual T top() const = 0;
virtual void clear() = 0;
virtual int size() const = 0;
};
StaticStack的设计思路
- 类模板
- 使用原生数组作为栈存储空间
- 使用模板参数决定栈最大容量
template <typename T, int N>
class StaticStack : public Stack<T>
{
protected:
T m_space[N]; //栈存储空间,N为模板参数
int m_top; //栈顶标识
int m_size; //当前栈大小
public:
StaticStack()
{
}
~StaticStack()
{
}
}
StaticStack的代码实现
template <typename T, int N>
class StaticStack : public Stack<T>
{
protected:
T m_space[N];
int m_top;
int m_size;
public:
StaticStack()
{
m_top = -1;
m_size = 0;
}
int capacity() const
{
return N;
}
void push(const T& e)
{
}
void pop()
{
}
T top() const
{
if(m_size > 0)
{
return m_space[m_top];
}
else
{
THROW_EXCEPTION(InvalidOperationException, "No element in currunt stack....");
}
}
void clear()
{
m_top = -1;
m_size = 0;
}
int size() const
{
return m_size;
}
}
注:部分内容来自狄泰软件学院