SqStack.h

****************************************

#include <iostream>

using std::cout;

using std::endl;


template <class T>

class SqStack{

    public:

        SqStack(int init=50, int incr=10);

        bool StackEmpty() const;//判断栈是否为空

        T *GetTop() const;//得到栈顶指针

        void StackTraverse() const;


        bool Push(T &s);//入栈

        bool Pop(T &p);//出栈


        ~SqStack();

    private:

        int size; //允许的最大存储空间以元素为单位

        int increaseSize;//递增大小

        T *base; //存储空间基址

        int top; //栈顶指针,栈元素个数 

};

//构造函数

template <class T>

SqStack<T>::SqStack(int init, int incr){

    size = init; //初始大小

    base = new T[size];

    if(!base)exit(1);//存储分配失败

    increaseSize = incr; //顺序表递增大小

    top = 0;   //空栈中元素个数为0

}


template <class T>

bool SqStack<T>::StackEmpty() const{

    return top == 0;

}

//返回栈顶指针

template <class T>

T *SqStack<T>::GetTop() const{

    if( top == 0 )return NULL;//空栈

    return base+top-1;

}

template <class T>

void SqStack<T>::StackTraverse() const{

    if( top == 0 ){

        cout<<"遍历为空栈"<<endl;

    }else{

        //栈底到栈顶输出

        cout<<"栈底到栈顶: ";

        for(int i=0; i<top; i++){

            cout << *(base+i) << " ";

        }

        cout<<endl;

    }

}

//入栈

template <class T>

bool SqStack<T>::Push(T &s){

    if(top == size)return false; //栈已满,无法进行插入

    *(base + top) = s;//插入新的元素

    ++top;

    return true;

}

//出栈,返回删除元素的指针

template <class T>

bool SqStack<T>::Pop(T &p){

    if( top == 0 )return false;//空栈

    p = *(base+top-1);

    --top;

    return true;

}

//析构函数

template <class T>

SqStack<T>::~SqStack(){

    cout << "调用析构函数" << endl;

    delete base;

    base = NULL;

}

*****************************************


main.cc

**********************************************


#include "SqStack.h"


int main()

{

    SqStack<int> *s = new SqStack<int>;


    int a = 0;

    int b = 1;

    int c = 2;


    if(s->Push(a)){

        cout << "入栈成功!a"<<endl;

    }

    if(s->Push(b)){

        cout << "入栈成功!b"<<endl;

    }


    if( s->GetTop() != NULL ){

        cout << "栈顶元素: " << *(s->GetTop()) << endl;    

    }else{

        cout << "空栈了" <<endl;

    }


    s->StackTraverse();


    int p;

    if( s->Pop(p)){

        cout << "出栈成功!" << p << endl;

    }else{

        cout << "空栈" << endl;

    }


    if( s->GetTop() != NULL ){

        cout << "栈顶元素: " << *(s->GetTop()) << endl;    

    }else{

        cout << "栈顶元素:NULL" <<endl;

    }

    s->StackTraverse();

    return 0;

}


**********************************************