
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.
Linked List in C#
In C#, you can implement a linked list using the LinkedList class from the System.Collections.Generic namespace. 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}");
}
}
}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 NamespaceExplicação do código
- Crie uma nova lista ligada de inteiros usando
new LinkedList<int>(). - Adicione os objetos de valor especificados à lista encadeada.
- Percorra e imprima os elementos da lista ligada usando um loop
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 ligada 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 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.
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");
}
}
}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 NamespaceExplicaçã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 ligada 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 ligada 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
C# LinkedList oferece uma estrutura de dados versátil para gerenciar coleções de elementos, proporcionando inserções e deleções eficientes enquanto acomoda 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.

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.
Artigos relacionados


