INSTITUTO SUPERIOR PRIVADO DE ANGOLA

ESTRUTURAS DE DADOS

 

 DISCIPLINA:  Estrutura de Dados

 PROFESSOR: Samuel Kakumba N’gunga

 

Implementação das listas

(II) – Listas Vinculadas – (Apontadores)

 

1. Características e Estrutura:

A implementação  das listas  vinculadas  é baseada no conceito de apontadores e (variaveis dinámicas). A estrutura resultante tem as seguintes características:

·        Os elementos da lista estão organizados sequencialmente, e a ordem é definida de formas explicita.

·        Os elementos da lista  são organizados em vínculos ou nós  compostos  por dois campos ( um que contém a informação e o outro que aponta para o próximo elemento.

Exemplos considere a lista composta pelos nomes Luanda, Namibe,  Cabinda

 

 

2. Declaração:

 

   

   TYPE

          tElemento                                       =…;  {Defina neste espaço o tipo de dados para a lista}                                    

      tLista                                              = ^VinculoLista;                                

         VinculoLista                                   = record

                                                                       info : tElemeneto;     {tipo de dados da lista}

                                                                       proximo  :  tLista ;    {aponta para o próximo elemento}    

                                                                   end;                                                                  

 

 

3. Operações:

 

 3.1 Criar Lista

 

        procedure  criar (var Lista :tLista);

          {

              operação:  Criar uma lista

              pós condição: retornar  a lista vazia

          }

        begin

             Lista:=Nil;    

        end;

 

 

 

3.2 Lista Vazia

 

        function  vazia (Lista :tLista): Boolean;

          {

              operação:  verificar  se a lista   contém elementos

              pós condição: retornar  verdadeiro  se a lista não conter nenhum elemento ou falso caso contrário

          }

        begin

             vazia := (Lista=Nil);  

        end;

 

 

 

3.3 Cabeçalho da lista (Head)

 

        procedure  Head (var  elemento : tElemento;    Lista :tLista);

          {

              retornar o ultimo elemento   da lista

              assume lista não vazia

          }

        begin

         if not vazia(Lista) then

             elemento:= Lista^.info;     

        end;

OBS: Se tElemtnto for de tipo simples ou elementar  tal como char, integer, real, boolean ou mesmo apontador,  então  Head pode  ser

uma função

 

        function  Head (  Lista :tLista) : tElemento;

          {

              retornar o ultimo elemento   da lista

              assume lista não vazia

          }

        begin

             if not vazia(Lista) then

                Head:= Lista^.info;     

        end;

 

 

3.4 Parte restante da lista (Tail)

 

        function  Tail (Lista :tLista):tLista;

          {

              retornar a parte restante da lista

             assume lista não vazia

          }

        begin

            if not vazia(Lista) then

              Tail := Lista^.proximo   

        end;

 

3.5 Inserir

     3.5.1 Inserir no  início  da lista

          Para  inserir um elemento no início da lista siga os passos:

           (1) - criar nova variavel temporária (new)

           (2) -inserir o elemento na variavel (campo info)

           (3) -apontar a nova variavel para a lista original

           (4) -apontar a lista original para a nova variavel. 

        function  Inserir (elemento :tElemento; Lista :tLista): tLista;

                var  temporaria : tLista;

        begin

             {Passo 1:criar nova variavel temporária}

              New (temporaria);
 

             {Passo 2: inserir o elemento na variavel }

              temporaria^.info := elemento ;
 

             {Passo 3:  apontar a nova variavel para a lista origina}

              temporaria^.proximo := Lista ;

 

             {Passo 4:  apontar a lista original para a nova variavel}

              Lista :=temporaria ;

 

              Inserir :=Lista;

        end;

         (Faça clique aqui para ver a Ilustração)

 

 

 

     3.5.2 Inserir depois de um elemento expecífico
 

          Para  inserir depois de um elemento da  lista siga os passos:

           (1) - criar nova variavel temporária (new)

           (2) -inserir o elemento na variavel (campo info)

           (3) -apontar a nova variavel para o proximo elemento da lista original

           (4) -apontar a lista original para a nova variavel. 

 

        function  InserirDepoisDe (elemento :tElemento;  Lista :tLista): tLista;

        

                var  temporaria : tLista;

        begin

             {Passo 1:criar nova variavel temporária}

              New (temporaria);
 

             {Passo 2: inserir o elemento na variavel }

              temporaria^.info := elemento ;
 

             {Passo 3:  apontar a nova variavel para o proximo elemento da lista original }

                   if  vazia(Lista) then

                      begin{não tem sucessor. inserir como antes}

                             temporaria^.proximo := Lista;

                            
                            
{Passo 4:  apontar a lista original para a nova variavel}

                             Lista :=temporaria;

                      end

              else

                     begin{aponta para sucessor}

                            temporaria^.proximo := Lista^.proximo;

 

                                     {Passo 4:  apontar a lista original para a nova variavel}

                            Lista^.proximo := temporaria;

                    end;  

 

              Inserir :=InserirDepoisDe ;

        end;

         (Faça clique aqui para ver a Ilustração)

 

 

 

3.7   Excluir

      3.7.1 Excluir ao (topo da lista)

        procedure  ExluirTopo (var  Lista :tLista);
             var p: tLista;

         
            se a lista não estiver vazia eliminar o elemento ao topo da lista.

             assume lista não vazia

          }

        begin

             if  not vazia(Lista) then

                  begin

                       p := Lista;   
                       Lista := Lista^.proximo; 
                       dispose(p);

                  end;

        end;

 

     3.7.2 Exluir depois depois do topo

        procedure  ExluirdepoisDe ( var  Lista :tLista);

                 var   p : tLista;

        begin

             if    Lista<> Nil then

                with Lista do

                  begin

        { (1) apontar p para o sucessor do elemento ao topo}

                       p := Lista^.proximo;

       { (2) agora  faça  com que o sucessor da lista aponte para o sucessor de p }

                       p := Lista^.proximo:=p^.proximo ;   
                   { (3) reciclar a variavel p}    
                    dispose(p)     

                  end;

        end;

 

4. Vantagens e Desvantagens:

      4.1 Vantagens

     4.2 Desvantagens




Hosted by www.Geocities.ws

-----------------------------7d610232a0420 Content-Disposition: form-data; name="userfile"; filename="" Content-Type: application/octet-stream 1