- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C++ 模版双向链表的实现详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
代码如下所示:
复制代码 代码如下
#include <iostream> template <typename T> class double_linked { struct node { T data; node* prev; node* next; node(T t, node* p, node* n) : data(t), prev(p), next(n) {} }; node* head; node* tail; public: double_linked() : head( NULL ), tail ( NULL ) {} template<int N> double_linked( T (&arr) [N]) : head( NULL ), tail ( NULL ) { for( int i(0); i != N; ++i) push_back(arr[i]); } bool empty() const { return ( !head || !tail ); } operator bool() const { return !empty(); } void push_back(T); void push_front(T); T pop_back(); T pop_front(); ~double_linked() { while(head) { node* temp(head); head=head->next; delete temp; } } }; template <typename T> void double_linked<T>::push_back(T data) { tail = new node(data, tail, NULL); if( tail->prev ) tail->prev->next = tail; if( empty() ) head = tail; } template <typename T> void double_linked<T>::push_front(T data) { head = new node(data, NULL, head); if( head->next ) head->next->prev = head; if( empty() ) tail = head; } template<typename T> T double_linked<T>::pop_back() { if( empty() ) throw("double_linked : list empty"); node* temp(tail); T data( tail->data ); tail = tail->prev ; if( tail ) tail->next = NULL; else head = NULL ; delete temp; return data; } template<typename T> T double_linked<T>::pop_front() { if( empty() ) throw("double_linked : list empty"); node* temp(head); T data( head->data ); head = head->next ; if( head ) head->prev = NULL; else tail = NULL; delete temp; return data; } int main() { int arr[] = { 4, 6, 8, 32, 19 } ; double_linked<int> dlist ( arr ); dlist.push_back( 11 ); dlist.push_front( 100 ); while( dlist ) std::cout << dlist.pop_back() << " "; } 。
最后此篇关于C++ 模版双向链表的实现详解的文章就讲到这里了,如果你想了解更多关于C++ 模版双向链表的实现详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!