9_8.h

来自「《C++语言程序设计(第2版)》配套例题程序,不可多得」· C头文件 代码 · 共 109 行

H
109
字号
//9_8.h
#ifndef STACK_CLASS
#define STACK_CLASS

#include <iostream.h>
#include <stdlib.h>

const int MaxStackSize = 50;  //栈的大小,即栈中元素的最大个数

//类的定义
template <class T>
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 <class T>
Stack<T>::Stack (void) : top(-1)  //栈顶初始化为-1
{}

// 将元素item压入栈
template <class T>
void Stack<T>::Push (const T& item)
{
    // 如果栈满,程序终止
    if (top == MaxStackSize-1)
    {
        cerr << "Stack overflow!" << endl;
        exit(1);
    }
    
    top++;    //栈顶指针增1
    stacklist[top] = item;    //将新元素压入栈顶
}

// 将栈顶元素弹出栈
template <class T>
T Stack<T>::Pop (void)
{
    T temp;

    // 如果栈空,程序终止
    if (top == -1)
    {
        cerr << "Attempt to pop an empty stack!" << endl;
        exit(1);
    }
    
    temp = stacklist[top];  //取出栈顶元素
    
    top--;  //栈顶指针自减
    return temp;  //返回栈顶元素
}

// 访问栈顶元素
template <class T>
T Stack<T>::Peek (void) const
{
    // 如果栈空,程序终止
    if (top == -1)
    {
        cerr << "Attempt to peek at an empty stack!" << endl;
        exit(1);
    }
    return stacklist[top];  //返回栈顶元素
}


// 测试是否栈空
template <class T>
int Stack<T>::StackEmpty(void) const
{
   return top == -1;  //如果栈空则返回TRUE,否则返回FALSE
}

// 测试是否栈满
template <class T>
int Stack<T>::StackFull(void) const
{
   return top == MaxStackSize-1;  //如果栈满则返回TRUE,否则返回FALSE 
}

// 清空栈
template <class T>
void Stack<T>::ClearStack(void) 
{
    top = -1;
}

#endif  // STACK_CLASS

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?