如何在C++中创建列表?

hmae6n7t  于 2023-05-02  发布在  其他
关注(0)|答案(8)|浏览(249)

如何在C++中创建列表?我需要它来创建一个链表。我该怎么做呢?有没有好的教程或例子我可以遵循?

9o685dep

9o685dep1#

我认为你知道C已经有一个链表类,你想实现你自己的,因为你想学习如何去做。
首先,阅读Why do we use arrays instead of other data structures?,它包含了一个很好的基本数据结构答案。然后考虑如何在C
中建模它们:

struct Node {
    int data;
    Node * next;
};

基本上,这就是实现列表所需的全部内容!(非常简单的一个)。然而,它没有抽象,你必须链接每手的项目:

Node a={1}, b={20, &a}, c={35, &b} d={42, &c};

现在,你已经有了一个节点的链表,所有节点都在堆栈上分配:

d -> c -> b -> a
42   35   20   1

下一步是编写一个指向起始节点的 Package 器类List,并允许根据需要添加节点,跟踪列表的头部(以下是非常简化的):

class List {
    struct Node {
        int data;
        Node * next;
    };

    Node * head;

public:
    List() {
        head = NULL;
    }

    ~List() {
        while(head != NULL) {
            Node * n = head->next;
            delete head;
            head = n;
        }
    }

    void add(int value) {
        Node * n = new Node;
        n->data = value;
        n->next = head;
        head = n;
    }

    // ...
};

下一步是使List成为一个模板,这样您就可以填充其他值(不仅仅是整数)。
如果您熟悉智能指针,则可以将使用的原始指针替换为智能指针。我经常发现人们向初学者推荐聪明的指针。但在我看来,你应该首先理解为什么你需要智能指针,然后使用它们。但这要求您首先了解原始指针。否则,你使用一些神奇的工具,而不知道为什么你需要它。

guz6ccqo

guz6ccqo2#

你真的应该使用standard List class。当然,除非这是一个家庭作业问题,或者你想知道STL是如何实现列表的。
你会在google上找到很多简单的教程,比如this one。如果你想知道链表是如何“在引擎盖下”工作的,试着搜索C列表示例/教程,而不是C++。

gywdnpxw

gywdnpxw3#

如果你要使用std::list,你需要传递一个类型参数:

list<int> intList;  
list<int>* intListPtr = new list<int>;

如果你想知道列表是如何工作的,我建议你在谷歌上搜索一些C/C教程来了解这个主题。下一步是学习足够的C来创建一个列表类,最后是一个列表模板类。
如果你有更多的问题,请回到这里。

bxjv4tth

bxjv4tth4#

为什么要重新发明轮子。只需要使用STL列表容器。

#include <list>

// in some function, you now do...
std::list<int> mylist; // integer list

More information...

dluptydi

dluptydi5#

我猜这是一个家庭作业问题,所以你可能想去here。它有一个解释链表的教程,给出了很好的伪代码,也有一个C++实现,你可以下载。
我建议在盲目地使用实现之前阅读解释并理解伪代码。如果你想继续学习计算机科学,这是一个你真的应该深入了解的主题。

4uqofj5v

4uqofj5v7#

使用C++模板创建列表

template <class T> struct Node 
{
    T data;
    Node * next;
};
    
template <class T> class List 
{
    Node<T> *head,*tail;
        
    public: 
        void push(T const&);  // push element 
        void pop();           // pop element 
        bool empty()          // return true if empty. 
};

然后你可以这样写代码:

List<MyClass>;

类型T在运行时不是动态的。它只适用于编译时。
完整的示例click here
对于C++模板教程click here

j1dl9f46

j1dl9f468#

我们已经是21世纪了!!不要尝试实现已经存在的数据结构。尝试使用现有的数据结构。
使用STL或Boost库

相关问题