数据结构学习日记(1)——栈模板的代码实现

栈的思想在于,着眼于解决刚刚碰到的问题,而将之前碰到的问题先保存下来,放到后面去解决。
比如经典的括号匹配问题就可以用栈来解决。

栈模板的代码实现 放在一个头文件中

#ifndef  MYSTACK_H

#define  MYSTACK_H

template <typename  T>
class MyStack
{
public:
    MyStack(int size);// 复杂对象的栈需要有默认构造函数
    ~MyStack();
    bool stackEmpty();
    bool stackFull();
    void clearStack();
    int stackLength();
    bool push(T elem);
    bool pop(T &elem);
    void stackTraverse(bool FromButtom);//遍历栈中所有元素
private:
    T *m_pBuffer; //栈空间指针
    int m_iSize;
    int m_iTop;
};
template <typename T>
MyStack<T>::MyStack(int size)
{
    m_iSize = size;
    m_pBuffer = new T[size]; // 复杂对象的栈需要有默认构造函数
    m_iTop = 0;
}

template <typename T>
MyStack<T>::~MyStack()
{
    delete[]m_pBuffer;
}

template <typename T>
bool MyStack<T>::stackEmpty()
{
    if (0 == m_iTop)
    {
        return true;
    }
    return false;
}

template <typename T>
void MyStack<T>::clearStack()
{
    m_iTop = 0;
}

template <typename T>
bool MyStack<T>::stackFull()
{
    if (m_iTop == m_iSize)
    {
        return true;
    }
    return false;
}

template <typename T>
int MyStack<T>::stackLength()
{
    return m_iTop;
}

template <typename T>
bool MyStack<T>::push(T elem)
{
    if (stackFull())
    {
        return false;
    }
    m_pBuffer[m_iTop] = elem;
    m_iTop++;
    return true;
}

template <typename T>
bool MyStack<T>::pop(T &elem)
{
    if (stackEmpty())
    {
        return false;
    }
    m_iTop--;
    elem = m_pBuffer[m_iTop];
    return true;
}

template <typename T>
void MyStack<T>::stackTraverse(bool FromButtom)

{
    if (FromButtom)
    {
        for (int i(0); i < m_iTop; ++i)
        {
            cout << m_pBuffer[i] << endl;
            // 类模板要使用通用的输出函数
        }
    }
    else
    {
        for (int i(m_iTop - 1); i >= 0; i--)
        {
            cout << m_pBuffer[i];
        }
    }
}

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值