Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Introdução às listas ligadas em CQuantidade de visualizações: 14730 vezes |
Então você se interessou pelo assunto de listas ligadas em C? Recomendo que leia esta anotação com muita atenção. É o ponto de partida para o entendimento e implementação desta estrutura de dados tão importante. Uma lista singularmente ou duplamente ligada (singly or doubly linked list) é uma lista dinâmica no sentido de que ela pode crescer ou diminuir de acordo com as necessidades do programa. As matrizes (arrays) comuns também têm seu papel assegurado no estudo das estruturas de dados. No entanto, uma de suas limitações é que seus elementos são dispostos lado a lado na memória. Isso torna a inserção de um novo elemento no meio do array uma tarefa dispendiosa, visto que os demais elementos precisam ser movidos para outras posições. Em uma lista dinâmica isso não acontece. O conceito princial das listas ligadas é a capacidade de um nó (cada elemento da lista é chamado de nó) poder apontar para um outro nó com estrutura semelhante. Veja a estrutura típica de um nó em uma lista ligada: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó Note que esta estrutura contém dois campos: um campo do tipo int que guarda o valor do nó e um campo do tipo ponteiro apontando para uma estrutura do mesmo tipo que o nó atual. Isso permite a circularidade das listas, ou seja, um nó apontando para um elemento de seu mesmo tipo. Com este conhecimento já podemos criar o início de uma lista singularmente ligada, para isso só precisamos declarar uma variável do tipo No. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // declara o início da lista struct No *inicio; Até agora temos uma lista ligada vazia. A criação do primeiro elemento da lista pode ser feito da seguinte forma: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó int main(int argc, char *argv[]) { // declara o início da lista struct No *inicio = NULL; // verifica se a lista está vazia if(inicio == NULL){ // reserva memória para o novo nó inicio = (struct No*)malloc(sizeof(struct No)); // a memória foi alocada com sucesso? if(inicio != NULL){ inicio->valor = 150; // é o primeiro nó...seu campo proximo não deve // apontar para lugar nenhum inicio->proximo = NULL; } } printf("%d\n\n", inicio->valor); system("pause"); return 0; } Aqui nós temos a criação do primeiro nó de uma lista singularmente ligada. Note como usamos a função malloc() para alocar memória para o nó atual. Veja também que o valor NULL é fornecido para o campo próximo do nó. Isso aconteceu porque temos apenas um nó. Em outras dicas desta seção abordaremos como inserir os demais nós e também listar todos os nós existentes na lista. Até lá. |
![]() |
C ::: Dicas & Truques ::: Arquivos e Diretórios |
Apostila de C para iniciantes - Como usar a função fread() da linguagem C para ler todo o conteúdo de um arquivo de uma só vezQuantidade de visualizações: 22866 vezes |
A função fread() se torna muito útil quando precisamos ler grandes blocos ou até mesmo todo o conteúdo de um arquivo. Neste caso, o conteúdo lido é guardado em um buffer para uso posterior. Veja o protótipo desta função:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- size_t fread(void *ptr, size_t size, size_t count, FILE *stream); Aqui ptr é um ponteiro para o buffer que receberá o conteúdo sendo lido. A capacidade deste buffer deverá ser no mínimo o valor de size multiplicado por count. O parâmetro size é o tamanho em bytes de cada elemento sendo lido. count é o número de elementos a serem lidos e stream é um ponteiro para o arquivo cujo conteúdo será lido. Se a leitura do conteúdo for feita com sucesso, a função fread() retornará a quantidade de elementos lidos com sucesso. No exemplo abaixo estamos lendo caracteres de 1 byte cada. Analise o código cuidadosamente e verá como é fácil modificá-lo para, por exemplo, ler apenas a metade do arquivo de cada vez: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ // vamos abrir o arquivo para leitura no modo binário FILE *arquivo = fopen("dados.txt", "rb"); if(arquivo != NULL){ // vamos obter o tamanho do arquivo em bytes fseek(arquivo, 0, SEEK_END); long tam_arquivo = ftell(arquivo); rewind(arquivo); // vamos alocar memória para todo o conteúdo do arquivo char *buffer = (char*)malloc(sizeof(char) * tam_arquivo); // a memória foi alocada com sucesso? if(buffer != NULL){ // vamos copiar o conteúdo do arquivo para o buffer size_t resultado = fread(buffer, 1, tam_arquivo, arquivo); // vamos verificar se a operação foi feita com sucesso if(resultado == tam_arquivo){ puts("O conteudo do arquivo foi lido com sucesso\n\n"); // vamos exibí-lo na tela puts(buffer); } } fclose(arquivo); // fecha o arquivo free(buffer); // libera a memória do buffer } puts("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular raiz quadrada em C usando a função sqrt()Quantidade de visualizações: 6320 vezes |
A raiz quadrada de um número pode ser obtida em C por meio da função sqrt(). Esta função recebe um valor double, ou seja, qualquer tipo que possa ser convertido em double e retorna um valor double. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char *argv[]) { int numero = 9; printf("A raiz quadrada de %d é %f", numero, sqrt(numero)); printf("\n\n"); system("pause"); return 0; } Ao executar este código nós teremos o seguinte resultado: A raiz quadrada de 9 é 3. É importante observar que não é possível obter a raiz quadrada de um número negativo. Caso seu código tente fazer isso, o resultado poderá ser imprevisível. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como escrever uma função strtoupper() em C para transformar uma palavra inteira em letras maiúsculasQuantidade de visualizações: 8825 vezes |
A linguagem C padrão não possui uma função para transformar todas as letras de uma palavra, frase ou texto em maiúsculas, embora alguns compiladores a forneça. O que temos em C padrão é a função: int toupper(int c); maiúsculo. Podemos tirar vantagem disso e escrever uma função strtoupper(). Veja a listagem logo abaixo (uma boa oportunidade para praticar ponteiros em C): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> void strtoupper(char *string){ while(*string){ *string = toupper(*string); string++; } } int main(int argc, char *argv[]) { char frase[] = "Programando em C"; printf("Frase normal: %s\n", frase); strtoupper(frase); printf("Em letras maiusculas: %s\n\n", frase); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: Frase normal: Programando em C Em letras maiusculas: PROGRAMANDO EM C |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |