21xrx.com
2025-04-02 04:40:04 Wednesday
文章检索 我的文章 写文章
用类实现链表:C++中的最高成绩
2023-06-26 20:15:06 深夜i     14     0
链表 C++ 数据结构 实现

链表是一种比较常见的数据结构,在C++中使用类来实现链表是一种常见的方法。因为链表有很多种实现方式,我们这里以单向链表为例进行介绍。

单向链表是由一个首节点指针指向第一个节点,每个节点指向下一个节点的指针。在实现链表时,我们需要定义一个链表节点类Node,类中需要包含一个数据成员和指向下一个节点的指针。

例如,我们可以定义一个存储学生成绩的链表,其中每个节点表示一个学生的成绩。下面是节点类的定义:

class Node {
public:
  int score;
  Node* next;
  Node(int s)
    score = s;
    next = nullptr;
  
};

上面定义了一个存储成绩的数据成员score,以及一个指向下一个节点的指针next。在构造函数中,我们将指针next初始化为nullptr。

接下来我们需要构造链表类LinkedList。在这个类中,我们需要定义节点的插入和删除操作,以及查找链表中的最高成绩。

链表的插入操作需要把新节点插入到链表的头部。例如,在LinkedList类中我们可以定义如下的insert函数:

class LinkedList {
public:
  Node* head;
  LinkedList()
    head = nullptr;
  
  void insert(int score) {
    Node* new_node = new Node(score);
    new_node->next = head;
    head = new_node;
  }
};

上述代码定义了一个LinkedList类,其中数据成员head指向链表的头节点。在insert函数中,我们首先创建一个新节点new_node,把数据成员score初始化为插入的成绩,然后把新节点插入到链表的头部,最后把head指向新节点。

对于链表的删除操作,我们需要通过指针找到要删除的节点,然后修改指针指向即可。例如,在LinkedList类中我们可以定义如下的remove函数:

class LinkedList {
public:
  Node* head;
  LinkedList()
    head = nullptr;
  
  void remove(int score) {
    Node* p = head;
    Node* q = nullptr;
    while (p != nullptr && p->score != score)
      q = p;
      p = p->next;
    
    if (p != nullptr) {
      if (q == nullptr)
        head = p->next;
       else
        q->next = p->next;
      
      delete p;
    }
  }
};

上述代码定义了一个remove函数,首先使用指针p遍历整个链表,找到值等于score的节点。遍历的同时,我们需要记录指针q指向p的前一个节点,以方便修改指针。如果找到了指定节点,我们通过q和p修改指针指向,同时释放p所占用的内存。

最后我们需要实现查找链表中的最高成绩。这里我们可以定义一个max函数,遍历整个链表比较节点的score的值,返回最高值。例如,在LinkedList类中我们可以定义如下的max函数:

class LinkedList {
public:
  Node* head;
  LinkedList()
    head = nullptr;
  
  int max() {
    int max_score = -1;
    Node* p = head;
    while (p != nullptr) {
      if (p->score > max_score)
        max_score = p->score;
      
      p = p->next;
    }
    return max_score;
  }
};

上述代码定义了一个max函数,首先初始化最高成绩为-1,然后使用指针p遍历整个链表,比较节点的score值,并更新最高成绩的值,最后返回最高成绩。

本文通过链表的例子介绍了如何在C++中使用类来实现链表,包括节点的定义、插入和删除操作、以及查找最高成绩。链表是一种非常重要的数据结构,在实际应用中也有很多应用场景,比如操作系统内存管理和图形图像处理等。

  
  

评论区