Fila.h
Publicado por Ricardo Rodrigues Lucca 27/05/2004
[ Hits: 10.205 ]
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; }
Nenhum comentário foi encontrado.
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Dongle Bluetooth 5.0 não funciona no Pop Os 22.04 (2)
Impressora Canon Ip 1800 (Drivers) 64 bit (2)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba