顺序栈

栈的顺序实现方法

template<class T>
class stack
{
public:
    void Clear();   //清空栈
    bool Push(const T item);//栈的压入操作
    bool Pop(T & item);//读取栈顶元素的值并删除
    bool Top(T & item);//读取栈顶的元素色值不删除
    bool isEmpty();//判断栈是否为空
    bool isFull();//判断栈是否已满
};
template <class T>
class ArrayStack:public stack<T>
{
private:
    int maxSize;//栈的最大值
    int top;//栈顶的位置
    T *st;//存放栈的数组
public:
    ArrayStack(int size)//创建一个给定长度的栈
    {
        maxSize=size;
        top=-1;
        st=new T[maxSize];
    }
    ArrayStack()//创建一个为给定长度的栈
    {
        top=-1;
    }
    ~ArrayStack()//析构函数
    {
        delete[]st;
    }
    void Clear()//清空栈的内容
    {
        top=-1;
    }
    bool Push(const T item)//入栈操作
    {
        if(top==maxSize-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 Top(T &item)//读取栈顶元素,但不删除
    {
        if(top==-1)
            {
                cout<<"栈为空,无数据"<<endl;
        return false;
            }
         else
         {
             item=st[top];
             return true;
         }

    }
};


当入栈操作遇到栈满的情况时可用动态数组扩大栈的容量

template <class T>
bool ArrayStack::push(const T item)
{
    if(top==maxsize-1)
    {
        T*newSt=new T [maxsize*2];
        for(int i=0;i<maxsize;i++)
            newSt[i]=St[i];
        delete[]St;
        st=newSt;
        maxsize*=2;
        st[++top]=item;
        return true;
    }
    else 
    {
        st[++top]=item;
        return true;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值