清华大学出版社出版的c++程序设计课本
源代码在线查看: 9-8.h
//9-8.h
#ifndef STACK_CLASS
#define STACK_CLASS
#include
#include
const int MaxStackSize = 50; //栈的大小,即栈中元素的最大个数
//类的定义
template
class Stack
{
private:
T stacklist[MaxStackSize]; //数组,用于存放栈的元素
int top; //栈顶位置(数组下标)
public:
Stack (void); // 构造函数,初始化栈
// 栈更新操作
void Push (const T& item); //将元素item压入栈
T Pop (void); //将栈顶元素弹出栈
void ClearStack(void); //将栈清空
// 访问栈顶元素
T Peek (void) const;
// 测试栈的状态
int StackEmpty(void) const;
int StackFull(void) const; // array implementation
};
//类的实现
// 构造函数
template
Stack::Stack (void) : top(-1) //栈顶初始化为-1
{}
// 将元素item压入栈
template
void Stack::Push (const T& item)
{
// 如果栈满,程序终止
if (top == MaxStackSize-1)
{
cerr exit(1);
}
top++; //栈顶指针增1
stacklist[top] = item; //将新元素压入栈顶
}
// 将栈顶元素弹出栈
template
T Stack::Pop (void)
{
T temp;
// 如果栈空,程序终止
if (top == -1)
{
cerr exit(1);
}
temp = stacklist[top]; //取出栈顶元素
top--; //栈顶指针自减
return temp; //返回栈顶元素
}
// 访问栈顶元素
template
T Stack::Peek (void) const
{
// 如果栈空,程序终止
if (top == -1)
{
cerr exit(1);
}
return stacklist[top]; //返回栈顶元素
}
// 测试是否栈空
template
int Stack::StackEmpty(void) const
{
return top == -1; //如果栈空则返回TRUE,否则返回FALSE
}
// 测试是否栈满
template
int Stack::StackFull(void) const
{
return top == MaxStackSize-1; //如果栈满则返回TRUE,否则返回FALSE
}
// 清空栈
template
void Stack::ClearStack(void)
{
top = -1;
}
#endif // STACK_CLASS