ABStack 链表实现的stack
来源:互联网 发布:python开发入门 编辑:程序博客网 时间:2024/06/01 21:23
想着挺简单的,也就是push,pop,top,size,empty等几个操作,但是真正写起来才发现,自己C++的知识忘了好多。template更是一窍不通。对着一堆错误改了好久好久才终于编译成功。分享一下自己的代码,希望对后学者有所帮助。
/** * @file ABStack.cpp * @Brief stack implemented by Brian * @author Brian * @version 1.0 * @date 2013-08-28 */#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <memory.h>using namespace std;template<typename T>struct ABNode{ ABNode<T>* next; T data; ABNode(T v):data(v),next(NULL){} };template<typename T>class ABStack{ protected: public: ABStack(){init();} ~ABStack(); void push (const T& val); void pop(); T top(); bool empty(); size_t size(); void init(); private: ABNode<T>* head; size_t count;};template<typename T>ABStack<T>:: ~ABStack(){ ABNode<T>* p = head; while(p){ ABNode<T>* tmp = p; p = p->next; delete tmp; }}template<typename T>void ABStack<T>::init(){ this->head = new ABNode<T>(-1); this->head->next = NULL; this->count = 0;}template<typename T>void ABStack<T>::push(const T& val){ ABNode<T>* node = new ABNode<T>(val); node->next = head->next; node->data = val; head->next = node; count++;}template<typename T>void ABStack<T>::pop(){ if(empty()) return; else{ ABNode<T>* tmp = head->next; head->next = head->next->next; delete tmp; } count--;}template<typename T>T ABStack<T>::top(){ if(empty()){ throw "Stack is empty!"; }else{ return head->next->data; }}template<typename T>bool ABStack<T>::empty(){ return count==0;}template<typename T>size_t ABStack<T>::size(){ return count;}int main(){ try{ ABStack<int> istack; cout<<istack.empty()<<endl; istack.push(1); istack.push(2); cout<<"size: "<<istack.size()<<endl; cout<<"top: "<<istack.top()<<endl; istack.pop(); cout<<"top: "<<istack.top()<<endl; istack.pop(); cout<<istack.empty()<<endl; }catch(const char* s){ cout<<s<<endl; } return 0;}
template需要注意如果函数实现放外面的话必须前面加 classname<T>:: 上面还得重复加template<typename T>,如果不分.h和.cpp的话还不如直接在里面实现。当然,最好还是遵循接口与实现分离的原则。
- ABStack 链表实现的stack
- 链表实现的Stack
- Stack的链表实现
- 链表实现的Stack类
- java链表实现Stack以及后缀表达式的实现
- 栈 (Stack) 的C++实现(链表方法)
- stack 底层简单实现 链表实现
- stack容器的实现
- stack的数组实现
- stack的简单实现
- Stack 的 java 实现
- stack的实现
- 栈:stack的实现
- C++的Stack实现
- stack的单链表实现
- STL stack 的实现
- Stack的实现
- Stack 的C++实现
- 总结系列_1(opencv需常用的小工程,续...)
- DELPHI SOCKET 通信编程要点小结
- 基于RMAN实现坏块介质恢复(blockrecover)
- Macbook pro连接无线路由不稳定掉线的解决办法
- Linux下chkconfig命令详解
- ABStack 链表实现的stack
- windows 增加计划任务
- C/C++面试感受和经验以及面试题收藏(转)
- 同步通信 VS 异步通信
- mac与windows共享设置
- ubuntu 安装google输入法
- django-admin.py startproject mysite命令失效的解决方法
- SQL基本语法 case when 应用
- [ios] itunes connect注意事项两则