链式栈的实现

来源:互联网 发布:流量软件哪个好 编辑:程序博客网 时间:2024/05/16 19:50

vs2013下编写的项目工程见 我的 github: https://github.com/excelentone/DataStruct

LinkStack.h

#include "StackNode.h"template<typename T> class LinkStack{public:    LinkStack() :_pTop(NULL)    {}    ~LinkStack()    {        MakeEmpty();    }public:    void MakeEmpty();              void Push(const T item);     T Pop();                     T GetTop() const;            void Print();                   bool IsEmpty() const    {        return _pTop == NULL;    }private:    StackNode<T> *_pTop;};template<typename T> void LinkStack<T>::MakeEmpty(){    StackNode<T> *pmove;    while (_pTop != NULL)    {        pmove = _pTop;        _pTop = _pTop->_pNext;        delete pmove;    }}template<typename T>void LinkStack<T>::Push(const T item){    _pTop = new StackNode<T>(item, _pTop);}template<typename T> T LinkStack<T>::GetTop() const{    if (IsEmpty())    {        cout << "There is no elements!" << endl;        exit(1);    }    return _pTop->_data;}template<typename T>T LinkStack<T>::Pop(){    if (IsEmpty())    {        cout << "There is no elements!" << endl;        exit(1);    }    StackNode<T> *pdel = _pTop;    _pTop = _pTop->_pNext;    T temp = pdel->_data;    delete pdel;    return temp;}template<typename T>void LinkStack<T>::Print(){    StackNode<T> *pmove = _pTop;    cout << "buttom";    while (pmove != NULL)    {        cout << "--->" << pmove->_data;        pmove = pmove->_pNext;    }    cout << "--->top" << endl << endl << endl;}

StackNode.h

template<typename T> class LinkStack;template<typename T> class StackNode{private:    friend class LinkStack < T > ;    StackNode(T dt, StackNode<T> *next = NULL)        :_data(dt)        , _pNext(next)    {}private:    T _data;    StackNode<T> *_pNext;};

test.cpp

#include <iostream>using namespace std;#include "LinkStack.h"void test(){    LinkStack<int> stack;    int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 };    for (int i = 0; i < 10; i++)    {        stack.Push(init[i]);    }    stack.Print();    cout << stack.Pop() << endl;    stack.Print();    cout << stack.GetTop() << endl;    stack.Print();    cout << stack.Pop() << endl;    stack.Print();    stack.MakeEmpty();    stack.Print();    //stack.Pop();}int main(){    test();    system("pause");    return 0;}
原创粉丝点击