模板双向链表
2015-12-16 17:12
260 查看
//双向链表 #include<iostream> #include<string> using namespace std; template<class T> struct LinkNode { LinkNode(const T& x) :_data(x) , _prev(NULL) , _next(NULL) { } T _data; LinkNode<T>* _prev; LinkNode<T>* _next; }; template<class T> class List { public: List() :_head(NULL) , _tail(NULL) { } void PushBack(const T& x) { if (_head == NULL) { _head = new LinkNode<T>(x); _tail = _head; } else { LinkNode<T>* tmp = new LinkNode<T>(x); _tail->_next = tmp; tmp->_prev = _tail; _tail = _tail->_next; } } void PopBack() { if (_head == NULL) { return; } else if (_head == _tail) { delete _head; _head = _tail = NULL; } else { LinkNode<T> *del = _tail; _tail->_prev->_next = NULL; _tail = _tail->_prev; delete del; } } void PushFront(const T& x) { if (_head == NULL) { _head = new LinkNode<T>(x); _tail = _head; } else { LinkNode<T>* tmp = new LinkNode<T>(x); tmp->_next = _head; _head->_prev = tmp; _head = tmp; } } void PopFront() { if (_head == NULL) { return; } else if (_head == _tail) { delete _head; _head = _tail = NULL; } else { LinkNode<T> *del = _head; _head->_next->_prev=NULL; _head = _head->_next; delete del; } } ~List() { while (_head) { Destory(); } } void Print() { LinkNode<T>* cur = _head; while (cur) { cout << (cur->_data) << "->"; cur = cur->_next; } cout << "NULL" << endl; } protected: void Destory() { if (_head == NULL) { return; } else if (_head == _tail) { delete _head; _head = _tail = NULL; } else { LinkNode<T>* del = _head; _head = _head->_next; _head->_prev =NULL; delete del; } } protected: LinkNode<T>* _head; LinkNode<T>* _tail; }; void Test1() { List<int> k; k.PushBack(1); k.PushBack(1); k.PushBack(1); k.PushBack(1); k.PushBack(1); k.Print(); k.PopBack(); k.PopBack(); k.PopBack(); k.PopBack(); k.PopBack(); k.PopBack(); k.PopBack(); } void Test2() { List<string> l1; l1.PushFront("abc"); l1.PushFront("eerf"); l1.Print(); l1.PopFront(); l1.PopFront(); l1.PopFront(); l1.PopFront(); } int main() { Test2(); system("pause"); return 0; }
相关文章推荐
- win8.1系统电脑如何开启远程登录服务?win8.1系统开启远程登录服务的设置教程
- 用eclipse进行系统开发资料整理
- Android开发笔记(二十)顶部导航栏ActionBar
- 迅为4412开发板平台-嵌入式开源平台
- ttttest
- iTunes store operation failed: You are not authoried to use this service
- 登入过程分析
- [Business Intelligence] BI & Decision Making
- 漫谈iOS RSA非对称加密与解密
- Android中线程同步之Mutex与Condtion的用法
- XML
- leetcode -- Number of Digit One -- 数学题,找规律
- 内核启动信息中NET: Registered protocol family 31
- 《转载》一位软件工程师6年的工作总结
- 大小端模式及字符集问题代码测试
- Android学习笔记——自定义TextView模仿验证码效果
- Mysql的索引类型和创建方法
- explain extend
- 四种方式实现SQLServer 分页查询
- linux umount 时出现device is busy 的处理方法--fuser