<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>Lista ligada</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="Lista_ligada"/>
<meta name="wx_page_id" content="158705"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="Lista ligada" id="wxsec1"><h1 class="pagetitle" id="wx1">Lista ligada</h1>

<p id="wx2">Uma <b id="wx3">lista ligada</b> ou <b id="wx4">lista encadeada</b> é uma <a href="/wpt/Estrutura_de_dados" title="Estrutura de dados" wx:linktype="known" wx:pagename="Estrutura_de_dados" wx:page_id="52637" id="wx5">estrutura de dados</a> linear e dinâmica. Ela é composta por células que apontam para o próximo elemento da <a href="/wpt/Lista" title="Lista" wx:linktype="known" wx:pagename="Lista" wx:page_id="38143" id="wx6">lista</a>. Para "ter" uma lista ligada/encadeada, basta guardar seu primeiro elemento, e seu último elemento aponta para uma célula nula. O esquema a seguir representa uma lista ligada/encadeada com 5 elementos:</p>

<pre id="wx7">
Célula 1 ---&gt; Célula 2 ---&gt; Célula 3 ---&gt; Célula 4 ---&gt; Célula 5 ---&gt; (Nulo)
</pre>

<p id="wx8">Para manipularmos estas listas nomeadamente: inserir dados ou remover dados temos que ter sempre em atenção em ter um ponteiro que aponte para o 1º elemento e outro que aponte para o fim, isto porque se queremos inserir ou apagar dados que estão no inicio ou no fim da lista então a operação é rápidamente executada caso seja um nó que esteja no meio da lista pois terá que haver uma procura até encontrar a posição desejada.</p>

<div class="wx_image" wx:align="right" wx:thumb="thumb" id="wx9"><a href="/wpt/Imagem:Single_linked_list.png" title="Diagrama conceitual de uma lista ligada." wx:linktype="image" wx:pagename="Imagem:Single_linked_list.png" id="wx10"><img src="/wpt/Imagem:Single_linked_list.png" alt="Diagrama conceitual de uma lista ligada." width="250" id="wx11"/></a> 

<div class="thumbcaption" id="wx12">
<p id="wx13">Diagrama conceitual de uma lista ligada.</p>
</div>
</div>

<div id="wx_toc"/>

<a id="Vantagens" name="Vantagens"/>
<wx:section level="2" title="Vantagens" id="wxsec2"><h2 id="wx14">Vantagens</h2>

<ul id="wx15">
<li id="wx16">
<p id="wx17">A inserção de um elemento no meio da lista não implica mover todos os elementos.</p>
</li>
</ul>

<a id="Desvantagens" name="Desvantagens"/>
</wx:section><wx:section level="2" title="Desvantagens" id="wxsec3"><h2 id="wx18">Desvantagens</h2>

<ul id="wx19">
<li id="wx20">
<p id="wx21">O acesso sequencial, para eliminação ou inserção de um elemento no meio da lista.</p>
</li>
</ul>

<a id="N.C3.ADveis_de_complexidade" name="N.C3.ADveis_de_complexidade"/>
</wx:section><wx:section level="2" title="Níveis de complexidade" id="wxsec4"><h2 id="wx22">Níveis de complexidade</h2>

<p id="wx23">Numa lista com n itens, temos as seguintes complexidades de tempo no pior caso:</p>

<ul id="wx24">
<li id="wx25">
<p id="wx26">Inserção</p>

<ul id="wx27">
<li id="wx28">
<p id="wx29">Cabeça <a href="/wpt/Ordem_m%C3%A1xima_de_complexidade" class="new" title="Ordem máxima de complexidade" wx:linktype="unknown" wx:pagename="Ordem_máxima_de_complexidade" id="wx30">O</a>(1)</p>
</li>

<li id="wx31">
<p id="wx32">Cauda O(1)</p>
</li>

<li id="wx33">
<p id="wx34">Meio O(n)</p>
</li>
</ul>
</li>
</ul>

<ul id="wx35">
<li id="wx36">
<p id="wx37">Eliminação</p>

<ul id="wx38">
<li id="wx39">
<p id="wx40">Cabeça O(1)</p>
</li>

<li id="wx41">
<p id="wx42">Cauda O(n)</p>
</li>

<li id="wx43">
<p id="wx44">Meio O(n)</p>
</li>
</ul>
</li>
</ul>

<a id="Exemplo" name="Exemplo"/>
</wx:section><wx:section level="2" title="Exemplo" id="wxsec5"><h2 id="wx45">Exemplo</h2>

<p id="wx46">Exemplo de um Código feito para um dicionário de palavras em <a href="/wpt/Linguagem_de_programa%C3%A7%C3%A3o_C" title="Linguagem de programação C" wx:linktype="known" wx:pagename="Linguagem_de_programação_C" wx:page_id="1292409" id="wx47">linguagem de programação C</a>:</p>

<p id="wx48"><br id="wx49"/>
</p>

<pre id="wx50">
struct dic{
    char *original;
    char *complementar;
    struct dic *prox;
};

struct dic* ini=NULL;
struct dic* last=NULL;

//adicionar um novo dic à nossa lista
void dic_add(char *original, char *complementar){
        
    //se last é igual a Null quer dizer que a lista está vazia
    if (last == NULL){
        // o elemento será o primeiro
        last = (struct dic*)malloc(sizeof(struct dic));
        (*last).original = original;
        (*last).complementar = complementar;
        // Definição da cabeça da fila
        ini = last;
    } else {
        // o elemento será o último
        (*last).prox = (struct dic*)malloc(sizeof(struct dic));
        last = (*last).prox;
        (*last).original = original;
        (*last).complementar = complementar;
    }        
}

//Percorrer e Imprimir a lista ligada
void dic_print(){
    int sair = 0;
    struct dic* act = ini;
   
    do {
        if (act == last)
            sair = 1;
        printf("----------------------------------------------\n");
        printf("original: %s\n",(*act).original);
        printf("complementar: %s\n",(*act).complementar);
        printf("prox: %d\n", (*act).prox);
        act = (*act).prox;
    } while(sair == 0);
    printf("----------------------------------------------");
}
</pre>

<p id="wx51"><br id="wx52"/>
</p>

<a id="Exemplo_em_Java" name="Exemplo_em_Java"/>
</wx:section><wx:section level="2" title="Exemplo em Java" id="wxsec6"><h2 id="wx53">Exemplo em Java</h2>

<p id="wx54">Exemplo de um Código feito para um dicionário de palavras em <a href="/wpt/Linguagem_de_programa%C3%A7%C3%A3o_Java" title="Linguagem de programação Java" wx:linktype="known" wx:pagename="Linguagem_de_programação_Java" wx:page_id="56350" id="wx55">linguagem de programação Java</a>:</p>

<p id="wx56"><br id="wx57"/>
</p>

<pre id="wx58">
import javax.swing.*;

class No
{
    int elemento;
    No prox;
    
    No (int elem){
        elemento = elem;
        prox = null;
    }
 }

class ListaLigada
{
    No primeiro, ultimo;
    
    ListaLigada ()
    {
        primeiro = null;
        ultimo = null;
    }
    
    public boolean ListaVazia()
    {
        if (primeiro == null &amp;&amp; ultimo == null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public void InserirInicio(No novoNo)
    {
        if (ListaVazia())
        {
            ultimo = novoNo;
        }
        else
        {
            novoNo.prox = primeiro;
        }
        primeiro = novoNo;
    }
    
    public void InserirFinal(No novoNo)
    {
        if (ListaVazia())
        {
            primeiro = novoNo;
        }
        else
        {
            ultimo.prox = novoNo;
        }
        ultimo = novoNo;
    }
    
    public int ContarNos()
    {
        int tamanho = 0;
        No NoTemp = primeiro;
        
        while (NoTemp !=null)
        {
            tamanho = tamanho+1;
            NoTemp = NoTemp.prox;
        }
        return tamanho;
    }
    
    public void InserirMeio(No NovoNo, int posicao)
    {
        No NoTemp = primeiro;
        int NroNos, posAux = 1;
        
        NroNos = ContarNos();
        
        if(posicao &lt;= 1)
        {
            InserirInicio(NovoNo);
        }
        else
        {
            if (posicao &gt; NroNos)
            {
                InserirFinal(NovoNo);
            }
            else
            {
                while (posAux &lt; (posicao -1))
                {
                    NoTemp = NoTemp.prox;
                    posAux = posAux + 1;
                }
                NovoNo.prox = NoTemp.prox;
                NoTemp.prox = NovoNo;
            }
        }
    }
    
    public void Remover(int elemento)
    {
        No NoTemp = primeiro;
        No NoAnt = null;
        
        if (primeiro.elemento == elemento)
        {
            primeiro = primeiro.prox;
        }
        else
        {
            while (NoTemp !=null &amp;&amp; NoTemp.elemento != elemento)
            {
                NoAnt = NoTemp;
                NoTemp = NoTemp.prox;
            }
            
            if(NoTemp != null)
            {
                NoAnt.prox = NoTemp.prox;
            }
            if(NoTemp == ultimo)
            {
                ultimo = NoAnt;
            }
        }
    }
    
    public void ElementoInicio()
    {
        if(!ListaVazia())
        {
            System.out.println("O primeiro elemento  "+primeiro.elemento);
        }
        else
        {
            System.out.println("Lista ligada vazia");
        }
    }
    
    public void ElementoFinal()
    {
        if(!ListaVazia())
        {
            System.out.println("O ltimo elemento  "+ultimo.elemento);
        }
        else
        {
            System.out.println("Lista ligada vazia");
        }
    }
    
    public No BuscarNo (int elemento)
    {
        int i = 1;
        No NoTemp = primeiro;
        
        while (NoTemp !=null)
        {
            if(NoTemp.elemento == elemento)
            {
                System.out.println("No "+ NoTemp.elemento + " posicao " +i);
                return NoTemp;
            }
            i = i +1;
            NoTemp = NoTemp.prox;
        }
        return null;
    }
    
    public void MostrarLista()
    {
        int i = 1;
        No NoTemp = primeiro;
        
        while (NoTemp !=null)
        {
            System.out.println("Elemento " + NoTemp.elemento + " posicao " +i );
            NoTemp = NoTemp.prox;
            i = i +1;
        }
    }
}

class Exemplo1
{
    public static void main (String args[])
    {
        ListaLigada realLista = new ListaLigada();
        int i;
        int num;
        
        for (i = 1; i&lt;=5; i++)
        {
            num = Integer.parseInt(JOptionPane.showInputDialog("Digite um nr ")   );
            realLista.InserirFinal(new No(num));
        }
        realLista.MostrarLista();
        System.exit(0);
    }
}

</pre>

<p id="wx59"><br id="wx60"/>
</p>

<a id="Ver_tamb.C3.A9m" name="Ver_tamb.C3.A9m"/>
</wx:section><wx:section level="2" title="Ver também" id="wxsec7"><h2 id="wx61"><wx:template id="wx_t1" pagename="Predefinição:Veja_também" page_id="63065"/>Ver também<wx:templateend start="wx_t1"/></h2>

<ul id="wx62">
<li id="wx63"><a href="/wpt/Lista" title="Lista" wx:linktype="known" wx:pagename="Lista" wx:page_id="38143" id="wx64">Lista</a></li>

<li id="wx65"><a href="/wpt/Lista_duplamente_ligada" title="Lista duplamente ligada" wx:linktype="known" wx:pagename="Lista_duplamente_ligada" wx:page_id="312748" id="wx66">Lista duplamente ligada</a></li>
</ul>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=Lista_ligada" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx67">Categorias de páginas</a>: <span dir="ltr" id="wx68"><a href="/wpt/Categoria:Estruturas_de_dados" title="Categoria:Estruturas de dados" wx:linktype="known" wx:pagename="Categoria:Estruturas_de_dados" wx:page_id="119374" id="wx69">Estruturas de dados</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://be.wikipedia.org/wiki/%D0%A1%D1%8C%D0%BF%D1%96%D1%81" class="external" wx:linktype="interwiki" wx:pagename="be:Сьпіс" id="wx70">Беларуская</a> | <a href="http://da.wikipedia.org/wiki/Liste_%28datastruktur%29" class="external" wx:linktype="interwiki" wx:pagename="da:Liste_(datastruktur)" id="wx71">Dansk</a> | <a href="http://de.wikipedia.org/wiki/Liste_%28Datenstruktur%29" class="external" wx:linktype="interwiki" wx:pagename="de:Liste_(Datenstruktur)" id="wx72">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Linked_list" class="external" wx:linktype="interwiki" wx:pagename="en:Linked_list" id="wx73">English</a> | <a href="http://es.wikipedia.org/wiki/Lista_%28estructura_de_datos%29" class="external" wx:linktype="interwiki" wx:pagename="es:Lista_(estructura_de_datos)" id="wx74">Español</a> | <a href="http://fi.wikipedia.org/wiki/Linkitetty_lista" class="external" wx:linktype="interwiki" wx:pagename="fi:Linkitetty_lista" id="wx75">Suomi</a> | <a href="http://fr.wikipedia.org/wiki/Liste" class="external" wx:linktype="interwiki" wx:pagename="fr:Liste" id="wx76">Français</a> | <a href="http://he.wikipedia.org/wiki/%D7%A8%D7%A9%D7%99%D7%9E%D7%94_%D7%9E%D7%A7%D7%95%D7%A9%D7%A8%D7%AA" class="external" wx:linktype="interwiki" wx:pagename="he:רשימה_מקושרת" id="wx77">עברית</a> | <a href="http://hu.wikipedia.org/wiki/L%C3%A1ncolt_lista" class="external" wx:linktype="interwiki" wx:pagename="hu:Láncolt_lista" id="wx78">Magyar</a> | <a href="http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E3%83%AA%E3%82%B9%E3%83%88" class="external" wx:linktype="interwiki" wx:pagename="ja:線形リスト" id="wx79">日本語</a> | <a href="http://ko.wikipedia.org/wiki/%EC%97%B0%EA%B2%B0_%EB%A6%AC%EC%8A%A4%ED%8A%B8" class="external" wx:linktype="interwiki" wx:pagename="ko:연결_리스트" id="wx80">한국어</a> | <a href="http://lt.wikipedia.org/wiki/Tiesinis_s%C4%85ra%C5%A1as" class="external" wx:linktype="interwiki" wx:pagename="lt:Tiesinis_sąrašas" id="wx81">Lietuvių</a> | <a href="http://nl.wikipedia.org/wiki/Gelinkte_lijst" class="external" wx:linktype="interwiki" wx:pagename="nl:Gelinkte_lijst" id="wx82">Nederlands</a> | <a href="http://pl.wikipedia.org/wiki/Lista" class="external" wx:linktype="interwiki" wx:pagename="pl:Lista" id="wx83">Polski</a> | <a href="http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA" class="external" wx:linktype="interwiki" wx:pagename="ru:Линейный_список" id="wx84">Русский</a> | <a href="http://uk.wikipedia.org/wiki/%D0%97%D0%B2%27%D1%8F%D0%B7%D0%B0%D0%BD%D0%B8%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA" class="external" wx:linktype="interwiki" wx:pagename="uk:Зв'язаний_список" id="wx85">Українська</a> | <a href="http://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8" class="external" wx:linktype="interwiki" wx:pagename="zh:链表" id="wx86">中文</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name=""/></wx:templatearguments>
</html>
