it-swarm.com.de

Wie kann ich eine Liste in C++ erstellen?

Wie kann ich eine Liste in C++ erstellen? Ich brauche es, um eine verknüpfte Liste zu erstellen. Wie würde ich das machen? Gibt es gute Tutorials oder Beispiele, denen ich folgen könnte?

28
jessemiel

Ich nehme an, Sie wissen, dass C++ bereits über eine verknüpfte Listenklasse verfügt, und Sie möchten Ihre eigene implementieren, weil Sie lernen möchten, wie dies geschieht. 

Zuerst lesen Warum verwenden wir Arrays anstelle von anderen Datenstrukturen? , das eine gute Antwort auf grundlegende Datenstrukturen enthält. Dann überlegen Sie, wie Sie sie in C++ modellieren können:

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

Das ist alles, was Sie brauchen, um eine Liste zu implementieren! (ein sehr einfaches). Es hat jedoch keine Abstraktionen, Sie müssen die Elemente per Hand verknüpfen:

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

Jetzt haben Sie eine verknüpfte Liste von Knoten, die alle auf dem Stack zugewiesen sind:

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

Der nächste Schritt ist das Schreiben einer Wrapper-Klasse List, die auf den Startknoten verweist und bei Bedarf Knoten hinzufügen kann, wobei der Kopf der Liste verfolgt wird (das Folgende ist sehr vereinfacht):

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

    // ...
};

Der nächste Schritt besteht darin, aus der Liste eine Vorlage zu machen, damit Sie andere Werte (nicht nur ganze Zahlen) füllen können. 

Wenn Sie mit intelligenten Zeigern vertraut sind, können Sie die verwendeten Rohzeiger durch intelligente Zeiger ersetzen. Oft finde ich, dass Leute intelligente Starter empfehlen. Aber meiner Meinung nach sollten Sie zuerst verstehen, warum Sie intelligente Zeiger benötigen, und sie dann verwenden. Dies setzt jedoch voraus, dass Sie zunächst rohe Hinweise verstehen müssen. Ansonsten verwenden Sie ein magisches Werkzeug, ohne zu wissen, warum Sie es brauchen. 

Sie sollten wirklich die standard List-Klasse verwenden. Es sei denn, dies ist natürlich eine Frage der Hausaufgaben oder Sie möchten wissen, wie Listen von STL implementiert werden.

Es gibt viele einfache Tutorials über Google, wie hier . Wenn Sie wissen möchten, wie verknüpfte Listen "unter der Haube" funktionieren, suchen Sie nach C-Listen-Beispielen/Tutorials anstatt nach C++.

22
Roddy

Wenn Sie std::list verwenden, müssen Sie einen Typparameter übergeben:

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

Wenn Sie wissen möchten, wie Listen funktionieren, empfehle ich Ihnen, einige C/C++ - Tutorials zu googeln, um sich mit diesem Thema vertraut zu machen. Der nächste Schritt wäre dann, genug C++ zu lernen, um eine Listenklasse und schließlich eine Listenvorlagenklasse zu erstellen.

Wenn Sie weitere Fragen haben, wenden Sie sich bitte hier an.

14
karx11erx

Warum das Rad neu erfinden? Verwenden Sie einfach den STL-Listencontainer.

#include <list>

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

Mehr Informationen...

7
mepcotterell

Ich vermute, dies ist eine Frage der Hausaufgaben, also möchten Sie wahrscheinlich hier gehen. Es enthält ein Tutorial, das verknüpfte Listen erläutert, einen guten Pseudocode und eine C++ - Implementierung zum Herunterladen.

Ich würde empfehlen, die Erklärung durchzulesen und den Pseudocode zu verstehen, bevor Sie die Implementierung blind nutzen. Dies ist ein Thema, das Sie wirklich verstehen sollten, wenn Sie mit CS fortfahren möchten.

1
brien
0
plan9assembler

Liste erstellen mit C++ - Vorlagen

d.h.

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

Dann können Sie Code schreiben wie:

List<MyClass>;

Der Typ T ist in der Laufzeit nicht dynamisch. Er gilt nur für die Kompilierzeit.

Für ein vollständiges Beispiel klicken Sie auf .

Für das C++ - Vorlagen-Tutorial klicken Sie auf hören

0
Yasitha Bandara