源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C++ 模版双向链表的实现详解

  • 时间:2022-03-20 00:04 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++ 模版双向链表的实现详解
代码如下所示:
[u]复制代码[/u] 代码如下:
#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()  << " "; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部