Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Pesquisando um nó em uma lista ligada simples em C e retornando um ponteiro para o nó encontradoQuantidade de visualizações: 1056 vezes |
Nesta dica mostrarei como é possível buscar um nó em uma lista ligada simples (singly linked list) em C e retornar um ponteiro para o nó encontrado, ou seja, alterações no conteúdo do nó retornado afetarão também o nó original. Veja:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // função que permite pesquisar um nó na lista // ligada e retornar o nó como referência struct No *pesquisar_no(int valor, struct No *inicio) { struct No *n = NULL; // declara um novo nó struct No *temp = inicio; // aponta para o início da lista if (temp != NULL) { do { // é o valor que estamos buscando? if (temp->valor == valor) { // retornamos um ponteiro para o nó encontrado n = temp; return n; // e retornamos } // não encontrei. vamos continuar a busca temp = temp->proximo; } while (temp != NULL); } else { // a lista está vazia? return n; } } Veja que a função recebe como argumentos o valor a ser pesquisado e um ponteiro para o início da lista, e ela retorna um ponteiro para o nó encontrado, ou NULL caso o valor pesquisado não for encontrado. Veja a listagem completa abaixo: ---------------------------------------------------------------------- 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ó // função que permite exibir os valores de // todos os nós da lista void exibir(struct No *n) { if (n != NULL) { do { printf("%d\n", n->valor); n = n->proximo; } while (n != NULL); } else printf("A lista esta vazia\n\n"); } // função que permite pesquisar um nó na lista // ligada e retornar o nó como referência struct No *pesquisar_no(int valor, struct No *inicio) { struct No *n = NULL; // declara um novo nó struct No *temp = inicio; // aponta para o início da lista if (temp != NULL) { do { // é o valor que estamos buscando? if (temp->valor == valor) { // retornamos um ponteiro para o nó encontrado n = temp; return n; // e retornamos } // não encontrei. vamos continuar a busca temp = temp->proximo; } while (temp != NULL); } else { // a lista está vazia? return n; } } // função que permite inserir nós no // final da lista. // veja que a função recebe o valor a ser // armazenado em cada nó e um ponteiro para o // início da lista. A função retorna um // ponteiro para o início da lista struct No *inserir_final(struct No *n, int v) { // reserva memória para o novo nó struct No *novo = (struct No*) malloc(sizeof (struct No)); novo->valor = v; // verifica se a lista está vazia if (n == NULL) { // é o primeiro nó...não deve apontar para // lugar nenhum novo->proximo = NULL; return novo; // vamos retornar o novo nó como sendo o início da lista } else { // não está vazia....vamos inserir o nó no final // o primeiro passo é chegarmos ao final da lista struct No *temp = n; // vamos obter uma referência ao primeiro nó // vamos varrer a lista até chegarmos ao último nó while (temp->proximo != NULL) { temp = temp->proximo; } // na saída do laço temp aponta para o último nó da lista // novo será o último nó da lista...o campo próximo dele deve // apontar para NULL novo->proximo = NULL; // vamos fazer o último nó apontar para o nó recém-criado temp->proximo = novo; return n; // vamos retornar o início da lista intacto } } int main(int argc, char *argv[]) { // declara a lista struct No *inicio = NULL; // vamos inserir quatro valores no final // da lista inicio = inserir_final(inicio, 45); inicio = inserir_final(inicio, 3); inicio = inserir_final(inicio, 98); inicio = inserir_final(inicio, 47); // e vamos listar os nós da lista exibir(inicio); // vamos pesquisar o nó com valor 98 struct No *pesquisa = pesquisar_no(98, inicio); // o nó foi encontrado? if (pesquisa != NULL) { printf("\nO no foi encontrado: %d\n\n", pesquisa->valor); } else { puts("\nO no nao foi encontrado.\n\n"); } // para termos certeza de que o nó foi retornado por // referência, vamos alterar o seu valor pesquisa->valor = 350; // e vamos listar os nós da lista novamente exibir(inicio); puts("\n\n"); return 0; } Ao executar esse código você terá o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 45 3 98 47 O nó foi encontrado: 98 45 3 350 47 De fato podemos ver que o valor 98 foi substituído por 350, o que confirma que o nó realmente foi obtido por referência e não por cópia. |
Link para compartilhar na Internet ou com seus amigos: |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de C - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30Quantidade de visualizações: 699 vezes |
Pergunta/Tarefa: Considere os seguintes vetores: // dois vetores de 5 inteiros cada int a[] = {50, -2, 9, 5, 17}; int b[] = new int[5]; Sua saída deverá ser parecida com: Valores no vetor a: 50 -2 9 5 17 Valores no vetor b: -20 32 21 25 13 Veja a resolução comentada deste exercício usando 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> #include <locale.h> int main(int argc, char *argv[]){ setlocale(LC_ALL,""); // para acentos do português // dois vetores de 5 inteiros cada int a[] = {50, -2, 9, 5, 17}; int b[5]; int i; // vamos preencher o segundo vetor de forma que a soma dos // valores de seus elementos seja 30 for(i = 0; i < 5; i++){ b[i] = 30 - a[i]; } // vamos mostrar o resultado printf("Valores no vetor a: "); for(i = 0; i < 5; i++){ printf("%d ", a[i]); } printf("\nValores no vetor b: "); for(i = 0; i < 5; i++){ printf("%d ", b[i]); } printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como verificar se uma string é igual, maior ou menor que outra em C usando a função strcmp()Quantidade de visualizações: 22416 vezes |
A função strcmp() da linguagem C pode ser usada para verificar se uma string é igual, maior ou menor que outra. Esta função, presente no header string.h aceita duas strings e retorna um valor inteiro: 0 se as strings forem iguais; maior que 0 se a primeira string for maior que a segunda e menor que 0 se a primeira string for menor que a segunda. Veja um exemplo de seu uso: ---------------------------------------------------------------------- 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 <string.h> int main(int argc, char *argv[]){ char palavra1[] = "Java"; char palavra2[] = "JavaScript"; if(strcmp(palavra1, palavra2) == 0){ printf("As palavras sao iguais"); } else if(strcmp(palavra1, palavra2) > 0){ printf("A primeira string e maior que a segunda"); } else if(strcmp(palavra1, palavra2) < 0){ printf("A segunda string e maior que a primeira"); } puts("\n\n"); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: A segunda string é maior que a primeira. |
C ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cosseno de um ângulo em C usando a função cos() do header math.h - Calculadora de cosseno em CQuantidade de visualizações: 918 vezes |
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria. No entanto, é sempre importante entender o que é a função cosseno. Veja a seguinte imagem: Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles. Assim, o cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula: \[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \] Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função cos() da linguagem C. Esta função, que faz parte do header math.h, recebe um valor numérico double e retorna um valor double, ou seja, também numérico) entre -1 até 1 (ambos inclusos). Veja: ---------------------------------------------------------------------- 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[]){ // vamos calcular o cosseno de três números printf("Cosseno de 0 = %f\n", cos(0)); printf("Cosseno de 1 = %f\n", cos(1)); printf("Cosseno de 2 = %f\n", cos(2)); printf("\n\n"); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: Cosseno de 0 = 1.000000 Cosseno de 1 = 0.540302 Cosseno de 2 = -0.416147 Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo: |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Java - Como calcular juros simples e composto - Calculando juros simples e montante na linguagem Java |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento 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 |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades 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 |