SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Prof. Adriano Teixeira de Souza
   Listas encadeadas ou listas ligadas
    representam uma seqüência de objetos na
    memória do computador.

   Exemplo: Lista de afazeres
    1.   Comprar uma lâmpada
    2.   Trocar uma lâmpada queimada
    3.   Procurar uma conta no quarto
    4.   Pagar uma conta na internet
    5.   Desligar o computador
    6.   Dormir
   Na lista de afazeres anterior, uma tarefa
    dependia da execução da tarefa anterior




                                     Próxima
                  Ação atual           ação
1. Comprar   2
 lâmpada

         2. Trocar   3
         lâmpada

                 3. Procurar   4
                    conta

                           4. Pagar       5
                            conta

                                      5. Desligar   6
                                         micro

                                                6. Dormir   fim
   Como representar a lista anterior em um
       programa escrito na Linguagem C?
       ◦ Primeira opção: vetores ou matrizes




Tarefa:   Comprar Trocar Procurar   Pagar   Desligar
                                                       Dormir
          lâmpada lâmpada conta     conta    micro
Índice:      1       2       3        4        5         6
   Primeira opção: vetores ou matrizes
       ◦ Como acrescentar “Ligar micro”?




Tarefa:   Comprar Trocar Procurar   Pagar
                                    Ligar   Desligar
                                                       Dormir
          lâmpada lâmpada conta     conta
                                    micro    micro
Índice:      1       2       3       4        5         6       7
   Primeira opção: vetores ou matrizes
    ◦ Os itens da lista são armazenados em posições
      contíguas de memória.

    ◦ A lista pode ser percorrida em qualquer direção.

    ◦ A inserção de um novo item pode ser realizada
      após o último item com custo constante.

    ◦ A inserção de um novo item no meio da lista requer
      um deslocamento de todos os itens localizados
      após o ponto de inserção.

    ◦ Retirar um item do início da lista requer um
      deslocamento de itens para preencher o espaço
      deixado vazio.
   Segunda opção: ponteiros
    ◦ Estruturas de dados dinâmicas: estruturas de dados
      que contém ponteiros para si próprias.



        struct lista {
        char nome_tarefa[30];
        float duracao;
        char responsavel[30];
        ...
                                       ponteiro para a
        struct lista *prox;
                                       própria estrutura lista
        };
   Representação gráfica de um elemento da lista:
             campos de informação



                                                  próximo nó



    ◦ Cada item é encadeado com o seguinte, mediante uma
      variável do tipo ponteiro.
    ◦ Permite utilizar posições não contíguas de memória.
    ◦ É possível inserir e retirar elementos sem necessidade de
      deslocar os itens seguintes da lista.
   Cada item em particular de uma lista pode ser
    chamado de elemento, nó, célula, ou item.
   O apontador para o início da lista também é
    tratado como se fosse uma célula (cabeça), para
    simplificar as operações sobre a lista.
   O símbolo / representa o ponteiro nulo (NULL),
    indicando o fim da lista.


p
           3
                        5
                                     2
                                                     4   /
   Podemos realizar algumas operações sobre
    uma lista encadeadas, tais como:
    ◦ Inserir itens;
    ◦ Retirar itens;
    ◦ Buscar itens.

   Para manter a lista ordenada, após realizar
    alguma dessas operações, será necessário
    apenas movimentar alguns ponteiros (de um
    a três elementos).
   Outras operações possíveis:
    ◦ Criar uma lista
    ◦ Destruir uma lista
    ◦ Ordenar uma lista
    ◦ Intercalar duas listas
    ◦ Concatenar duas listas
    ◦ Dividir uma lista em duas
    ◦ Copiar uma lista em outra
typedef struct {
   float info;
   struct No* proximo;
} No;

No* cria (void)
{
   return NULL;
}




                         Prof. Adriano Teixeira de Souza
   Podemos inserir itens:
    ◦ No início de uma lista
    ◦ No final de uma lista
    ◦ No meio de uma lista
   O endereço armazenado no ponteiro p deve
    ser alterado para o endereço do item a ser
    acrescido à lista.




p        5           2          4   /


         3
No* insere (No* l, float v)
{
   No* p = (No*) malloc(sizeof(No));
   p->info = v;
   p->proximo = l;

    return p;
}




                       Prof. Adriano Teixeira de Souza
   O endereço armazenado em p será alterado
    caso a lista esteja vazia ou
   O campo prox do último item será alterado.



        /



        p       3   /



        p       3          5   /
   Campo prox do item a ser inserido recebe o
        campo prox do item posterior
       Campo prox do item antecessor recebe o
        endereço do item a ser inserido



p           3               2              4   /


                            5


                lista[5].prox ← lista[2]

                lista[3].prox ← 5
   O endereço armazenado no ponteiro p deve
    ser alterado para o endereço do item que
    segue o primeiro item da lista.




     p      5          2          4   /
   O campo prox do último item será alterado
    caso a lista contenha mais de um item ou
   O endereço armazenado em p será alterado
    para NULL.


        p       3          5   /



        p       3   /



        /
   Item antecessor recebe o campo prox do
        item a ser removido


                  lista[3].prox ← lista[5].prox




p           3           5              2          4   /
No* retira (No* l, float v) {//Em qualquer posicao

    No* ant = NULL;
    No* p = l;

    while (p != NULL && p->info != v) {
       ant = p;
       p = p->proximo;
    }
    if (p == NULL)
       return l;
    if (ant == NULL) {
        l = p->proximo;
    }else {
         ant->proximo = p->proximo;
    }
    free(p);
    return l;
}
No* busca (No* l,float v){
    No* q;
    int i=0;
    for (q=l; q!=NULL; q=q->proximo){
        if(q->info == v){
           printf("nnachou %dnnn",i);
           return q;
        }
        i++;
    }
    return NULL;
}




                       Prof. Adriano Teixeira de Souza
void imprime (No* l){
  No* q;
  for (q=l; q!=NULL; q=q->proximo)
    printf("%fn", q->info);
}




                 Prof. Adriano Teixeira de Souza
void libera (No* l) {
  No* q = l;
  while (q!=NULL) {
    No* t = q->proximo;
    free(q);
    q = t;
  }
}



                    Prof. Adriano Teixeira de Souza
main(){

    No* p = cria();
     p = insere (p,20.0);
     p = insere (p,44.5);
     p = insere (p,33.3);
     p = insere (p,20.9);
     imprime (p);
     No* n = busca(p,20.3);//Busca
     if (n != NULL){
         printf ("Encontrado: %fn", n->info);
         p=retira(p,n->info);
    }
     printf ("Configuracao da fila:n");
     imprime (p);
     libera (p);

     system("pause");

}


                              Prof. Adriano Teixeira de Souza
No* insere_ordenado (No* l, float v)
{
    No* novo = (No*) malloc(sizeof(No));
    novo->info = v;

    No* ant = NULL;
    No* p = l;

    while (p != NULL && p->info < v) {
       ant = p;
       p = p->proximo;
    }
    if (ant == NULL) {
       novo->proximo = l;
       l = novo;
    } else {
         novo->proximo = ant->proximo;
         ant->proximo = novo;
    }
    return l;
}

                             Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

Mais procurados

Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Leinylson Fontinele
 
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...Leinylson Fontinele
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente EncadeadasLeinylson Fontinele
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em pythonCiro Rafael
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenaçãoDaiana de Ávila
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 
Lógica de Programação - Vetor
Lógica de Programação - VetorLógica de Programação - Vetor
Lógica de Programação - VetorWesley R. Bezerra
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Leinylson Fontinele
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 

Mais procurados (20)

Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Estrutura de Dados - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
 
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...
Banco de Dados II Aula 05 - Modelagem de Dados (Normalização de dados e as fo...
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
 
Estrutura de Dados - Grafos
Estrutura de Dados - GrafosEstrutura de Dados - Grafos
Estrutura de Dados - Grafos
 
Lista duplamente encadeada em python
Lista duplamente encadeada em pythonLista duplamente encadeada em python
Lista duplamente encadeada em python
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
Trabalho métodos de ordenação
Trabalho métodos de ordenaçãoTrabalho métodos de ordenação
Trabalho métodos de ordenação
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Lógica de Programação - Vetor
Lógica de Programação - VetorLógica de Programação - Vetor
Lógica de Programação - Vetor
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 

Destaque

Estrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasEstrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasLeinylson Fontinele
 
Estruturas de Dados em C#
Estruturas de Dados em C#Estruturas de Dados em C#
Estruturas de Dados em C#Marcelo Charan
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Leinylson Fontinele
 
03 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.103 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.1César Augusto Pessôa
 
Dicionários: B-Trees
Dicionários: B-TreesDicionários: B-Trees
Dicionários: B-Treeselliando dias
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaAdriano Teixeira de Souza
 
Sistema de ficheiros
Sistema de ficheirosSistema de ficheiros
Sistema de ficheirosATEC
 
Listas Lineares - Parte 1
Listas Lineares - Parte 1Listas Lineares - Parte 1
Listas Lineares - Parte 1Artur Barreto
 

Destaque (20)

Listas Encadeadas
Listas EncadeadasListas Encadeadas
Listas Encadeadas
 
Estrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas EstáticasEstrutura de Dados Aula 04 - Listas Estáticas
Estrutura de Dados Aula 04 - Listas Estáticas
 
Estruturas de Dados em C#
Estruturas de Dados em C#Estruturas de Dados em C#
Estruturas de Dados em C#
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Visualg
VisualgVisualg
Visualg
 
03 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.103 - Introdução a lógica de programação parte 3 - v1.1
03 - Introdução a lógica de programação parte 3 - v1.1
 
Dicionários: B-Trees
Dicionários: B-TreesDicionários: B-Trees
Dicionários: B-Trees
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Sistema de ficheiros
Sistema de ficheirosSistema de ficheiros
Sistema de ficheiros
 
6.queue
6.queue6.queue
6.queue
 
(14) unidade 4 slide share
(14) unidade 4   slide share(14) unidade 4   slide share
(14) unidade 4 slide share
 
(17) unidade 4 slide share-para as-os filhas-os
(17) unidade 4   slide share-para as-os filhas-os(17) unidade 4   slide share-para as-os filhas-os
(17) unidade 4 slide share-para as-os filhas-os
 
(17) unidade 4 slide share-gestação e parto
(17) unidade 4   slide share-gestação e parto(17) unidade 4   slide share-gestação e parto
(17) unidade 4 slide share-gestação e parto
 
(10) unidade 4 slide share
(10) unidade 4   slide share(10) unidade 4   slide share
(10) unidade 4 slide share
 
(11) unidade 4 slide share
(11) unidade 4   slide share(11) unidade 4   slide share
(11) unidade 4 slide share
 
(7) unidade 4 slide share
(7) unidade 4   slide share(7) unidade 4   slide share
(7) unidade 4 slide share
 
Aumento da licença paternidade
Aumento da licença paternidadeAumento da licença paternidade
Aumento da licença paternidade
 
Listas Lineares - Parte 1
Listas Lineares - Parte 1Listas Lineares - Parte 1
Listas Lineares - Parte 1
 

Semelhante a Listas encadeadas em C (20)

Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Programação-Aula004
Programação-Aula004Programação-Aula004
Programação-Aula004
 
Aula 17
Aula 17Aula 17
Aula 17
 
Pged 04
Pged 04Pged 04
Pged 04
 
Aula 15
Aula 15Aula 15
Aula 15
 
Aula 12
Aula 12Aula 12
Aula 12
 
10 alocacao dinamica - listas ligadas
10   alocacao dinamica - listas ligadas10   alocacao dinamica - listas ligadas
10 alocacao dinamica - listas ligadas
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Usar explicação 01
Usar explicação 01Usar explicação 01
Usar explicação 01
 
Aula 19
Aula 19Aula 19
Aula 19
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Aula 13
Aula 13Aula 13
Aula 13
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem C
 
Aula 8
Aula 8Aula 8
Aula 8
 
Listas em C
Listas em CListas em C
Listas em C
 
Lista duplamente encadeada
Lista duplamente encadeadaLista duplamente encadeada
Lista duplamente encadeada
 
Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10Pymordida0 Semana de computação da SOCIESC - 2008/10
Pymordida0 Semana de computação da SOCIESC - 2008/10
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)
 
Heap
HeapHeap
Heap
 

Mais de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 

Listas encadeadas em C

  • 2. Listas encadeadas ou listas ligadas representam uma seqüência de objetos na memória do computador.  Exemplo: Lista de afazeres 1. Comprar uma lâmpada 2. Trocar uma lâmpada queimada 3. Procurar uma conta no quarto 4. Pagar uma conta na internet 5. Desligar o computador 6. Dormir
  • 3. Na lista de afazeres anterior, uma tarefa dependia da execução da tarefa anterior Próxima Ação atual ação
  • 4. 1. Comprar 2 lâmpada 2. Trocar 3 lâmpada 3. Procurar 4 conta 4. Pagar 5 conta 5. Desligar 6 micro 6. Dormir fim
  • 5. Como representar a lista anterior em um programa escrito na Linguagem C? ◦ Primeira opção: vetores ou matrizes Tarefa: Comprar Trocar Procurar Pagar Desligar Dormir lâmpada lâmpada conta conta micro Índice: 1 2 3 4 5 6
  • 6. Primeira opção: vetores ou matrizes ◦ Como acrescentar “Ligar micro”? Tarefa: Comprar Trocar Procurar Pagar Ligar Desligar Dormir lâmpada lâmpada conta conta micro micro Índice: 1 2 3 4 5 6 7
  • 7. Primeira opção: vetores ou matrizes ◦ Os itens da lista são armazenados em posições contíguas de memória. ◦ A lista pode ser percorrida em qualquer direção. ◦ A inserção de um novo item pode ser realizada após o último item com custo constante. ◦ A inserção de um novo item no meio da lista requer um deslocamento de todos os itens localizados após o ponto de inserção. ◦ Retirar um item do início da lista requer um deslocamento de itens para preencher o espaço deixado vazio.
  • 8. Segunda opção: ponteiros ◦ Estruturas de dados dinâmicas: estruturas de dados que contém ponteiros para si próprias. struct lista { char nome_tarefa[30]; float duracao; char responsavel[30]; ... ponteiro para a struct lista *prox; própria estrutura lista };
  • 9. Representação gráfica de um elemento da lista: campos de informação próximo nó ◦ Cada item é encadeado com o seguinte, mediante uma variável do tipo ponteiro. ◦ Permite utilizar posições não contíguas de memória. ◦ É possível inserir e retirar elementos sem necessidade de deslocar os itens seguintes da lista.
  • 10. Cada item em particular de uma lista pode ser chamado de elemento, nó, célula, ou item.  O apontador para o início da lista também é tratado como se fosse uma célula (cabeça), para simplificar as operações sobre a lista.  O símbolo / representa o ponteiro nulo (NULL), indicando o fim da lista. p 3 5 2 4 /
  • 11. Podemos realizar algumas operações sobre uma lista encadeadas, tais como: ◦ Inserir itens; ◦ Retirar itens; ◦ Buscar itens.  Para manter a lista ordenada, após realizar alguma dessas operações, será necessário apenas movimentar alguns ponteiros (de um a três elementos).
  • 12. Outras operações possíveis: ◦ Criar uma lista ◦ Destruir uma lista ◦ Ordenar uma lista ◦ Intercalar duas listas ◦ Concatenar duas listas ◦ Dividir uma lista em duas ◦ Copiar uma lista em outra
  • 13. typedef struct { float info; struct No* proximo; } No; No* cria (void) { return NULL; } Prof. Adriano Teixeira de Souza
  • 14. Podemos inserir itens: ◦ No início de uma lista ◦ No final de uma lista ◦ No meio de uma lista
  • 15. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item a ser acrescido à lista. p 5 2 4 / 3
  • 16. No* insere (No* l, float v) { No* p = (No*) malloc(sizeof(No)); p->info = v; p->proximo = l; return p; } Prof. Adriano Teixeira de Souza
  • 17. O endereço armazenado em p será alterado caso a lista esteja vazia ou  O campo prox do último item será alterado. / p 3 / p 3 5 /
  • 18. Campo prox do item a ser inserido recebe o campo prox do item posterior  Campo prox do item antecessor recebe o endereço do item a ser inserido p 3 2 4 / 5 lista[5].prox ← lista[2] lista[3].prox ← 5
  • 19. O endereço armazenado no ponteiro p deve ser alterado para o endereço do item que segue o primeiro item da lista. p 5 2 4 /
  • 20. O campo prox do último item será alterado caso a lista contenha mais de um item ou  O endereço armazenado em p será alterado para NULL. p 3 5 / p 3 / /
  • 21. Item antecessor recebe o campo prox do item a ser removido lista[3].prox ← lista[5].prox p 3 5 2 4 /
  • 22. No* retira (No* l, float v) {//Em qualquer posicao No* ant = NULL; No* p = l; while (p != NULL && p->info != v) { ant = p; p = p->proximo; } if (p == NULL) return l; if (ant == NULL) { l = p->proximo; }else { ant->proximo = p->proximo; } free(p); return l; }
  • 23. No* busca (No* l,float v){ No* q; int i=0; for (q=l; q!=NULL; q=q->proximo){ if(q->info == v){ printf("nnachou %dnnn",i); return q; } i++; } return NULL; } Prof. Adriano Teixeira de Souza
  • 24. void imprime (No* l){ No* q; for (q=l; q!=NULL; q=q->proximo) printf("%fn", q->info); } Prof. Adriano Teixeira de Souza
  • 25. void libera (No* l) { No* q = l; while (q!=NULL) { No* t = q->proximo; free(q); q = t; } } Prof. Adriano Teixeira de Souza
  • 26. main(){ No* p = cria(); p = insere (p,20.0); p = insere (p,44.5); p = insere (p,33.3); p = insere (p,20.9); imprime (p); No* n = busca(p,20.3);//Busca if (n != NULL){ printf ("Encontrado: %fn", n->info); p=retira(p,n->info); } printf ("Configuracao da fila:n"); imprime (p); libera (p); system("pause"); } Prof. Adriano Teixeira de Souza
  • 27. No* insere_ordenado (No* l, float v) { No* novo = (No*) malloc(sizeof(No)); novo->info = v; No* ant = NULL; No* p = l; while (p != NULL && p->info < v) { ant = p; p = p->proximo; } if (ant == NULL) { novo->proximo = l; l = novo; } else { novo->proximo = ant->proximo; ant->proximo = novo; } return l; } Prof. Adriano Teixeira de Souza