栈
栈(stack)是限定仅在一端插入或删除的线性表。虽然这个限制减小了栈的灵活性,但也使得栈更有效且更容易实现。许多应用都只需要栈提供受限制的插入和删除操作形式,在这种情况下使用较简单的栈比使用一般的线性表更有效。
栈遵守“后进后出”(Last In First Out)的原则,这意味着栈存储和删除元素的顺序与元素到达的顺序相反。习惯上称栈的可访问元素为栈顶(top)元素,元素插入栈称为入栈(push),删除元素时成为出栈(pop)。
下面代码定义了栈ADT:
template <class Elem> class Stack
{
public:
// 清空栈内的元素
virtual void clear() = 0;
//入栈
virtual bool push(const Elem&) = 0;
//出栈
virtual bool pop(Elem&) = 0;
//获取栈顶元素的值
virtual bool topValue(Elem&) const = 0;
//获取栈的元素个数
virtual int length() const = 0;
};