Ir para conteúdo
Fórum Script Brasil
  • 0

Fila e Linked List


IgorWC

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0
#include <iostream>
using namespace std;

class nodo {
public:
    nodo ( int v, nodo *sig = NULL ) {
        valor = v;
        siguinte = sig;
    }
    
private:
    int valor;
    nodo *siguinte;
    
    friend class fila;
};

typedef nodo *pnodo;

class fila {
public:
    fila() : primeiro ( NULL ), ultimo ( NULL ) {}
    ~fila();
    
    void Adicionar ( int v );
    int Ler();
    
private:
    pnodo primeiro, ultimo;
};

fila::~fila() {
    while ( primeiro ) Ler();
}

void fila::Adicionar ( int v ) {
    pnodo nuevo;
    
    /* Criar um nodo novo */
    /* Este este sempre vai ser o ultimo nodo, nunca deve ter siguinte*/
    nuevo = new nodo ( v );
    
    /* Si a fila nao estava vazia, adicionamos o novo a continuação do ultimo */
    if ( ultimo ) ultimo->siguinte = nuevo;
  
    /* Agora o último elemento da fila é o novo nodo */
    ultimo = nuevo;
    
    /* Si primeiro é NULL, a fila estava vazia, agora o primeiro vai apontar ao novo nodo*/
    if ( !primeiro ) primeiro = nuevo;
}

int fila::Ler() {
    pnodo nodo; /* variavel auxiliar para manipular o nodo */
    int v;      /* variavel auxiliar para o retorno */
    
    /* Nodo aponta ao primeiro elemento da fila */
    nodo = primeiro;
    
    if ( !nodo ) return 0; /* Si não ha nodos na fila retornamos 0 */
    
    /* Atribuimos ao primeiro nodo a direcão do segundo nodo */
    primeiro = nodo->siguinte;
    /* Guardamos o valor de retorno */
    v = nodo->valor;
    /* Borrar o nodo */
    delete nodo;
    
    /* Si a fila ficou vazia, ultimo deve ser NULL tambem*/
    if ( !primeiro ) ultimo = NULL;
    
    return v;
}

int main() {
    fila fila;
    cout << "Adicionar(10)" << endl;
    cout << "Adicionar(20)" << endl;
    //adicionamos 2 inteiros
    fila.Adicionar ( 10 );
    fila.Adicionar ( 20 );    
    
    
    //lemos 3 inteiros porem o terceiro vai ser zero pois nao ha mais nada que ler, somente tinha 2 elementos na fila.
    cout << "Ler: " << fila.Ler() << endl;
    cout << "Ler: " << fila.Ler() << endl;
    cout << "Ler: " << fila.Ler() << endl; //    
    
    cin.get();
    return 0;
}

Isso é um modelo funcional de uma fila, si você atribuir 2 valores inteiros a essa fila você pode fazer 2 leituras, as leituras são destrutivas, isso quer dizer que ao ler você esta extraindo o inteiro da fila. Faça um menu e estude o código para aprender.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...