Lista połączona w języku C# (jak działa dla programistów)
Lista powiązana to liniowa struktura danych złożona z serii węzłów, które można również nazywać elementami. W przeciwieństwie do tablic, gdzie elementy/węzły są przechowywane w ciągłych lokalizacjach pamięci, listy powiązane wykorzystują dynamiczne przydzielanie pamięci, co pozwala na rozproszenie elementów/węzłów w pamięci.
W najprostszej formie "listy powiązane" składają się z węzłów połączonych liniowo. Każdy węzeł zawiera dwie główne części:
- Dane: Dane przechowywane w węźle. Może to być dowolny typ danych, w zależności od implementacji, na przykład liczby całkowite, ciągi znaków, obiekty itp.
- Następny wskaźnik: Referencja (lub wskaźnik) do następnego węzła w sekwencji. Ten wskaźnik wskazuje na lokalizację pamięci kolejnego węzła, skierowaną do przodu na liście powiązanej.
Ostatni węzeł w liście powiązanej zazwyczaj wskazuje na null, co oznacza koniec listy.
W tym artykule dokładnie przyjrzymy się liście powiązanej w C# oraz zbadamy bibliotekę IronPDF, narzędzie do generowania PDF od Iron Software.
Rodzaje list powiązanych
1. Jednokierunkowa lista powiązana
Jednokierunkowa lista powiązana ma węzeł z jedną referencją, zazwyczaj wskazującą na następny węzeł w sekwencji. Przemieszczanie się po liście jest ograniczone do poruszania się w jednym kierunku, zazwyczaj od głowy (pierwszego węzła) do ogona (ostatniego węzła).
2. Dwukierunkowa lista powiązana
W dwukierunkowej liście powiązanej każdy węzeł zawiera dwie referencje: jedną wskazującą na następny węzeł, a drugą wskazującą na poprzedni węzeł w sekwencji. To dwukierunkowe połączenie umożliwia poruszanie się w obu kierunkach, do przodu i wstecz.
3. Kołowa lista powiązana
W kołowej liście powiązanej ostatni węzeł wskazuje z powrotem na pierwszy węzeł, tworząc strukturę kołową. Tego typu lista powiązana może być zaimplementowana z wykorzystaniem zarówno węzłów jednokierunkowych, jak i dwukierunkowych.
Podstawowe operacje na listach powiązanych
- Wstawianie: Dodawanie nowego węzła do listy w określonej pozycji, np. na początku, końcu lub w środku.
- Usuwanie: Usuwanie określonego węzła obiektu z listy i dostosowywanie wskaźników sąsiednich węzłów odpowiednio.
- Przemierzanie: Iterowanie przez listę w celu uzyskania dostępu lub manipulacji danymi każdego węzła.
- Wyszukiwanie: Znajdowanie określonego węzła w liście na podstawie wartości danych.
Linked List in C#
W C# możesz zaimplementować listę powiązaną, używając klasy LinkedList z przestrzeni nazw System.Collections.Generic. Oto przykład wszystkich podstawowych operacji:
using System;
using System.Collections.Generic;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
// Create a new linked list of integers
LinkedList<int> linkedList = new LinkedList<int>();
// Add elements to the linked list
linkedList.AddLast(10);
linkedList.AddLast(20);
linkedList.AddLast(30);
linkedList.AddLast(40);
// Traverse and print the elements of the linked list
Console.WriteLine("Traverse Linked List elements:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Display number of linked list elements
Console.WriteLine($"Number of Linked List elements: {linkedList.Count}");
// Find/Search for an element in the linked list
Console.WriteLine("\nFind/Search Element Linked List elements: 30");
var foundNode = linkedList.Find(30);
if (foundNode != null)
{
Console.WriteLine(
$"Found Value: {foundNode.Value}, " +
$"Next Element: {(foundNode.Next != null ? foundNode.Next.Value.ToString() : "null")}, " +
$"Previous Element: {(foundNode.Previous != null ? foundNode.Previous.Value.ToString() : "null")}"
);
}
// Insert an element at a specified node
LinkedListNode<int> current = linkedList.Find(20);
if (current != null)
{
linkedList.AddAfter(current, 25);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
Console.WriteLine("\nLinked List elements after insertion:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Remove an existing node from the linked list
linkedList.Remove(30);
Console.WriteLine("\nLinked List elements after removal:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
}
}
}
using System;
using System.Collections.Generic;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
// Create a new linked list of integers
LinkedList<int> linkedList = new LinkedList<int>();
// Add elements to the linked list
linkedList.AddLast(10);
linkedList.AddLast(20);
linkedList.AddLast(30);
linkedList.AddLast(40);
// Traverse and print the elements of the linked list
Console.WriteLine("Traverse Linked List elements:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Display number of linked list elements
Console.WriteLine($"Number of Linked List elements: {linkedList.Count}");
// Find/Search for an element in the linked list
Console.WriteLine("\nFind/Search Element Linked List elements: 30");
var foundNode = linkedList.Find(30);
if (foundNode != null)
{
Console.WriteLine(
$"Found Value: {foundNode.Value}, " +
$"Next Element: {(foundNode.Next != null ? foundNode.Next.Value.ToString() : "null")}, " +
$"Previous Element: {(foundNode.Previous != null ? foundNode.Previous.Value.ToString() : "null")}"
);
}
// Insert an element at a specified node
LinkedListNode<int> current = linkedList.Find(20);
if (current != null)
{
linkedList.AddAfter(current, 25);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
Console.WriteLine("\nLinked List elements after insertion:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
// Remove an existing node from the linked list
linkedList.Remove(30);
Console.WriteLine("\nLinked List elements after removal:");
foreach (var item in linkedList)
{
Console.WriteLine(item);
}
Console.WriteLine($"\nNumber of Linked List elements: {linkedList.Count}");
}
}
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Namespace CsharpSamples
Public Class Program
Public Shared Sub Main()
' Create a new linked list of integers
Dim linkedList As New LinkedList(Of Integer)()
' Add elements to the linked list
linkedList.AddLast(10)
linkedList.AddLast(20)
linkedList.AddLast(30)
linkedList.AddLast(40)
' Traverse and print the elements of the linked list
Console.WriteLine("Traverse Linked List elements:")
For Each item In linkedList
Console.WriteLine(item)
Next item
' Display number of linked list elements
Console.WriteLine($"Number of Linked List elements: {linkedList.Count}")
' Find/Search for an element in the linked list
Console.WriteLine(vbLf & "Find/Search Element Linked List elements: 30")
Dim foundNode = linkedList.Find(30)
If foundNode IsNot Nothing Then
Console.WriteLine($"Found Value: {foundNode.Value}, " & $"Next Element: {(If(foundNode.Next IsNot Nothing, foundNode.Next.Value.ToString(), "null"))}, " & $"Previous Element: {(If(foundNode.Previous IsNot Nothing, foundNode.Previous.Value.ToString(), "null"))}")
End If
' Insert an element at a specified node
Dim current As LinkedListNode(Of Integer) = linkedList.Find(20)
If current IsNot Nothing Then
linkedList.AddAfter(current, 25)
End If
Console.WriteLine($vbLf & "Number of Linked List elements: {linkedList.Count}")
Console.WriteLine(vbLf & "Linked List elements after insertion:")
For Each item In linkedList
Console.WriteLine(item)
Next item
' Remove an existing node from the linked list
linkedList.Remove(30)
Console.WriteLine(vbLf & "Linked List elements after removal:")
For Each item In linkedList
Console.WriteLine(item)
Next item
Console.WriteLine($vbLf & "Number of Linked List elements: {linkedList.Count}")
End Sub
End Class
End Namespace
Wyjaśnienie kodu
- Utwórz nową listę powiązaną liczb całkowitych za pomocą
new LinkedList<int>(). - Dodaj określone obiekty wartości do listy powiązanej.
- Przemierzaj i drukuj elementy listy powiązanej, używając pętli
foreach. - Znajdź/wyszukaj element na liście powiązanej.
- Wstaw element do określonego węzła, używając metod
FindiAddAfter. - Usuń istniejący węzeł z listy powiązanej, używając metody
Remove.
Wynik

Wprowadzenie do IronPDF
Dowiedz się więcej o IronPDF to potężna biblioteka PDF w C# opracowana i utrzymywana przez Iron Software. Oferuje ona zestaw zaawansowanych funkcji do tworzenia, edytowania i wyodrębniania treści z dokumentów PDF w projektach .NET.
Kluczowe Punkty dotyczące IronPDF
Konwersja HTML na PDF
IronPDF umożliwia konwersję treści HTML do formatu PDF. Możesz renderować strony HTML, adresy URL i ciągi HTML do plików PDF z łatwością.
Zaawansowane API
Biblioteka oferuje przyjazne dla użytkownika API, które pozwala programistom generować profesjonalnej jakości pliki PDF bezpośrednio z HTML. Niezależnie od tego, czy potrzebujesz stworzyć faktury, raporty, czy inne dokumenty, IronPDF upraszcza proces.
Wsparcie Platformowe
IronPDF jest kompatybilny z różnymi środowiskami .NET, w tym .NET Core, .NET Standard i .NET Framework. Działa na platformach Windows, Linux i macOS.
Wszechstronność
IronPDF wspiera różne typy projektów, takie jak aplikacje webowe (Blazor i WebForms), aplikacje desktopowe (WPF i MAUI) oraz aplikacje konsolowe.
Źródła Treści
Możesz generować pliki PDF z różnych źródeł treści, w tym z plików HTML, Razor views (Blazor Server), CSHTML (MVC i Razor), ASPX (WebForms) i XAML (MAUI).
Dodatkowe Funkcje
- Dodaj nagłówki i stopki do plików PDF.
- Scal, podziel, dodaj, skopiuj i usuń strony PDF.
- Ustaw hasła, uprawnienia i podpisy cyfrowe.
- Optymalizuj wydajność z wsparciem wielowątkowym i asynchronicznym.
Kompatybilność
IronPDF jest zgodny ze standardami PDF, w tym wersjami 1.2 do 1.7, PDF/UA i PDF/A. Obsługuje również kodowanie znaków UTF-8, bazowe URL oraz kodowanie zasobów.
Generowanie Dokumentu PDF z użyciem LinkedList
Teraz stwórzmy dokument PDF z użyciem IronPDF i jednocześnie zademonstrujmy użycie ciągów LinkedList.
Aby rozpocząć, otwórz Visual Studio i stwórz aplikację konsolową, wybierając z szablonów projektów, jak pokazano poniżej.

Podaj nazwę projektu i lokalizację.

Wybierz wymaganą wersję .NET.

Zainstaluj IronPDF z menedżera pakietów Visual Studio jak poniżej.

Lub można go zainstalować za pomocą poniższej linii komend.
dotnet add package IronPdf --version 2024.4.2
Dodaj poniższy kod.
using System;
using System.Collections.Generic;
using IronPdf;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
var content = "<h1>Demonstrate IronPDF with C# LinkedList</h1>";
content += "<h2>Create a new linked list of strings</h2>";
content += "<p>Create a new linked list of strings with new LinkedList<string>()</p>";
// Create a new linked list of strings
LinkedList<string> linkedList = new LinkedList<string>();
// Add elements to the linked list
content += "<p>Add Apple to linkedList</p>";
linkedList.AddLast("Apple");
content += "<p>Add Banana to linkedList</p>";
linkedList.AddLast("Banana");
content += "<p>Add Orange to linkedList</p>";
linkedList.AddLast("Orange");
content += "<h2>Print the elements of the linked list</h2>";
Console.WriteLine("Linked List elements:");
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Insert an element at a specific position</h2>";
LinkedListNode<string> node = linkedList.Find("Banana");
if (node != null)
{
linkedList.AddAfter(node, "Mango");
content += "<p>Find Banana and insert Mango After</p>";
}
Console.WriteLine("\nLinked List elements after insertion:");
content += "<h2>Linked List elements after insertion:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Remove an element from the linked list</h2>";
linkedList.Remove("Orange");
content += "<p>Remove Orange from linked list</p>";
Console.WriteLine("\nLinked List elements after removal:");
content += "<h2>Linked List elements after removal:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from HTML string
var pdf = renderer.RenderHtmlAsPdf(content);
// Save to a file
pdf.SaveAs("AwesomeIronOutput.pdf");
}
}
}
using System;
using System.Collections.Generic;
using IronPdf;
namespace CsharpSamples
{
public class Program
{
public static void Main()
{
var content = "<h1>Demonstrate IronPDF with C# LinkedList</h1>";
content += "<h2>Create a new linked list of strings</h2>";
content += "<p>Create a new linked list of strings with new LinkedList<string>()</p>";
// Create a new linked list of strings
LinkedList<string> linkedList = new LinkedList<string>();
// Add elements to the linked list
content += "<p>Add Apple to linkedList</p>";
linkedList.AddLast("Apple");
content += "<p>Add Banana to linkedList</p>";
linkedList.AddLast("Banana");
content += "<p>Add Orange to linkedList</p>";
linkedList.AddLast("Orange");
content += "<h2>Print the elements of the linked list</h2>";
Console.WriteLine("Linked List elements:");
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Insert an element at a specific position</h2>";
LinkedListNode<string> node = linkedList.Find("Banana");
if (node != null)
{
linkedList.AddAfter(node, "Mango");
content += "<p>Find Banana and insert Mango After</p>";
}
Console.WriteLine("\nLinked List elements after insertion:");
content += "<h2>Linked List elements after insertion:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
content += "<h2>Remove an element from the linked list</h2>";
linkedList.Remove("Orange");
content += "<p>Remove Orange from linked list</p>";
Console.WriteLine("\nLinked List elements after removal:");
content += "<h2>Linked List elements after removal:</h2>";
foreach (var item in linkedList)
{
content += $"<p>{item}</p>";
Console.WriteLine(item);
}
// Create a PDF renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from HTML string
var pdf = renderer.RenderHtmlAsPdf(content);
// Save to a file
pdf.SaveAs("AwesomeIronOutput.pdf");
}
}
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports IronPdf
Namespace CsharpSamples
Public Class Program
Public Shared Sub Main()
Dim content = "<h1>Demonstrate IronPDF with C# LinkedList</h1>"
content &= "<h2>Create a new linked list of strings</h2>"
content &= "<p>Create a new linked list of strings with new LinkedList<string>()</p>"
' Create a new linked list of strings
Dim linkedList As New LinkedList(Of String)()
' Add elements to the linked list
content &= "<p>Add Apple to linkedList</p>"
linkedList.AddLast("Apple")
content &= "<p>Add Banana to linkedList</p>"
linkedList.AddLast("Banana")
content &= "<p>Add Orange to linkedList</p>"
linkedList.AddLast("Orange")
content &= "<h2>Print the elements of the linked list</h2>"
Console.WriteLine("Linked List elements:")
For Each item In linkedList
content &= $"<p>{item}</p>"
Console.WriteLine(item)
Next item
content &= "<h2>Insert an element at a specific position</h2>"
Dim node As LinkedListNode(Of String) = linkedList.Find("Banana")
If node IsNot Nothing Then
linkedList.AddAfter(node, "Mango")
content &= "<p>Find Banana and insert Mango After</p>"
End If
Console.WriteLine(vbLf & "Linked List elements after insertion:")
content &= "<h2>Linked List elements after insertion:</h2>"
For Each item In linkedList
content &= $"<p>{item}</p>"
Console.WriteLine(item)
Next item
content &= "<h2>Remove an element from the linked list</h2>"
linkedList.Remove("Orange")
content &= "<p>Remove Orange from linked list</p>"
Console.WriteLine(vbLf & "Linked List elements after removal:")
content &= "<h2>Linked List elements after removal:</h2>"
For Each item In linkedList
content &= $"<p>{item}</p>"
Console.WriteLine(item)
Next item
' Create a PDF renderer
Dim renderer = New ChromePdfRenderer()
' Create a PDF from HTML string
Dim pdf = renderer.RenderHtmlAsPdf(content)
' Save to a file
pdf.SaveAs("AwesomeIronOutput.pdf")
End Sub
End Class
End Namespace
Wyjaśnienie kodu
- Najpierw zaczynamy od tworzenia treści do PDF, używając obiektu ciągu treści. Treść jest generowana jako ciąg HTML.
- Utwórz nową listę powiązaną ciągów z
new LinkedList<string>(). - Dodaj elementy do listy powiązanej i dołącz informacje do ciągu treści PDF.
- Wydrukuj elementy listy powiązanej i dołącz do treści PDF.
- Wstaw element w określonej pozycji używając metody
AddAfter; zaktualizuj treść i wydrukuj wynikową listę. - Usuń element z listy powiązanej używając metody
Remove, zaktualizuj treść i wydrukuj wynikową listę. - W końcu zapisz wygenerowaną treść w formacie HTML do dokumentu PDF używając metod
ChromePdfRenderer,RenderHtmlAsPdfiSaveAs.
Wynik

Wynik ma znak wodny, który można usunąć za pomocą ważnej licencji z strony licencjonowania IronPDF.
Licencja IronPDF
Biblioteka IronPDF wymaga licencji do działania, którą można uzyskać z strony licencjonowania produktu.
Wklej klucz do pliku appSettings.json poniżej.
{
"IronPdf.License.LicenseKey": "The Key Goes Here"
}
Podsumowanie
C# LinkedList zapewnia wszechstronną strukturę danych do zarządzania kolekcjami elementów, oferującą efektywne wstawienia i usunięcia przy jednoczesnym przystosowaniu dynamicznego rozmiaru, podobnie jak domyślna funkcja haszująca. Listy powiązane są często używane w różnych aplikacjach i algorytmach, takich jak implementacja stosów, kolejek, tabel symboli oraz systemów zarządzania pamięcią. Zrozumienie cech i operacji list powiązanych jest kluczowe do budowy wydajnych i skalowalnych rozwiązań programowych.
Podsumowując, choć listy powiązane są doskonałe w niektórych scenariuszach, takich jak dynamiczne struktury danych i częste wstawienia/usunięcia, mogą nie być najlepszym wyborem dla aplikacji wymagających częstego dostępu losowego lub pracy w środowiskach z ograniczoną pamięcią. Staranna analiza specyficznych wymagań i cech danych może naprowadzić na wybór najodpowiedniejszej struktury danych do zadania.
Biblioteka IronPDF od Iron Software pozwala programistom na łatwe tworzenie i manipulację dokumentami PDF, umożliwiając zaawansowane umiejętności rozwoju nowoczesnych aplikacji.
Często Zadawane Pytania
Czym jest lista połączona w języku C#?
Lista połączona w języku C# to liniowa struktura danych złożona z węzłów, z których każdy zawiera dane i odwołanie do następnego węzła. Struktura ta, w przeciwieństwie do tablic, pozwala na dynamiczną alokację pamięci, umożliwiając przechowywanie elementów w nieprzylegających lokalizacjach pamięci.
Jak mogę przekonwertować HTML na PDF w języku C#?
Możesz użyć metody RenderHtmlAsPdf biblioteki IronPDF do konwersji ciągów HTML na pliki PDF. Pozwala ona również na konwersję plików HTML na pliki PDF za pomocą metody RenderHtmlFileAsPdf.
Jakie są rodzaje list połączonych w języku C#?
W języku C# głównymi typami list połączonych są listy połączone pojedynczo, listy połączone podwójnie oraz listy połączone cyklicznie. Listy połączone pojedynczo zawierają węzły z pojedynczym odwołaniem do następnego węzła, listy połączone podwójnie zawierają odwołania zarówno do następnego, jak i poprzedniego węzła, a listy połączone cyklicznie mają ostatni węzeł odwołujący się z powrotem do pierwszego węzła.
Jakie podstawowe operacje można wykonywać na listach połączonych?
Listy połączone obsługują operacje takie jak wstawianie (dodawanie nowego węzła), usuwanie (usuwanie istniejącego węzła), przeglądanie (iteracja przez listę) oraz wyszukiwanie (znajdowanie węzła na podstawie jego danych).
Jak zaimplementować listę połączoną w języku C#?
Listę połączoną można zaimplementować w języku C# przy użyciu klasy LinkedList z przestrzeni nazw System.Collections.Generic, która udostępnia metody dodawania, usuwania i manipulowania węzłami na liście.
Jakie funkcje oferuje biblioteka do generowania plików PDF?
Biblioteka do generowania plików PDF, taka jak IronPDF, oferuje konwersję HTML do PDF, wyodrębnianie tekstu, łączenie i dzielenie dokumentów oraz ustawianie uprawnień do dokumentów, a wszystko to w różnych środowiskach .NET.
W jaki sposób listy połączone mogą być wykorzystywane przy generowaniu plików PDF?
Listy połączone mogą dynamicznie przechowywać i organizować treści, które następnie można iterować i konwertować na dokument PDF przy użyciu biblioteki takiej jak IronPDF, co ułatwia manipulowanie treścią i generowanie wyników.
Jakie są zalety stosowania list połączonych w tworzeniu oprogramowania?
Listy połączone umożliwiają wydajne wstawianie i usuwanie elementów oraz dynamiczne zmianę rozmiaru i są przydatne do implementacji dynamicznych struktur danych, takich jak stosy i kolejki. Są one szczególnie przydatne, gdy konieczne są częste modyfikacje, choć nie oferują możliwości dostępu swobodnego.
Jaka jest różnica między listami pojedynczo i podwójnie połączonymi?
Główna różnica polega na tym, że listy pojedynczo połączone zawierają węzły z pojedynczym odwołaniem do następnego węzła, co umożliwia przeglądanie w jedną stronę, podczas gdy listy podwójnie połączone zawierają węzły z odwołaniami zarówno do następnego, jak i poprzedniego węzła, co umożliwia przeglądanie w obie strony.
Jak wygenerować plik PDF na podstawie danych z listy połączonej w języku C#?
Można iterować po liście połączonej w celu zebrania danych, a następnie użyć API IronPDF do renderowania tych danych do dokumentu PDF. Wymaga to wykorzystania metod takich jak HtmlToPdf do konwersji treści ustrukturyzowanych do profesjonalnego formatu PDF.




