SlideShare une entreprise Scribd logo
1  sur  11
Télécharger pour lire hors ligne
Prof. Adriano Teixeira de Souza
   Utilizaremos também uma lista simplesmente
    encadeada para tal.
   Como teremos que inserir e retirar elementos nas
    extremidades opostas da lista, que representarão o
    início e o fim da fila, teremos que usar dois ponteiros,
    ini e fim, que aprontam respectivamente para o primeiro
    e para o último elemento da fila.
                      ini   fim



info           info          info             info
  1              2             3                4

                              Prof. Adriano Teixeira de Souza
   O nó da lista para                A estrutura da fila
    armazenar valores reais            agrupa os ponteiros
    pode ser dado por:                 para o início e o fim da
                                       lista:
    typedef struct {                        typedef struct
     float info;                              {
     struct No* proximo;                      No* inicio;
    } No;                                     No* fim;
                                            } Fila ;


                              Prof. Adriano Teixeira de Souza
   A função cria aloca a estrutura da fila e inicializa
    a lista como sendo vazia.


Fila* cria (void)
{
  Fila* f = (Fila*) malloc(sizeof(Fila));
  f->inicio = f->fim = NULL;
  return f;
}




                            Prof. Adriano Teixeira de Souza
   Cada novo elemento é inserido no fim da lista e
    sempre retiramos o elemento do início da lista.
    Portanto, precisamos das funções:




                          Prof. Adriano Teixeira de Souza
/* função auxiliar: insere no fim */
No* ins_fim (No* fim, float v) {

   No* p = (No*) malloc(sizeof(No));
   p->info = v;
   p->proximo = NULL;
   if (fim != NULL) // verifica se a lista não estava vazia
      fim->proximo = p;
   return p;
}
/* função auxiliar: retira do início */
No* ret_ini (No* inicio) {
   No* p = inicio->proximo;
   free(inicio);
   return p;
}
   As funções que manipulam a fila fazem uso dessas
    funções de lista.
   Note que a função de inserção deve atualizar ambos os
    ponteiros, ini e fim, quanto da inserção do primeiro
    elemento:

void insere (Fila* f, float v)
{
   f->fim = ins_fim(f->fim,v);
   if (f->inicio == NULL) // fila antes vazia?
      f->inicio = f->fim;
}




                            Prof. Adriano Teixeira de Souza
   A função de retirar deve atualizar ambos os ponteiros
    (ini e fim) se a fila tornar-se vazia após a remoção do
    elemento.
     float retira (Fila* f) {
        float v;
        if (vazia(f)) {
           printf("Fila vazia.n");
           exit(1); // aborta programa
        }
        v = f->inicio->info;
        f->inicio = ret_ini(f->inicio);
        if (f->inicio == NULL) // fila ficou vazia?
           f->fim = NULL;
        return v;
     }

                              Prof. Adriano Teixeira de Souza
       A fila estará vazia se a lista estiver vazia:
         int vazia (Fila* f)
         {
            return (f->inicio == NULL);
         }

        A função que libera a fila deve antes liberar todos os elementos da
         lista.
          void libera (Fila* f) {
             No* q = f->inicio;
             while (q!=NULL) {
                 No* t = q->proximo;
                 free(q);
                 q = t;
             }
             free(f);
          }

                                          Prof. Adriano Teixeira de Souza
   Para testar o código, pode ser útil implementarmos um
    função que imprima os valores armazenados na fila. A
    ordem de impressão adotada é do início para o fim.
    /* versão com lista*/
    void imprime (Fila* f){
      No* q;
      for (q=f->inicio; q!=NULL; q=q->proximo){
           printf("%fn", q->info) ;
      }
    }




                             Prof. Adriano Teixeira de Souza
main(){

    Fila* f = cria();
    insere (f,20.0);
    insere (f,20.8);
    insere (f,20.2);
    insere (f,20.3);
    imprime (f);
    printf ("Primeiro elemento: %fn", retira(f));
    printf ("Segundo elemento: %fn", retira(f));
    printf ("Configuracao da fila:n");
    imprime (f);
    libera (f);

    system("pause");

}

Contenu connexe

Tendances

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
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 
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
 
Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Elaine Cecília Gatto
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...Marcello Thiry
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 

Tendances (20)

Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
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)
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 
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)
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
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
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição  (ver...
POO - Unidade 2 (parte 2) - Classe de Associação, Agregação, Composição (ver...
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 

En vedette

Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistemaFrancisco Mat
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoPablo Silva
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil
 
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
 
Introdução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPIntrodução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPUniversidade de São Paulo
 
Revisão sobre ponteiros em C
Revisão sobre ponteiros em CRevisão sobre ponteiros em C
Revisão sobre ponteiros em CPablo Silva
 

En vedette (10)

Start-USP apresentação do sistema
Start-USP apresentação do sistemaStart-USP apresentação do sistema
Start-USP apresentação do sistema
 
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimentoDual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
Dual track Agile - Incluindo o PO e UX em seu pipeline de desenvolvimento
 
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino MichelazzoJoomla!Day Brasil 2008 - USP - Paulino Michelazzo
Joomla!Day Brasil 2008 - USP - Paulino Michelazzo
 
Tipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e EncapsulamentoTipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e Encapsulamento
 
Acesse E-books no acervo da USP
Acesse E-books no acervo da USPAcesse E-books no acervo da USP
Acesse E-books no acervo da USP
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
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...
 
Introdução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPIntrodução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USP
 
Structs em C
Structs em CStructs em C
Structs em C
 
Revisão sobre ponteiros em C
Revisão sobre ponteiros em CRevisão sobre ponteiros em C
Revisão sobre ponteiros em C
 

Similaire à Implementação de fila com lista encadeada

Similaire à Implementação de fila com lista encadeada (20)

Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Aula 10
Aula 10 Aula 10
Aula 10
 
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
 
Listas em C
Listas em CListas em C
Listas em C
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Lista duplamente encadeada
Lista duplamente encadeadaLista duplamente encadeada
Lista duplamente encadeada
 
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
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Aula 9
Aula 9Aula 9
Aula 9
 
Pged 06
Pged 06Pged 06
Pged 06
 
Aula 11
Aula 11Aula 11
Aula 11
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Aula14
Aula14Aula14
Aula14
 
Exercício de estrutura de dados 01
Exercício de estrutura de dados 01Exercício de estrutura de dados 01
Exercício de estrutura de dados 01
 
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
 
Lista Encadeada: Inserção no Início
Lista Encadeada: Inserção no InícioLista Encadeada: Inserção no Início
Lista Encadeada: Inserção no Início
 
Filas
FilasFilas
Filas
 
1 exercicio de vectores em C
1 exercicio de vectores em C1 exercicio de vectores em C
1 exercicio de vectores em C
 

Plus de Adriano 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
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 

Plus de Adriano Teixeira de Souza (20)

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)
 
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
 
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
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 

Implementação de fila com lista encadeada

  • 2. Utilizaremos também uma lista simplesmente encadeada para tal.  Como teremos que inserir e retirar elementos nas extremidades opostas da lista, que representarão o início e o fim da fila, teremos que usar dois ponteiros, ini e fim, que aprontam respectivamente para o primeiro e para o último elemento da fila. ini fim info info info info 1 2 3 4 Prof. Adriano Teixeira de Souza
  • 3. O nó da lista para  A estrutura da fila armazenar valores reais agrupa os ponteiros pode ser dado por: para o início e o fim da lista: typedef struct { typedef struct float info; { struct No* proximo; No* inicio; } No; No* fim; } Fila ; Prof. Adriano Teixeira de Souza
  • 4. A função cria aloca a estrutura da fila e inicializa a lista como sendo vazia. Fila* cria (void) { Fila* f = (Fila*) malloc(sizeof(Fila)); f->inicio = f->fim = NULL; return f; } Prof. Adriano Teixeira de Souza
  • 5. Cada novo elemento é inserido no fim da lista e sempre retiramos o elemento do início da lista. Portanto, precisamos das funções: Prof. Adriano Teixeira de Souza
  • 6. /* função auxiliar: insere no fim */ No* ins_fim (No* fim, float v) { No* p = (No*) malloc(sizeof(No)); p->info = v; p->proximo = NULL; if (fim != NULL) // verifica se a lista não estava vazia fim->proximo = p; return p; } /* função auxiliar: retira do início */ No* ret_ini (No* inicio) { No* p = inicio->proximo; free(inicio); return p; }
  • 7. As funções que manipulam a fila fazem uso dessas funções de lista.  Note que a função de inserção deve atualizar ambos os ponteiros, ini e fim, quanto da inserção do primeiro elemento: void insere (Fila* f, float v) { f->fim = ins_fim(f->fim,v); if (f->inicio == NULL) // fila antes vazia? f->inicio = f->fim; } Prof. Adriano Teixeira de Souza
  • 8. A função de retirar deve atualizar ambos os ponteiros (ini e fim) se a fila tornar-se vazia após a remoção do elemento. float retira (Fila* f) { float v; if (vazia(f)) { printf("Fila vazia.n"); exit(1); // aborta programa } v = f->inicio->info; f->inicio = ret_ini(f->inicio); if (f->inicio == NULL) // fila ficou vazia? f->fim = NULL; return v; } Prof. Adriano Teixeira de Souza
  • 9. A fila estará vazia se a lista estiver vazia: int vazia (Fila* f) { return (f->inicio == NULL); }  A função que libera a fila deve antes liberar todos os elementos da lista. void libera (Fila* f) { No* q = f->inicio; while (q!=NULL) { No* t = q->proximo; free(q); q = t; } free(f); } Prof. Adriano Teixeira de Souza
  • 10. Para testar o código, pode ser útil implementarmos um função que imprima os valores armazenados na fila. A ordem de impressão adotada é do início para o fim. /* versão com lista*/ void imprime (Fila* f){ No* q; for (q=f->inicio; q!=NULL; q=q->proximo){ printf("%fn", q->info) ; } } Prof. Adriano Teixeira de Souza
  • 11. main(){ Fila* f = cria(); insere (f,20.0); insere (f,20.8); insere (f,20.2); insere (f,20.3); imprime (f); printf ("Primeiro elemento: %fn", retira(f)); printf ("Segundo elemento: %fn", retira(f)); printf ("Configuracao da fila:n"); imprime (f); libera (f); system("pause"); }