Fila.h
Publicado por Ricardo Rodrigues Lucca 27/05/2004
[ Hits: 10.225 ]
Homepage: http://aventurasdeumdevop.blogspot.com.br/
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.
/* 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; }
Mini-editor de texto intuitivo em ncurses
Nenhum comentário foi encontrado.
Atualizar o macOS no Mac - Opencore Legacy Patcher
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Instalando e usando o Dconf Editor, o "regedit" para Linux
Como instalar o navegador TOR no seu Linux
validando quandidade de leitura no read[DUVIDA] (9)
O que eu faço com o pen drive de 200mb? (6)
PROBLEMA COM SCRIPT USANDO SED {DÚVIDA}. (2)
Qual a relevancia dos valores de bogomips com os Mhz e Ghz[DUVIDA] (9)