将链表更改为模板

Changing linked list into template

本文关键字:链表      更新时间:2023-10-16

我写了一个链表,里面存储了关于学生的信息。如何将其更改为模板,该模板可以具有存储整数或任何其他类型?我是否必须在链表类中重载方法,因为现在它们需要 6 个参数?我的意思是,现在在末尾插入的方法(对于学生数据(如下所示:

void insertAtEnd(int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);

如果我想存储整数,它将看起来像这样:

void insertAtEnd(int Data);

因此,如果我想使用模板来添加学生和例如整数,它应该看起来像这样吗?

template <class T>
  Class llist{
  void insertAtEnd(int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
  void insertAtEnd <T Data>;
}

以下是学生和链接列表类的实现:

class student {
public:
    int index;
    string name;
    string surname;
    int yearOfStudy;
    string fieldOfStudy;
    string specialty;
    student *next; //pointer to next item
    student();
};
student::student() {
next = 0;
}
class llist {
  public:
    void insertAtEnd (int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
    void insertAtBeginning (int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
    void insertAtGivenPosition(int a, string n, int index, string name, string surname, int yearOfStudy, string fieldOfStudy, string specialty);
    void findStudent(int index, string surname);
    void deleteLast ();
    void deleteSelected(int index, string surname);
    void deleteAll ();
    void displayList ();
    student *first; //pointer on first elem
    llist();
};

在你的问题的约束范围内,如果是我,我会把你的类结构改为:

class student {
public:
    int index;
    string name;
    string surname;
    int yearOfStudy;
    string fieldOfStudy;
    string specialty;
    //student *next; //pointer to next item
    student();
};
template <class T>
class node {
  T data;
  node<T> *next;
}
template <class T>
class llist {
public:
  void insertAtEnd (const T &data);
  .
  .
  .
private:
  node<T> *list;
}
看看

上面的伪代码,看看它如何/是否回答你的问题。

要存储的类型创建一个构造函数,然后只需发送一个参数。或者您可以为简单对象传入初始值设定项列表:-

push( {"student name", "age", major} );

从技术上讲,这只是一个参数,假设字段与"学生"结构/类中的顺序匹配,因此它们仅作为一件事传递。然后,您可以轻松地将列表重新编码为模板。或者,在 push 命令中调用构造函数:

push( Student("student name", "age", major) );

如果将数据视为单个对象,则更容易将列表转换为通用模板,因为它不再与数据紧密耦合。数据的格式是数据对象应该处理的详细信息。