顺序栈

来源:互联网 发布:浏览器兼容性测试软件 编辑:程序博客网 时间:2024/05/02 08:17

栈的顺序实现方法

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;    }}



0 0
原创粉丝点击