21xrx.com
2025-04-17 05:53:02 Thursday
文章检索 我的文章 写文章
使用C++模板函数创建单链表
2023-07-05 04:54:03 深夜i     12     0
C++ 模板函数 单链表 创建

在C++编程中,模板函数是非常重要的一种技术,它可以使函数具有通用性,适用于多种不同类型的数据。这在创建链表时也是非常实用的,使用模板函数可以方便地创建单链表。

单链表是一种非常常见的数据结构,它由节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在C++中,创建单链表可以使用结构体来表示节点,如下所示:

template<typename T>
struct Node {
  T data;
  Node<T>* next;
};

这里使用了typename和模板类型T,表示这是一个通用的类型,可以适用于多种数据类型。结构体包含了数据域和指针域,next指针指向下一个节点。

接下来,需要创建一个链表类来管理节点的插入和删除操作。链表类也可以使用模板函数来实现通用性。下面是一个简单的链表类示例:

template<typename T>
class LinkedList {
public:
  // 构造函数
  LinkedList()
    head = NULL;
  
  // 插入节点到链表尾部
  void insert(T data) {
    Node<T> *node = new Node<T>;
    node->data = data;
    node->next = NULL;
    if (head == NULL)
      head = node;
     else {
      Node<T> *curr = head;
      while (curr->next != NULL)
        curr = curr->next;
      
      curr->next = node;
    }
  }
  // 在指定位置插入节点
  void insert(T data, int position) {
    Node<T> *node = new Node<T>;
    node->data = data;
    if (position == 0)
      node->next = head;
      head = node;
     else {
      Node<T> *curr = head;
      for (int i = 0; i < position - 1; i++)
        curr = curr->next;
      
      node->next = curr->next;
      curr->next = node;
    }
  }
  // 删除指定位置的节点
  void remove(int position) {
    if (position == 0) {
      Node<T> *node = head;
      head = head->next;
      delete node;
    } else {
      Node<T> *curr = head;
      for (int i = 0; i < position - 1; i++)
        curr = curr->next;
      
      Node<T> *node = curr->next;
      curr->next = node->next;
      delete node;
    }
  }
  // 获取链表长度
  int length() {
    int len = 0;
    Node<T> *curr = head;
    while (curr != NULL) {
      curr = curr->next;
      len++;
    }
    return len;
  }
  // 打印链表内容
  void print() {
    Node<T> *curr = head;
    while (curr != NULL)
      cout << curr->data << " ";
      curr = curr->next;
    
    cout << endl;
  }
private:
  Node<T> *head;
};

该链表类定义了节点的插入、删除、获取长度和打印输出等操作。其中头指针head指向链表的头节点。

为了使用链表类,需要在主函数中创建一个实例并添加、删除、修改节点。下面是一个使用单链表的示例代码:

int main() {
  // 创建链表实例
  LinkedList<int> list;
  // 添加节点到链表尾部
  list.insert(1);
  list.insert(2);
  list.insert(3);
  list.insert(4);
  list.print();
  // 在位置1插入节点
  list.insert(5, 1);
  list.print();
  // 删除位置2的节点
  list.remove(2);
  list.print();
  // 输出链表长度
  int len = list.length();
  cout << "length: " << len << endl;
  return 0;
}

使用C++模板函数创建单链表可以使代码更加通用和简洁,同时提高了程序的可维护性和扩展性。

  
  

评论区