链栈
2016-08-11 17:55
357 查看
//链栈的实现 #include <assert.h> template <typename VAL_TYPE> class Stack { private: struct Node { VAL_TYPE data; Node* next; }; Node* top; //栈顶指针 Node* bottom; //栈底指针 int size; public: Stack(); virtual ~Stack(); void push(const VAL_TYPE& val); void pop(); void get_top(VAL_TYPE& val) const; void clear(); bool empty() const; int length() const; void traverse(int(*visit)(VAL_TYPE&)); }; template <typename VAL_TYPE> Stack<VAL_TYPE>::Stack() { top=bottom=NULL; size=0; } template <typename VAL_TYPE> Stack<VAL_TYPE>::~Stack() { Node* p=NULL; while(top!=NULL) { p=top->next; delete top; top=p; } bottom=NULL; size=0; } template <typename VAL_TYPE> void Stack<VAL_TYPE>::clear() { ~Stack(); } template <typename VAL_TYPE> void Stack<VAL_TYPE>::push(const VAL_TYPE& val) { Node* new_node=new Node; new_node->data=val; new_node->next=top; top=new_node; if(bottom==NULL) bottom=top; size++; } template <typename VAL_TYPE> void Stack<VAL_TYPE>::pop() { assert(top!=NULL); Node* p=top->next; delete top; top=p; size--; } template <typename VAL_TYPE> void Stack<VAL_TYPE>::get_top(VAL_TYPE& val) const { assert(top!=NULL); val=top->data; } template <typename VAL_TYPE> bool Stack<VAL_TYPE>::empty() const { return !size; } template <typename VAL_TYPE> int Stack<VAL_TYPE>::length() const { return size; } template <typename VAL_TYPE> void Stack<VAL_TYPE>::traverse(int(*visit)(VAL_TYPE& val)) { Node* p=top; while(p!=NULL) { if(!visit(p->data)) break; p=p->next; } }
相关文章推荐
- 【51Nod】1021 - 石子归并(区间dp & 四边形不等式优化)
- 数组-在Shell脚本中的基本使用介绍
- linux配置使用外部smtp发送邮件
- HDU 5831 Rikka with Parenthesis II (贪心) -2016杭电多校联合第8场
- Spring面试题集
- 顺序栈
- VC编程操作word2010生成表格
- PHP学习笔记总结 转
- AOS 自动生成代码(二) Dao生成
- Java 中的Unicode与PrintWriter
- 日常一水
- 链表
- C++对象的动态建立和释放
- Java中Enumeration接口讲解
- 前端人应该知道的排序知识
- 深度学习主机环境配置: Ubuntu16.04+GeForce GTX 1080+TensorFlow
- Android studio清除项目中无用的资源
- VC编程操作word2010生成表格
- .NET框架
- spring源码学习之【准备】jdk动态代理例子