栈(链式存储) C++模板实现
#include <iostream> using namespace std; //栈结点类 template <typename T> class stackNode{ private: T data; //结点数据部分 stackNode<T> *next; //指向下一个结点 public: //构造函数,初始化成员变量 stackNode(T d = 0 , stackNode<T> * n=NULL){ data = d; next = n; } //设置成员变量data void setData(T d){ data = d; } //设置成员变量next void setNext(stackNode<T> * n){ next = n; } //返回成员变量data T getData() const{ return data; } //返回成员变量next stackNode<T> *getNext() const{ return next; } }; //栈类 template <typename T> class stackList{ private: stackNode<T> *top; //指向栈顶结点,也是链表的头指针 int num; //栈结点个数 public: //构造函数 stackList(){ top=NULL; num=0; } //析构函数,释放栈中所有结点,其实也就是释放整个链表 ~stackList(){ while(top){ stackNode<T> * p = top; top = top->getNext(); delete p; } } //将结点x压入栈 void push(stackNode<T> & x); //弹出栈顶结点 void pop(); //获得栈顶结点 stackNode<T> & getPeek()const; //栈是否为空 bool isEmpty() const; //返回栈中元素个数 int getNum() const{ return num; } //打印栈中元素 void printAll()const; }; //将结点x压入栈,实现部分 template <typename T> void stackList<T>::push(stackNode<T> & x){ stackNode<T> *p = top; top = &x; x.setNext(p); num++; } //弹出栈顶结点,实现部分 template <typename T> void stackList<T>::pop(){ if(isEmpty()){ cerr<<"栈为空,弹出失败"<<endl; exit(1); } stackNode<T> *p = top; top=top->getNext(); delete p; num--; } //获得栈顶结点,实现部分 template <typename T> stackNode<T> & stackList<T>::getPeek() const{ if(isEmpty()){ cerr<<"栈为空"<<endl; exit(1); } return *top; } //栈是否为空,实现部分 template <typename T> bool stackList<T>::isEmpty() const{ return top==NULL; } //打印栈中元素,实现部分 template <typename T> void stackList<T>::printAll() const{ stackNode<T> *p = top; while(p){ cout<<p->getData()<<endl; p=p->getNext(); } } void main(){ stackNode<int> *p1 = new stackNode<int>(1); //创建第一个结点,值为1 stackNode<int> *p2 = new stackNode<int>(2); //创建第一个结点,值为2 stackNode<int> *p3 = new stackNode<int>(3); //创建第一个结点,值为3 stackNode<int> *p4 = new stackNode<int>(4); //创建第一个结点,值为4 stackNode<int> *p5 = new stackNode<int>(5); //创建第一个结点,值为5 stackList<int> a; //创建栈 a.push(*p1); //压入第一个结点 a.push(*p2); //压入第二个结点 a.push(*p3); //压入第三个结点 a.push(*p4); //压入第四个结点 a.push(*p5); //压入第五个结点 a.pop(); //弹出栈顶元素 a.printAll(); //打印栈中元素 }
posted on 2014-04-09 11:10 xiaogua918 阅读(291) 评论(0) 编辑 收藏 举报