21xrx.com
2024-12-23 01:38:16 Monday
登录
文章检索 我的文章 写文章
C++链表类模板
2023-06-24 06:16:44 深夜i     --     --
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++链表类模板,我们可以自定义适合自己的链表操作。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复