顺序栈类定义

// abstract data type for stack
template <class T>                 // 栈的元素类型为 T
class Stack
{
public:                            // 栈的运算集
    void clear();                  // 变为空栈
    bool push(const T item);       // item入栈,成功则返回真,否则返回假
    bool pop(T* item);             // 返回栈顶内容并弹出,成功返回真,否则返回假,
    bool getTop(T* item);          // 返回栈顶内容但不弹出成功返回真,否则返回假,
    bool isEmpty();                // 若栈已空返回真
    bool isFull();                 // 若栈已满返回真
};

template <class T>
class arrStack : public Stack<T>
{
private:                           // 栈的顺序存储
    int        mSize;              // 栈中最多可存放的元素个数
    T         *st;                 // 存放栈元素的数组
public:
    int        top;                // 栈顶位置,应小于mSize
public:                            // 栈的运算的顺序实现
    arrStack(int size)             // 创建一个顺序栈的实例
    {
        mSize = size;
        top = -1;
        st = new T[mSize];
    }
    arrStack()
    {
        top = -1;
    }
    ~arrStack()                        // 析构函数
    {
        delete [] st;
    }
    void clear()                       // 清空栈内容
    {
        top = -1;
    }
    bool push(const T item)            // 入栈操作的顺序实现
    {
        if (top == mSize-1)            // 栈已满
        {
            cout << "栈满溢出" << endl;
            return false;
        }
        else                           // 新元素入栈并修改栈顶指针
        {
            st[++top] = item;
            return true;
        }
    }
    bool pop(T* item)                  // 出栈的顺序实现
    {
        if (top == -1)                 // 栈为空
        {
            cout << "栈为空,不能出栈操作"<< endl;
            return false;
        }
        else
        {
            *item = st[top--];         // 返回栈顶元素并修改栈顶指针
            return true;
        }
    }
    bool getTop(T* item)               // 返回栈顶内容,但不弹出
    {
        if (top == -1)                 // 栈空
        {
            cout << " 栈为空,不能出栈操作"<< endl;
            return false;
        }
        else
        {
            *item = st[top];
            return true;
        }
    }
    bool isEmpty()
    {
        return (top == -1);
    }
    bool isFull()
    {
        return (top == mSize-1);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值