Listas encadeadas em C# (Como funciona para desenvolvedores)
Uma lista encadeada é uma estrutura de dados linear composta por uma série de nós, que também podem ser chamados de elementos. Ao contrário dos arrays, onde os elementos/nós são armazenados em locais de memória contíguos, as listas encadeadas utilizam alocação dinâmica de memória, permitindo que os elementos/nós sejam distribuídos por toda a memória.
Em sua forma mais simples, as "listas encadeadas" consistem em nós ligados linearmente. Cada nó contém duas partes principais:
- Dados: Carga útil armazenada no nó. Isso pode ser de qualquer tipo de dado, dependendo da implementação, como números inteiros, strings, objetos, etc.
- Ponteiro seguinte: Uma referência (ou ponteiro) para o próximo nó na sequência. Este ponteiro indica a localização na memória do nó seguinte, apontando para a frente na lista encadeada.
O último nó em uma lista encadeada normalmente aponta para uma referência nula, indicando o fim da lista.
Neste artigo, analisaremos detalhadamente a lista encadeada em C# e também exploraremos a biblioteca IronPDF , uma ferramenta de geração de PDF da Iron Software .
Tipos de listas encadeadas
1. Lista simplesmente encadeada
Uma lista simplesmente encadeada possui um nó com apenas uma referência, geralmente apontando para o próximo nó na sequência. Percorrer a lista é limitado a um único sentido, geralmente do início (o nó inicial) para o fim (o nó final).
2. Lista Duplamente Encadeada
Em uma lista duplamente encadeada, cada nó contém duas referências: uma apontando para o próximo nó e outra apontando para o nó anterior na sequência. Essa ligação bidirecional permite a travessia tanto para a frente quanto para trás.
3. Lista Circular Ligada
Em uma lista encadeada circular, o último nó aponta de volta para o primeiro nó, formando uma estrutura circular. Esse tipo de lista encadeada pode ser implementado usando nós encadeados simples ou duplamente.
Operações básicas em listas encadeadas
- Inserção: Adicionar um novo nó à lista em uma posição específica, como o início, o fim ou o meio.
- Exclusão: Remover um nó de objeto específico da lista e ajustar os ponteiros dos nós vizinhos de acordo.
- Percurso: Iterar pela lista para acessar ou manipular os dados de cada nó.
- Pesquisa: Encontrar um nó específico na lista com base em seu valor especificado nos dados.
Lista Encadeada em C
Em C#, você pode implementar uma lista encadeada usando a classe LinkedList do namespace System.Collections.Generic. Aqui está um exemplo de todas as operações básicas:
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
Explicação do código
- Crie uma nova lista encadeada de inteiros usando
new LinkedList<int>(). - Adicione os objetos de valor especificados à lista encadeada.
- Percorra e imprima os elementos da lista encadeada usando um laço
foreach. - Encontre/pesquise um elemento na lista encadeada.
- Insira um elemento em um nó especificado usando os métodos
FindeAddAfter. - Remova um nó existente da lista encadeada usando o método
Remove.
Saída

Apresentando o IronPDF
Descubra mais sobre o IronPDF , uma poderosa biblioteca PDF em C# desenvolvida e mantida pela Iron Software. Ele fornece um conjunto abrangente de recursos para criar, editar e extrair conteúdo de documentos PDF em projetos .NET .
Pontos-chave sobre o IronPDF
Conversão de HTML para PDF
O IronPDF permite converter conteúdo HTML para o formato PDF. Você pode converter páginas HTML, URLs e strings HTML em PDFs com facilidade.
API avançada
A biblioteca oferece uma API fácil de usar que permite aos desenvolvedores gerar PDFs de qualidade profissional diretamente a partir de HTML. Seja para criar faturas, relatórios ou outros documentos, o IronPDF simplifica o processo.
Suporte multiplataforma
O IronPDF é compatível com vários ambientes .NET , incluindo .NET Core, .NET Standard e .NET Framework. Ele funciona nas plataformas Windows, Linux e macOS.
Versatilidade
O IronPDF suporta diferentes tipos de projetos, como aplicações web (Blazor e WebForms), aplicações desktop (WPF e MAUI) e aplicações de console.
Fontes de conteúdo
Você pode gerar PDFs a partir de diversas fontes de conteúdo, incluindo arquivos HTML, visualizações Razor (Blazor Server), CSHTML (MVC e Razor), ASPX (WebForms) e XAML (MAUI).
Recursos adicionais
- Adicionar cabeçalhos e rodapés aos PDFs.
- Mesclar, dividir, adicionar, copiar e excluir páginas de PDF.
- Defina senhas, permissões e assinaturas digitais.
- Otimize o desempenho com suporte a multithreading e assíncrono.
Compatibilidade
O IronPDF está em conformidade com os padrões PDF, incluindo as versões 1.2 a 1.7, PDF/UA e PDF/A. Ele também oferece suporte à codificação de caracteres UTF-8, URLs base e codificação de recursos.
Gerar documento PDF usando LinkedList
Agora vamos criar um documento PDF usando o IronPDF e também demonstrar o uso de strings LinkedList.
Para começar, abra o Visual Studio e crie um aplicativo de console selecionando um dos modelos de projeto, como mostrado abaixo.

Forneça o nome e a localização do projeto.

Selecione a versão do .NET desejada.

Instale o IronPDF a partir do gerenciador de pacotes do Visual Studio, como o mostrado abaixo.

Ou pode ser instalado usando a linha de comando abaixo.
dotnet add package IronPdf --version 2024.4.2
Adicione o código abaixo.
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 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(Of 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 As 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
Explicação do código
- Primeiro, começamos criando o conteúdo para o PDF, usando um objeto de string de conteúdo. O conteúdo é gerado como uma string HTML.
- Crie uma nova lista encadeada de strings com
new LinkedList<string>(). - Adicione elementos à lista encadeada e também anexe informações à string de conteúdo do PDF.
- Imprima os elementos da lista encadeada e anexe-os ao conteúdo do PDF.
- Insira um elemento em uma posição específica usando o método
AddAfter; Atualize o conteúdo e imprima a lista resultante. - Remova um elemento da lista encadeada usando o método
Remove, atualize o conteúdo e imprima a lista resultante. - Finalmente, salve a string de conteúdo HTML gerada em um documento PDF usando os métodos
ChromePdfRenderer,RenderHtmlAsPdfeSaveAs.
Saída

O arquivo gerado contém uma marca d'água que pode ser removida mediante o uso de uma licença válida, disponível na página de licenciamento do IronPDF .
Licença IronPDF
A biblioteca IronPDF requer uma licença para funcionar , e esta pode ser obtida na página de licenciamento do produto .
Cole a chave no arquivo appSettings.json abaixo.
{
"IronPdf.License.LicenseKey": "The Key Goes Here"
}
Conclusão
O C# LinkedList fornece uma estrutura de dados versátil para gerenciar coleções de elementos, oferecendo inserções e exclusões eficientes, além de acomodar redimensionamento dinâmico, semelhante à função hash padrão. Listas encadeadas são comumente usadas em diversas aplicações e algoritmos, como na implementação de pilhas, filas, tabelas de símbolos e sistemas de gerenciamento de memória. Compreender as características e o funcionamento das listas encadeadas é essencial para construir soluções de software eficientes e escaláveis.
Em resumo, embora as listas encadeadas se destaquem em certos cenários, como estruturas de dados dinâmicas e inserções/remoções frequentes, elas podem não ser a melhor escolha para aplicações que exigem acesso aleatório frequente ou que lidam com ambientes de memória limitada. Uma análise cuidadosa dos requisitos e características específicos dos dados pode orientar a seleção da estrutura de dados mais adequada para a tarefa em questão.
A biblioteca IronPDF da Iron Software permite que os desenvolvedores criem e manipulem documentos PDF sem esforço, possibilitando o desenvolvimento de aplicações modernas com habilidades avançadas.
Perguntas frequentes
O que é uma lista encadeada em C#?
Uma lista encadeada em C# é uma estrutura de dados linear composta por nós, onde cada nó contém dados e uma referência para o próximo nó. Essa estrutura, diferentemente dos arrays, permite a alocação dinâmica de memória, possibilitando que elementos sejam armazenados em locais de memória não contíguos.
Como posso converter HTML para PDF em C#?
Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Ele também permite converter arquivos HTML em PDFs usando o RenderHtmlFileAsPdf .
Quais são os tipos de listas encadeadas em C#?
Em C#, os principais tipos de listas encadeadas são listas encadeadas simples, listas encadeadas duplas e listas encadeadas circulares. Listas encadeadas simples possuem nós com uma única referência para o próximo nó, listas encadeadas duplas possuem referências tanto para o próximo nó quanto para o anterior, e listas encadeadas circulares possuem o último nó apontando de volta para o primeiro nó.
Quais operações básicas podem ser realizadas em listas encadeadas?
Listas encadeadas suportam operações como inserção (adicionar um novo nó), exclusão (remover um nó existente), percurso (iterar pela lista) e busca (encontrar um nó com base em seus dados).
Como implementar uma lista encadeada em C#?
Uma lista encadeada pode ser implementada em C# usando a classe LinkedList do namespace System.Collections.Generic , que fornece métodos para adicionar, remover e manipular os nós da lista.
Que funcionalidades oferece uma biblioteca de geração de PDFs?
Uma biblioteca de geração de PDF como o IronPDF oferece conversão de HTML para PDF, extração de texto, mesclagem e divisão de documentos, além de configuração de permissões de documentos, tudo isso em diversos ambientes .NET.
Como as listas encadeadas podem ser usadas na geração de PDFs?
Listas encadeadas podem armazenar e organizar conteúdo dinamicamente, que pode então ser iterado e convertido em um documento PDF usando uma biblioteca como o IronPDF, facilitando a manipulação e a saída do conteúdo.
Quais são as vantagens de usar listas encadeadas no desenvolvimento de software?
Listas encadeadas oferecem inserções e remoções eficientes, redimensionamento dinâmico e são benéficas para a implementação de estruturas de dados dinâmicas, como pilhas e filas. Elas são especialmente úteis quando modificações frequentes são necessárias, embora não possuam capacidade de acesso aleatório.
Qual a diferença entre listas simplesmente encadeadas e listas duplamente encadeadas?
A principal diferença é que as listas simplesmente encadeadas possuem nós com uma única referência ao nó seguinte, permitindo a travessia em uma única direção, enquanto as listas duplamente encadeadas possuem nós com referências tanto ao nó seguinte quanto ao anterior, permitindo a travessia bidirecional.
Como posso gerar um PDF a partir de dados de uma lista encadeada em C#?
Você pode iterar pela lista encadeada para coletar dados e, em seguida, usar a API do IronPDF para renderizar esses dados em um documento PDF. Isso envolve o uso de métodos como HtmlToPdf para converter conteúdo estruturado em um formato PDF profissional.




