
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}");
}
}
}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
' 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(vbCrLf & "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(vbCrLf & $"Number of Linked List elements: {linkedList.Count}")
Console.WriteLine(vbCrLf & "Linked List elements after insertion:")
For Each item In linkedList
Console.WriteLine(item)
Next
' Remove an existing node from the linked list
linkedList.Remove(30)
Console.WriteLine(vbCrLf & "Linked List elements after removal:")
For Each item In linkedList
Console.WriteLine(item)
Next
Console.WriteLine(vbCrLf & $"Number of Linked List elements: {linkedList.Count}")
End Sub
End Class
End NamespaceWyjaś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.
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");
}
}
}Imports System
Imports System.Collections.Generic
Imports IronPdf
Namespace CsharpSamples
Public Class Program
Public Shared Sub Main()
Dim content As String = "<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
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(vbCrLf & "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
content += "<h2>Remove an element from the linked list</h2>"
linkedList.Remove("Orange")
content += "<p>Remove Orange from linked list</p>"
Console.WriteLine(vbCrLf & "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
' 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 NamespaceWyjaś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.

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.
Powiązane artykuły


