W C ++ możemy wstawić nowy węzeł do listy połączonej na trzy sposoby:
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:
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:
Po danym węźle na listy połączonej
Aby dodać dowolny węzeł w n -. pozycji linkowanej listy, musimy wykonać te kroki:
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->daneRozmiar ++;
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:
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.