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

时间:2015-10-28 02:04:02

标签: c++ pointers inheritance linked-list

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

f=0

这假设(T info)是指向从:

创建的类对象的指针
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;

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

#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;
}

LL是我在main.cpp中创建的链接列表,insert是我链接列表的函数。

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

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

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 ++编译器,因此语法可能需要更正。

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