来源:互联网 发布:李开复创新工场知乎 编辑:程序博客网 时间:2024/06/05 08:55

顺序栈

//Stack.htemplate<typename T,int Size=10>class Stack{public:    Stack();    ~Stack();    void push(const T &);    void pop();    T & top();    bool empty();    bool full();private:    T _arr[Size];    int _top;};
//Stack.cctemplate<typename T,int Size>Stack<T,Size>::Stack():_top(-1),_arr(new T[Size]){}template<typename T,int Size>Stack<T,Size>::~Stack(){    delete [] _arr;}template<typename T,int Size>void Stack<T,Size>::push(const T & elem){    if(full())    {        cout << "full stack" << endl;        return;    }    _arr[++_top] = elem;}template<typename T,int Size>void Stack<T,Size>::pop(){    if(empty())    {        cout << "empty stack" << endl;        return;    }    --_top;}template<typename T,int Size>T & Stack<T,Size>::top(){    return _arr[_top];}template<typename T,int Size>bool Stack<T,Size>::empty(){    return _top == -1;}template<typename T,int Size>bool Stack<T,Size>::full(){    return _top == Size-1;}

链栈

//Stack.htemplate<typename T>typedef struct StackNode{    T data;    struct StackNode * next;}StackNode, *LinkStackPtr;template<typename T>class Stack{public:    Stack();    void push(const T &);    void pop();    T & top();    bool empty();private:    LinkStackPtr _top;    int _length;};
//Stack.cctemplate<typename T>Stack<T>::Stack():_length(0),:_top(NULL){}template<typename T>void Stack<T>::push(const T & data){    LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));    q->data= data;    q->next = _top;    _top = q;    ++_length;}template<typename T>void Stack<T>::pop(){    if(empty())    {        cout << "empty stack" << endl;        return;    }    LinkStackPtr p = _top;    _top = p->next;    free(_top);    --_length;}template<typename T>T & Stack<T>::top(){    return _top->data;}template<typename T>bool Stack<T>::empty(){    return _length == 0;}

两栈共享空间

栈的应用:括号匹配,表达式求值,递归,进制转换,迷宫求解

原创粉丝点击