21xrx.com
2025-03-31 03:25:04 Monday
文章检索 我的文章 写文章
C++链表类模板
2023-06-24 06:16:44 深夜i     21     0
C++ 链表 类模板

C++是一种具有面向对象特性的编程语言,它支持类的定义和实例化。在C++中,链表是常用的数据结构之一,可以用来存储一组数据。C++链表类模板是针对链表结构编写的类模板,可以方便地创建和操作链表。

定义C++链表类模板时,需要定义一个链表节点类模板,以便在链表类中使用。链表节点类模板应包含两个成员变量:一个指向下一个节点的指针和一个存储数据的变量。然后定义链表类模板,它应该至少包含两个成员变量:一个指向链表头结点的指针和一个指向链表尾节点的指针。链表类模板应该实现一系列常用的方法来操作链表,如插入、删除、查找等。

下面是C++链表类模板的一个例子:

template <typename T>
class Node{
public:
  T data;
  Node<T>* next;
};
template <typename T>
class LinkedList{
public:
  LinkedList<T>()
    head = nullptr;
    tail = nullptr;
    size = 0;
  
  void addFirst(T data){
    Node<T>* node = new Node<T>();
    node->data = data;
    node->next = head;
    head = node;
    if(tail == nullptr)
      tail = head;
    
    size++;
  }
  void addLast(T data){
    Node<T>* node = new Node<T>();
    node->data = data;
    node->next = nullptr;
    if(tail == nullptr)
      head = node;
    
    else
      tail->next = node;
    
    tail = node;
    size++;
  }
  void removeFirst(){
    if(head == nullptr)
      return;
    
    Node<T>* node = head;
    head = head->next;
    if(head == nullptr)
      tail = nullptr;
    
    delete node;
    size--;
  }
  void removeLast(){
    if(tail == nullptr)
      return;
    
    if(head == tail)
      delete head;
      head = nullptr;
      tail = nullptr;
      size--;
      return;
    
    Node<T>* node = head;
    while(node->next != tail)
      node = node->next;
    
    delete tail;
    node->next = nullptr;
    tail = node;
    size--;
  }
  bool contains(T data){
    Node<T>* node = head;
    while(node != nullptr){
      if(node->data == data)
        return true;
      
      node = node->next;
    }
    return false;
  }
  int getSize()
    return size;
  
private:
  Node<T>* head;
  Node<T>* tail;
  int size;
};

在上述例子中,我们定义了一个链表节点类模板和一个链表类模板。链表类模板包含了常用的方法,如添加节点、删除节点和查找等。使用C++链表类模板,我们可以方便地创建和操作链表。

C++链表类模板还可以进行扩展,以满足更多的需求。例如,可以添加一个方法用于反转链表,或添加一个方法用于对链表进行排序。通过扩展C++链表类模板,我们可以自定义适合自己的链表操作。

  
  

评论区