Verkettete Liste mit Vorlagen in C++

Jay Shaw 12 Oktober 2023
  1. Verkettete Liste mit Vorlagen in C++
  2. Erstellen Sie die verknüpfte Liste unter Verwendung einer Vorlage aus einer .cpp-Datei
  3. Fazit
Verkettete Liste mit Vorlagen in C++

Eine Vorlage ist ein klassendefinierter Datentyp, der erstellt wird, wenn der zu verwendende Datentyp fraglich ist. Die Verwendung einer Vorlage bietet die Möglichkeit, mit Datentypen flexibel zu sein und nur den Datentyp zu verwenden, der während der Kompilierzeit als Eingabe bereitgestellt wird.

In diesem Artikel wird erläutert, wie wir mithilfe einer Vorlage in C++ eine verknüpfte Liste erstellen können.

Verkettete Liste mit Vorlagen in C++

Dieser Artikel stellt ein dreiteiliges Programm vor, das die Hauptdatei (.cpp-Datei) enthält, die die Knoten- und Linked-List-Daten aus ihren Header-Dateien (.h) extrahiert. Das Programm liefert Eingaben über die Hauptdatei, die die Treibermethode enthält.

Lassen Sie uns zunächst verstehen, wie Knoten mithilfe von Vorlagen erstellt werden.

Initialisieren Sie Datenmember innerhalb der Vorlagenklasse in C++

Dies ist die erste Header-Datei, die das Programm während der Kompilierung initiiert. Hier sind zwei Klassen definiert: create_list und Init.

// file: init.h

#ifndef _INIT_H
#define _INIT_H

template <typename T>
class create_list;
template <typename T>
class Init {
  friend class create_list<T>;

 public:
  Init(T data = 0, Init<T> *next = 0) : data(data), next(next) { /* empty */
  }

 private:
  T data;
  Init<T> *next;
};

#endif

Die Syntax template<typename T> class create_list; erstellt eine Klasse vom Typ T. Dies weist den Compiler an, T als benutzerdefinierten Datentyp zu verwenden, bis ein primärer Datentyp angegeben ist.

Die Verwendung von Vorlagen in einem C++-Programm bietet eine interessante Funktion, um eine Variable mit einem benutzerdefinierten Datentyp zu definieren. Ebenso können Methoden auch als Datentyp definiert werden, was sie zu einem nützlichen Werkzeug für Programmierer macht.

Verwenden Sie die Syntax friend class create_list<T>; weist den Compiler an, die Klasse create_list als Friend-Klasse zu markieren. Eine Freundesklasse erhält ihre privaten und öffentlichen Mitglieder, die in dieser Header-Datei geteilt werden.

Sobald die Klasse create_list definiert ist, wird die Klasse Init mit Typ T erstellt.

Wenn der Compiler die Syntax friend class create_list<T>; ausführt, weist er den Compiler an, die privaten und öffentlichen Elemente aus der Header-Datei create_list.h in dieser Klasse zu verwenden.

Zwei Hauptvariablen sind erforderlich, um eine verknüpfte Liste mithilfe von Vorlagen in C++ zu erstellen, eine Datenvariable, die den Eingabewert speichert, und eine Knotenvariable, die auf den nächsten Zeiger zeigt.

In diesem Programm sind diese beiden Hauptvariablen als data und next definiert. Dann werden die privaten und öffentlichen Member von Konstruktoren mit Standardwerten initialisiert, bevor Operationen an ihnen ausgeführt werden.

Zuletzt werden die Member-Variablen des Konstruktors public mit Member-Variablen des Konstruktors private initialisiert.

Erstellen Sie eine mit Klassen verknüpfte Liste mithilfe einer Vorlage in C++

In diesem Abschnitt wird der zweite Teil der drei Teile dieses Artikels behandelt. Das hier besprochene Programm importiert die Header-Datei init.h mit der Syntax #include "init.h" und verwendet ihre Datenelemente, um die Linked List mit der Vorlage in C++ zu erstellen.

Innerhalb der Template-Klasse create_list gibt es vier öffentliche Member – einen Konstruktor create_list(), einen Destruktor ~create_list() und zwei Member-Methoden void insert() und void display().

Zwei private Member sind definiert, Zeiger *up und *down, mit Datentyp T. Dieser klassendefinierte Datentyp erlaubt dem Programm, jeden Datentyp im Treiberprogramm zu verwenden, und erspart so dem Programmierer, zum Quellcode zurückzukehren Dinge ändern.

Pointer-Variablen head und tail werden innerhalb des Konstruktors create_list initialisiert.

template <typename T>
create_list<T>::create_list() : up(0), down(0)

Innerhalb des Destruktors ~create_list() werden die im Speicher abgelegten Objekte freigegeben.

Wenn hier im Objekt up ein Wert gespeichert ist, wird dieser in den Zeiger *a kopiert; Pointer *b erhält den Wert 0.

Pointer-Variablen head und tail werden innerhalb des Konstruktors create_list initialisiert.

template <typename T>
create_list<T>::~create_list() {
  if (up) {
    Init<T> *a = up;
    Init<T> *b = 0;

Für die Häufigkeit, mit der a Werte hat, wird es in b kopiert, das als Platzhalter für Objekte innerhalb der Variablen a fungiert. Dann erhält a den Wert, der im nächsten Zeiger gespeichert ist, und am Ende werden die Werte in b freigegeben.

while (a) {
  b = a;
  a = a->next;
  delete b;
}

Methode zum Hinzufügen von Werten innerhalb einer verknüpften Liste

Dieser Programmteil erstellt eine Methode vom Klassentyp T, die info als Parameter entgegennimmt. Innerhalb der Methode wird eine if-else-Bedingung angegeben.

Die down-Variable wird verwendet, um auf den nächsten Zeiger zu zeigen. Hier prüft die if-Bedingung, dass wenn die Variable up nicht leer ist, sie ein neues Objekt aus Parameterinfo erstellt und an die Variable down übergibt.

Innerhalb der else-Bedingung erhält die Variable up den Wert von down, dem Objekt, das aus dem Parameter value erstellt wird.

template <typename T>
void create_list<T>::insert(T value) {
  if (up) {
    down->next = new Init<T>(value);
    down = down->next;
  } else {
    up = down = new Init<T>(value);
  }
}

Methode zum Drucken der Werte in der verknüpften Liste

Diese Methode gibt den Inhalt der verknüpften Liste aus. Der Zeigerwert innerhalb der Variablen up wird in eine Variable *a kopiert.

Für die Anzahl der Werte, die in dem angegebenen Zeiger a vorhanden sind, gibt die While-Schleife sie aus und verschiebt dann a auf den up-Zeiger.

template <typename T>
void create_list<T>::display() {
  if (up) {
    Init<T> *a = up;

    while (a) {
      cout << a->data << "->";
      a = a->next;
    }

Der folgende Abschnitt zeigt den Code zum Erstellen einer verknüpften Liste mit C++-Vorlagen:

// file createlist.h

#ifndef _CREATELIST_H
#define _CREATELIST_H

#include <iostream>
using namespace std;

#include "init.h"

template <typename T>
class create_list {
 public:
  create_list();
  ~create_list();
  void insert(T);
  void display();

 private:
  Init<T> *up;
  Init<T> *down;
};

#endif

template <typename T>
create_list<T>::create_list() : up(0), down(0) { /* empty */
}

template <typename T>
create_list<T>::~create_list() {
  if (up) {
    Init<T> *a = up;
    Init<T> *b = 0;

    while (a) {
      b = a;
      a = a->next;
      delete b;
    }

    cout << endl;
  }
}

template <typename T>
void create_list<T>::insert(T value) {
  if (up) {
    down->next = new Init<T>(value);
    down = down->next;
  } else {
    up = down = new Init<T>(value);
  }
}

template <typename T>
void create_list<T>::display() {
  if (up) {
    Init<T> *a = up;

    while (a) {
      cout << a->data << "->";
      a = a->next;
    }

    cout << endl;
  }
}

Erstellen Sie die verknüpfte Liste unter Verwendung einer Vorlage aus einer .cpp-Datei

Dies ist der letzte Teil des Programms. Es enthält die Header-Datei create_list, und die Hauptfunktion wird erstellt.

Der Datentyp der verknüpften Listenvorlage wird innerhalb der Hauptfunktion festgelegt. Hier wird char verwendet, um die ASCII-Werte der Zahlen innerhalb der gegebenen for-Schleife zu drucken.

Die for-Schleife läuft zehnmal und gibt die ASCII-Werte von 65 bis 75 aus, die Buchstaben A bis J. Die list.insert(i); Syntax übergibt den Wert von i an die Methode add, die in die verknüpfte Liste eingefügt wird, und dann wird ein weiterer Wert übergeben.

Zum Schluss list.display(); druckt den Inhalt der verknüpften Liste.

// file run.cpp

#include "create_list.h"

int main(int argc, char *argv[]) {
  create_list<char> created_list;
  for (char i = 65; i < 75; i++) created_list.insert(i);
  created_list.display();

Fazit

Dieser Artikel enthält eine detaillierte Erläuterung, wie verknüpfte Listen mithilfe von Vorlagen in C++ erstellt werden. Nach dem Lesen des Artikels ist der Leser in der Lage, Programme mit benutzerdefinierten Datentypen zu erstellen und verknüpfte Listen mit mehreren Datentypen gleichzeitig zu verwenden.

Verwandter Artikel - C++ Linked List