Ir para o conteúdo do rodapé
AJUDA DO .NET

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:

  1. 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.
  2. 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

  1. Inserção: Adicionar um novo nó à lista em uma posição específica, como o início, o fim ou o meio.
  2. Exclusão: Remover um nó de objeto específico da lista e ajustar os ponteiros dos nós vizinhos de acordo.
  3. Percurso: Iterar pela lista para acessar ou manipular os dados de cada nó.
  4. 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
$vbLabelText   $csharpLabel

Explicação do código

  1. Crie uma nova lista encadeada de inteiros usando new LinkedList<int>().
  2. Adicione os objetos de valor especificados à lista encadeada.
  3. Percorra e imprima os elementos da lista encadeada usando um laço foreach.
  4. Encontre/pesquise um elemento na lista encadeada.
  5. Insira um elemento em um nó especificado usando os métodos Find e AddAfter.
  6. Remova um nó existente da lista encadeada usando o método Remove.

Saída

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 1 - Saída da Lista Ligada

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

  1. Adicionar cabeçalhos e rodapés aos PDFs.
  2. Mesclar, dividir, adicionar, copiar e excluir páginas de PDF.
  3. Defina senhas, permissões e assinaturas digitais.
  4. 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.

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 2 - Novo Projeto

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

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 3 - Configuração do Projeto

Selecione a versão do .NET desejada.

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 4 - Framework de Destino

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

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 5 - Instalar o IronPDF

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
$vbLabelText   $csharpLabel

Explicação do código

  1. 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.
  2. Crie uma nova lista encadeada de strings com new LinkedList<string>().
  3. Adicione elementos à lista encadeada e também anexe informações à string de conteúdo do PDF.
  4. Imprima os elementos da lista encadeada e anexe-os ao conteúdo do PDF.
  5. Insira um elemento em uma posição específica usando o método AddAfter; Atualize o conteúdo e imprima a lista resultante.
  6. Remova um elemento da lista encadeada usando o método Remove, atualize o conteúdo e imprima a lista resultante.
  7. Finalmente, salve a string de conteúdo HTML gerada em um documento PDF usando os métodos ChromePdfRenderer, RenderHtmlAsPdf e SaveAs.

Saída

Lista Ligada em C# (Como Funciona para Desenvolvedores): Figura 6 - IronPDF com `LinkedList` Output

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.

Curtis Chau
Redator Técnico

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 ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim