Dodaj węzeł z listy połączonej w C ++

Dodaj węzeł z listy połączonej w C ++
Połączona lista to struktura danych, która przechowuje zbiór węzłów, w którym każdy węzeł przechowuje wartość danych i wskaźnik do następnego węzła na liście. W przeciwieństwie do tablic, powiązane listy mogą dynamicznie rosnąć i kurczyć się, co ułatwia pracę z danymi, które są ciągle się zmieniają. Połączone wprowadzenie listy to proces dodawania nowego węzła do listy połączonej.

W C ++ możemy wstawić nowy węzeł do listy połączonej na trzy sposoby:

  1. Na początku listy połączonej
  2. Na końcu listy powiązanej
  3. Po danym węźle na listy połączonej

Porozmawiajmy o tym, jak wykonać każdą z powiązanych metod wstawiania listy jeden po drugim.

Na początku listy połączonej

Aby dodać dowolny węzeł na początku listy powiązanej, musimy wykonać te kroki:

  1. Utwórz nowy węzeł.
  2. Adres nagłówka listy powiązanej jest podawany do nowego wskaźnika węzła, aby mógł zacząć wskazywać na węzeł nagłówka, który już istnieje.
  3. Przypisz nowy adres węzła do nagłówka.

Następnie byłby NULL, gdyby ten newNode jest pierwszym węzłem na listy połączonej.

Na końcu listy powiązanej

Aby dodać dowolny węzeł na końcu listy powiązanej, musimy wykonać te kroki:

  1. Utwórz nowy węzeł.
  2. Przejdź do listy powiązanej, dopóki nie osiągniemy końca listy powiązanej.
  3. Przypisz nowo utworzony węzeł podłączonego adresu wskaźnika listy do ostatniego węzła podłączonego adresu wskaźnika listy, aby mógł zacząć wskazywać na nowo utworzony węzeł.
  4. Na końcu dodaj wskaźnik zerowy do nowo utworzonego węzła linkowanej listy, ponieważ jest to teraz ostatni węzeł.

Po danym węźle na listy połączonej

Aby dodać dowolny węzeł w n -. pozycji linkowanej listy, musimy wykonać te kroki:

  1. Utwórz nowy węzeł.
  2. Sprawdź, czy pożądana pozycja użytkownika dla nowego węzła jest ważna; to znaczy, czy pozycja nowego węzła jest większa, czy mniej niż rozmiar listy powiązanej.
  3. Przejdź listę linkowaną do n -. pozycji linkowanej listy.
  4. Przypisz następny wskaźnik n -th do nowo utworzonego następnego wskaźnika.
  5. Przypisz nowy adres węzła do następnego wskaźnika n -tym, aby mógł zacząć wskazywać na nowy węzeł.

Implemendacja programu C ++ dla wstawienia węzła na powiązanej liście:

// Ukończ program do wprowadzenia na połączoną listę w C++
#włączać
za pomocą przestrzeni nazw Std;
Węzeł klasy

publiczny:
dane int;
Węzeł *następny;
;
void insertatbeginningLinkedList (węzeł ** headnode, int data)
// dynamicznie twórz pamięć dla tego nowości
Node* newNode = new Node ();
newNode-> data = data;
newNode-> next = *headnode;
*headNode = newNode;
Cout << newNode->dane << " inserted data successfully"
„W listy powiązanej” << endl;

void insertatLastLinkedList (Node ** HeadNode, int data)
Node* newNode = new Node ();
newNode-> data = data;
// Ostatni węzeł zawsze poinformuje się do null
newNode-> następny = null;
// Jeśli lista połączona była pusta
if (*headnode == null)
*headNode = newNode;
Cout << newNode->dane << " inserted data successfully"
„W listy powiązanej” << endl;
powrót;

Węzeł * tempnode = * headNode;
// Dotrzyj do ostatniego węzła z listy powiązanej
while (tempnode-> następny!= Null)
tempNode = tempnode-> następny;
// Przypisz NewNode do następnego ostatniego węzła
tempNode-> następny = newNode;
Cout << newNode->dane Rozmiar ++;

Rozmiar powrotu;

void insertafternthnodelinkedlist
(int n, int dane, węzeł ** headnode)

int loc = n;
int size = długośćFlinkedList (*headnode);
// Brak ujemnych wkładek położenia
// Wstawienie nie jest możliwe, jeśli lokalizacja jest większa
// niż rozmiar listy powiązanej.
if (n < 0 || n > rozmiar)
Cout << "Insert position not valid";
if (n == 0)
insertatBeginningLinkedList (HeadNode, Data);

w przeciwnym razie
Node* newNode = new Node ();
newNode-> data = data;
newNode-> następny = null;
// używany tempnode do iteracji za pośrednictwem listy powiązanej
Węzeł * tempnode = * headNode;
// Traverse, dopóki nie dotrzesz do nego węzła
While (-n)
tempNode = tempnode-> następny;
// do następnego węzła n, przypisz następny NEWNODE.
newNode-> następny = tempnode-> następny;
// Przypisz Node Node do tego nowego węzła
tempNode-> następny = newNode;
// Wstaw newnode
Cout << newNode->dane << " inserted data after index " <

void printLinkedList (węzeł* węzeł)
Cout << "\n";
// podczas gdy warunek zatrzyma się, gdy węzeł == null
While (węzeł!= Null)
Cout << node->dane << " "; node = node->Następny;

Cout << "\n" << endl;

int main ()

Węzeł* headnode = null;
insertatbeginninglinkedList (i headnode, 10);
insertatbeginninglinkedList (i headnode, 9);
insertatbeginninglinkedList (i headnode, 8);
printlinkedList (HeadNode);
insertatLastLinkedList (i headnode, 11);
INSERTATLASTLINKEDLIST (& HEADNODE, 12);
insertatLastlinkedList (i headnode, 14);
printlinkedList (HeadNode);
// wkłada dane w określonej pozycji
INSERTAFTHTHNODELINKEDLIST (5, 17 i headnode);
INSERTAFTHTHNODELINKEDLIST (1, 11 i headnode);
printlinkedList (HeadNode);
powrót 0;

Wyjście:

10 Wstawione dane z powodzeniem Into Into Into List
9 Włoczone dane pomyślnie powiązane Lista
8 Lista powiązanych z pomyślnie wprowadzoną dane
8 9 10
11 wstawione dane na końcu
12 wstawione dane na końcu
14 wstawione dane na końcu
8 9 10 11 12 14
17 wstawionych danych po indeksie 5
11 wstawione dane po indeksie 1
8 11 9 10 11 12 17 14

Wyjaśnienie:

Kod definiuje klasę o nazwie Node, która ma dwie właściwości: (1) Dane (typu Int) do przechowywania wartości węzła oraz (2) następnego (węzła typu*) do przechowywania wskaźnika do następnego węzła na liście.

Program implementuje trzy funkcje, aby wstawić węzły do ​​linkowanej listy:

  • InsertatBeginningLinkedList: Wkłada węzeł na początku listy powiązanej.
  • INSERTATLASTLINKEDLIST: Wkłada węzeł na końcu listy powiązanej.
  • INSERTAFTHTHNODELINKEDLIST: Wkłada węzeł po n -tym węzła linkowanej listy.

Dane liczb całkowitych i podwójny wskaźnik do węzła głównego listy są przekazywane do funkcji InsertBeginningLinkedList (). Korzystając z nowego węzła (), pamięć nowego węzła jest dynamicznie tworzona, a następnie dane są przypisywane do nowego węzła. Później aktualizuje węzeł główny, aby był nowym węzłem, ustawiając następny wskaźnik nowego węzła do poprzedniego węzła głównego.

Dane liczb całkowitych i podwójny wskaźnik do węzła głównego listy są przekazywane do metody INSERTATLASTLINKEDLIST (). Korzystając z nowego węzła (), pamięć nowego węzła jest dynamicznie tworzona, a następnie dane są przypisywane do nowego węzła. Następny wskaźnik nowego węzła jest następnie ustawiony na Null. Jeśli połączona lista jest pusta, węzeł główny jest aktualizowany, aby służyć jako nowy węzeł. W każdym innym przypadku przemierza się połączoną listę, aż dotrze do ostatniego węzła, w którym to czasie ustawia nowy węzeł na następny wskaźnik ostatniego węzła.

Funkcja insertafternThnodelinKedList () dodaje nowy węzeł z podanymi danymi po nym nodie na połączonej liście. Połączona lista i jej rozmiar, a także pozycja n i dane, które mają zostać włożone, są przekazywane jako argumenty. Po pierwsze, funkcja weryfikuje, czy lokalizacja n jest poprawna (i.mi., nie ujemne i nie większe niż rozmiar połączonej listy). Komunikaty o błędach są drukowane, jeśli pozycja jest nieprawidłowa. Jeśli pozycja jest prawidłowa, funkcja konstruuje nowy węzeł, ustawia jego dane i następne pola, a następnie iteracyjnie wyszukuje za pomocą połączonej listy, aby znaleźć node node. Następnie łączy node node i nowy węzeł, zmieniając następne wskaźniki n -node i nowego węzła.

Długość linkowanej listy jest zwracana przez funkcję LenongOfLinkedList (), która akceptuje wskaźnik do węzła głównego listy połączonej. Odbywa się to poprzez zapętlanie się wokół połączonej listy, zliczanie węzłów i zwracanie liczby.

W głównej metodzie program tworzy pustą lista połączona, a następnie wywołuje wszystkie trzy metody wstawiania z różnymi danymi i pozycjami wejściowymi. Wreszcie, drukuje powiązaną listę, aby zobaczyć wyniki.

Wniosek

W zależności od tego, gdzie wstawienie jest przekształcane w połączoną listę, istnieją różne problemy złożoności czasowej i przestrzennej. Jako niezwykle skuteczna operacja, wstawienie na początku listy ma stałą złożoność czasu O (1) i stałą złożoność przestrzeni O (1). W najgorszym scenariuszu wstawianie na końcu listy wymaga czasu liniowego, gdzie n jest całkowitą liczbą wpisów listy. Jest tak, abyśmy mogli odkryć węzeł ogonowy, przemierzając listę. W najgorszym przypadku wstawianie się w określonej pozycji na liście wymaga również czasu liniowego, czyli O (n), ponieważ musimy przejść przez listę, aby znaleźć węzeł w określonej pozycji. Bez względu na to, w jaki sposób są dodawane, powiązane listy są elastycznym i dynamicznym sposobem przechowywania danych, których można użyć na wiele różnych sposobów.