Esse é um header que fiz quando tava apreendendo mais sobre void e acabei misturando também Orientação a Objeto e C++. Assim, resultou nesse maravilhoso código que resolvi comenta-lo e disponibiliza-lo aqui para estudo futuro dos interressados. Certamente, tem maneiras melhores de fazer esse tipo de coisa em C++. Mas, serve de um exemplo excelente para C++ e um complemento para o artigo de ponteiros void.

  



Esconder código-fonte

/*
   ALOCACAO DINAMICA & METODO DA FILA
         Escrito em Maio/2004 by Ricardo Rodrigues Lucca(jllucca)
*/

#include <string.h> /* mem */
#include <stdlib.h> /* malloc e free */

/*
 * VARIAVEIS GLOBAIS, ESTRUTURAS e TIPOS
 */
typedef struct nodo_basic {
   void *nodo;
   size_t tam_nodo;
   nodo_basic *next;
} nodo_basic; //Tipo usado nos elementos da fila

// Esta eh a classe fila. Classe é uma especie de struct que permite agrupar variaveis e funções. A três sub-agrupamentos: publicos, protegidos e privados.
class fila {
   private: // Somente funções dessa classe acessam o que esta abaixo.
     nodo_basic *start; // inicio da fila (remoção - procura)
     nodo_basic *end; // termino da fila (insercao)
     long int elements; // quantidade de elementos
     
   public:
     fila( void ); /* construtor */
     bool add( void *x, size_t tam_x ); 
     bool remove( void );
     bool posindex( int X );
     void *get();
     long int total( void );
     ~fila( void );/* destrutor */
};

// Essa funcao eh chamada toda vez que declaramos uma variavel dessa classe, pois eh seu construtor.
fila::fila( void )
{
   end = new nodo_basic; /* cria primeiro nodo */
      
   end->nodo = NULL; /* Limpa o conteudo do nodo */
   end->next = NULL;
   end->tam_nodo = 0;
   
   start = end; /* Atribui o primeiro nodo ao inicio */
   elements = 0; /* Numero de elementos atuais */
   
}

// Os "::" serve para dizer que estamos definindo uma função de nome a direita com uma classe que ficara a esquerda.(Esquerda e direita é referente aos "::"
// Essa função insere elementos no final da fila e retorna um true em caso de sucesso ou false em caso de erro.
bool fila::add( void *x, size_t tam_x )
{
   end->next = new nodo_basic;/* cria novo nodo */
   if (end->next == NULL) /* testa se falta memoria */
      return false;
   
   end->nodo = malloc(tam_x); /* aloca memoria para o cont. do nodo */
   if (end->nodo == NULL)
      return false;
   memmove(end->nodo, x, tam_x); /* end->nodo = X; */
   end->tam_nodo = tam_x;
      
   end = end->next; /* coloca o novo nodo como ultimo */
   elements++; //incrementa elements
   
   return true;
}

// Remove o primeiro elemento da fila
bool fila::remove( void )
{
   void *aux = start;

   if (elements == 0)
      return false;
      
   start = start->next;
   free( aux );
   
   elements--;
   return true;
}

// Descola X elementos para a direita.
bool fila::posindex( int X )
{
   while ( X ) {
     if (add( start->nodo, start->tam_nodo ) == false)
        return false;
     remove();
     X--;
   }
   
   return true;
}

// Retorna o primeiro elemento da fila. DEVE ser usada com a função acima.
void* fila::get( void )
{
   return start->nodo;
}

// Retorna o total de elementos da fila.
long int fila::total( void )
{
   return elements;
}

// Toda vez que a classe for ser "apagada" da memoria essa função é chamada e destroi os dados armazenados.
fila::~fila( void )
{
   while ( remove() )
        ;

   delete start;
   delete end;
}

Scripts recomendados

checkscan.h

Funções matemáticas

Números Pseudos Aleatórios

Busca Binária - Não recursivo

Sequencia Fibonacci


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts