栈(链式存储) C++模板实现
2014-04-09 11:10
435 查看
#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(); //打印栈中元素 }
相关文章推荐
- 队列(链式存储)C++模板实现
- 用C++模板实现线性表的链式存储的基本算法(数据结构C++版 北京科海)
- 二叉树的链式存储结构 C++代码实现
- C++模板实现链式队列
- 数据学习之线性表的链式存储C++实现
- 解析C++的线性表链式存储设计与相关的API实现
- 数据结构之栈(链式存储)——C++模板类实现
- C++中实现队列类链式存储与栈类链式存储的代码示例
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- <C/C++图>图的邻接表存储(C++模板实现)
- c++实现链式表的类模板
- 线性表链式存储C++实现
- 队列(顺序存储)C++模板实现
- c++模板类实现线性表链式存储
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- 线性表的链式存储实现c++
- 堆栈的链式存储的C++实现与测试
- 栈(顺序存储)C++模板实现
- C++_template_栈的链式存储及实现
- 数据结构学习之队列的链式存储的C++实现