是否可以创建一个可以保存指针而不是整数或字符串的链表?

Posted

技术标签:

【中文标题】是否可以创建一个可以保存指针而不是整数或字符串的链表?【英文标题】:Is it possible to create a linked list that can hold pointers instead of integers or string? 【发布时间】:2015-10-28 02:04:01 【问题描述】:

我是编程新手,但我对链表有疑问。我正在创建一个双链表,我希望我的节点存储指针而不仅仅是字符串或整数。这样的代码可以工作吗?

template <typename T>
class LinkedList

private:
    struct Node 
        string name;
        int age;
        int location;
        Node* next;
        Node* previous;
        Node(T info) name = info->getName(); age = info->getAge; location = info->getLocation; next = NULL; previous = NULL; 


    ;
    Node* head = NULL;
    Node* tail = NULL;

这是假设 (T info) 是一个指向已从以下位置创建的类对象的指针:

#include "Person.h"


Person::Person(string name, int age, int location)

    this->name = name;
    this->age = age;
    this->location = location;



Person::~Person()



string Person::getName()

    return name;


int Person::getAge()

    return age;


int Person::getLocation()

    return location;

我希望能够从我的人员类中创建一个人员,然后将该人员(姓名、年龄和位置)存储在我的链接列表中:

Person* newPerson = new Person(name, age, location);
LL.insert(newPerson);

LL 是我在 main.cpp 中创建的一个链表,而 insert 是我的链表的一个函数。

也许这不是最好的方法,但我可以这样做吗?

【问题讨论】:

是的。它是你的清单……你有什么错误吗?还是这更像是一个设计问题? 我建议学习使用 STL。你有理由要重新发明***吗?以list 为例 如前所述,查看std::list 以查看适用于任何类型的链表容器的接口。但是,您应该知道您应该更喜欢 std::vector 而不是其他容器。在现代系统中,内存延迟层次结构使向量比列表更有效。 【参考方案1】:

链表是一种数据结构,它定义了多项数据之间的某种关系。

如您所述,该数据通常是字符串或整数。但它可以是任何东西。

您可以将链接列表视为书架。你通常把书放在书架上。但你也可以把鞋子放在那里,鞋子会像书一样放在书架上。

【讨论】:

【参考方案2】:

是的,您可以保存指向其他对象的指针。在你的情况下,一个人对象。

你需要一个新的类或结构,然后创建一个指向它的指针。

class LinkedList

    private:
    struct Node 
        Person *person;
        Node *next;
    ;
    Node* head = NULL;
    Node* tail = NULL;
;

您也可以使用 void 指针的链接列表

class LinkedList

    private:
    struct Node 
        void *data;
        Node *next;
    ;
    Node* head = NULL;
    Node* tail = NULL;
;

使用模板类型可以确保内容都是相同的类型。

template <typename T>
class LinkedList

       private:
       struct Node 
          T    *data; 
          Node *next;
       ;
    Node* head = NULL;
    Node* tail = NULL;
;

我目前无法访问 C++ 编译器,因此可能需要更正语法。

顺便说一句,使用尾部成员似乎意味着您正在尝试使用双向链表。如果您不需要在列表中倒退,则没有必要。

【讨论】:

您可以随时将您的代码复制/粘贴到gcc.godbolt.org 中(它将被编译为 c++,而不是 c。AFAIK,godbolt 没有适当的 C 选项。) @PeterCordes 感谢您的提示。不知道。

以上是关于是否可以创建一个可以保存指针而不是整数或字符串的链表?的主要内容,如果未能解决你的问题,请参考以下文章

我可以通过类型特征确定指针是不是为整数类型吗?

复制带随机指针的链表

138. 复制带随机指针的链表

LeetCode-链表复制带随机指针的链表

c中的链表返回负数而不是添加节点

为啥端口是字符串而不是整数?