21xrx.com
2024-12-22 22:28:40 Sunday
登录
文章检索 我的文章 写文章
使用C++模板函数创建单链表
2023-07-05 04:54:03 深夜i     --     --
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++模板函数创建单链表可以使代码更加通用和简洁,同时提高了程序的可维护性和扩展性。

  
  

评论区

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