Jump to content
Fórum Script Brasil
  • 0

Fila e Linked List


IgorWC
 Share

Question

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.1k
×
×
  • Create New...