Lista połączona w języku C# (jak działa dla programistów)
Lista powiazana to liniowa struktura danych skladajaca sie z serii wezlow, nazywanych tez elementami. W przeciwienstwie do tablic, gdzie elementy/wezły sa przechowywane w ciaglej pamięci, listy powiazane wykorzystuja dynamiczna alokacje pamięci, pozwalając na rozrzucenie elementow/wezlow w całej pamięci.
W najprostszej formie listy powiazane skladaja sie z wezlow polaczonych liniowo. Kazdy wezel zawiera dwie główne części:
- Dane: Ladunek przechowywany w wezle. Mogą to być dowolne typy danych w zależności od implementacji, takie jak liczby całkowite, ciagi znakow, obiekty itp.
- Nastepny wskaźnik: Referencja (lub wskaźnik) do nastepnego wezla w sekwencji. Ten wskaźnik wskazuje lokalizacje pamięci nastepnego wezla w liscie powiazanej.
Ostatni wezel w liscie powiazanej zwykle wskazuje na pusta referencje, sygnalizujac koniec listy.
W tym artykułe przyjrzymy sie szczegółowo liscie powiazanej w C# oraz zbadamy biblioteke IronPDF, narzędzie do generowania PDF od Iron Software.
Rodzaje list powiazanych
1. Lista jednokierunkowa
Lista jednokierunkowa ma wezel z tylko jedną referencją, typowo wskazujacą na następny wezel w sekwencji. Poruszanie sie po liscie jest ograniczone do przemieszczania sie w jednym kierunku, zazwyczaj od glowy (wezel poczatkowy) do ogona (wezel koncowy).
2. Lista dwukierunkowa
W liscie dwukierunkowej kazdy wezel zawiera dwie referencje: jedna wskazujaca na następny wezel, a druga na poprzedni wezel w sekwencji. To dwukierunkowe łącze umożliwia przeszukiwanie w obu kierunkach do przodu i do tylu.
3. Lista cykliczna
W liscie cyklicznej ostatni wezel wskazuje z powrotem na pierwszy wezel, tworząc strukture kolowa. Ten typ listy powiazanej może być zaimplementowany przy użyciu jednokierunkowych lub dwukierunkowych wezlow.
Podstawowe operacje na listach powiazanych
- Wstawianie: Dodawanie nowego wezla do listy na konkretnej pozycji, takiej jak początek, koniec lub srodek.
- Usuwanie: Usuwanie okreslonego wezla z listy i odpowiednie dostosowanie wskaźników sasiadujacych wezlow.
- Przejscie: Iteracja przez liste w celu uzyskania dostepu do danych kazdego wezla lub manipulacji nimi.
- Wyszukiwanie: Znajdowanie okreslonego wezla w liscie na podstawie jego wartosci danych.
Linked List in C
W C#, można 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ą z liczbami całkowitymi za pomocą
new LinkedList<int>(). - Dodaj okreslone obiekty wartosci do listy powiazanej.
- Przemierz i wydrukuj elementy listy powiązanej za pomocą pętli
foreach. - Znajdz/wyszukaj element w liscie powiazanej.
- Wstaw element w określonym węźle, używając metod
FindiAddAfter. - Usuń istniejący węzeł z listy powiązanej, używając metody
Remove.
Wynik

Przedstawiamy IronPDF
Dowiedz sie więcej o IronPDF to potezna biblioteka PDF C# opracowana i utrzymywana przez Iron Software. Zapewnia wszechstronny zestaw funkcji do tworzenia, edytowania i wydobywania zawartości z dokumentów PDF w projektach .NET.
Kluczowe punkty dotyczące IronPDF
Konwersja HTML do PDF
IronPDF pozwala na konwersje zawartości HTML do formatu PDF. Możesz łatwo renderować strony HTML, URL i ciagi HTML do plików PDF.
Bogaty interfejs API
Biblioteka oferuje przyjazny dla użytkownika interfejs API, ktory umożliwia deweloperom generowanie profesjonalnej jakosci plików PDF bezpośrednio z HTML. Czy potrzebujesz stworzyć faktury, raporty czy inne dokumenty, IronPDF upraszcza ten proces.
Obsługa wielu platform
IronPDF jest kompatybilny z rozmaitymi środowiskami .NET, w tym .NET Core, .NET Standard i .NET Framework. Działa na platformach Windows, Linux i macOS.
Wszechstronnosc
IronPDF obsługuje różne typy projektow, takie jak aplikacje webowe (Blazor i WebForms), aplikacje desktopowe (WPF i MAUI) oraz aplikacje konsolowe.
Zrodla zawartości
Możesz generować pliki PDF z różnych źródeł zawartości, w tym plików HTML, widoków Razor (serwer Blazor), CSHTML (MVC i Razor), ASPX (WebForms) i XAML (MAUI).
Dodatkowe funkcje
- Dodaj nagłówki i stopki do plików PDF.
- Scalic, podzielić, dodac, skopiowac i usunac strony PDF.
- Ustawic hasla, uprawnienia i podpisy cyfrowe.
- Optymalizowac wydajność za pomoca wielowątkowośći i wsparcia asynchronicznego.
Kompatybilność
IronPDF zgodne jest z normami PDF, w tym wersjami od 1.2 do 1.7, PDF/UA i PDF/A. Obslugiwane jest także kodowanie znakow UTF-8, adresy bazowe URL i kodowanie zasobów.
Generowanie dokumentu PDF za pomocą LinkedList
Teraz utwórzmy dokument PDF przy użyciu IronPDF i zademonstrujmy również wykorzystanie łańcuchów LinkedList.
Na początek, otworz Visual Studio i stworz aplikacje konsolowa, wybierajac z szablonow projektow, jak pokazano poniżej.

Podaj nazwe projektu i lokalizacje.

Wybierz wymaganą wersję .NET.

Zainstaluj IronPDF z menadzera pakietow Visual Studio, jak poniżej.

Lub może być zainstalowany przy użyciu poniższej linii polecen.
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
- Na początku tworzymy zawartość dla PDF, korzystając z obiektu ciągu zawartości. Zawartosc jest generowana jako ciag HTML.
- Utwórz nową listę powiązaną łańcuchów znaków za pomocą
new LinkedList<string>(). - Dodaj elementy do listy powiazanej i dodatkowo dolacz informacje do ciągu zawartości PDF.
- Wydrukuj elementy listy powiazanej i dolacz do zawartości PDF.
- Wstaw element na określonej pozycji za pomocą metody
AddAfter. zaktualizuj zawartość i wydrukuj wynikowa liste. - Usuń element z listy powiązanej, używając metody
Remove, zaktualizuj zawartość i wydrukuj wynikową listę. - Na koniec zapisz wygenerowany łańcuch zawartości HTML do dokumentu PDF za pomocą metod
ChromePdfRenderer,RenderHtmlAsPdfiSaveAs.
Wynik

Wyjscie ma znak wodny, ktory można usunac, korzystając z ważnej licencji z strony licencji IronPDF.
Licencja IronPDF
biblioteka IronPDF wymaga licencji do uruchomienia, która można uzyskać na stronie licencjonowania produktu.
Wklej klucz w pliku appSettings.json poniżej.
{
"IronPdf.License.LicenseKey": "The Key Goes Here"
}
Wnioski
C# LinkedList dostarcza wszechstronną strukturę danych do zarządzania kolekcjami elementów, oferującą efektywne wstawienia i usunięcia, jednocześnie dostosowując się do dynamicznego zmieniania rozmiaru, podobnie jak domyślna funkcja haszująca. Listy powiazane sa powszechnie używane w różnych aplikacjach i algorytmach, takich jak implementacja stosow, kolejek, tabel symboli i systemów zarządzania pamięcią. Zrozumienie cech i operacji list powiazanych jest niezbędne do budowy efektywnych i skalowalnych rozwiazan programowych.
Podsumowujac, podczas gdy listy powiazane świetnie sprawdzają sie w okreslonych scenariuszach, takich jak dynamiczne struktury danych i czeste wstawiania/usuwania, mogą nie być najlepszym wyborem dla aplikacji wymagajacych czestego przypadkowego dostepu lub radzenia sobie z środowiskami o ograniczonej pamięci. Dokladne rozwazenie specyficznych wymagań i charakterystyk danych pomoże w wyborze najbardziej odpowiedniej struktury danych dla konkretnego zadania.
Biblioteka IronPDF firmy Iron Software pozwala programistom na łatwe tworzenie i edycję dokumentów PDF, umożliwiając wykorzystanie zaawansowanych umiejętności do tworzenia 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.




