Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.852 ]
Olá pessoal,
Escrevi uma lista ligada (com alocação dinâmica) em C e comentei o código. Procurei explicar o máximo possível. Depois eu posto a rotina de remoção.
Espero que seja útil para o pessoal!
Grande abraço! :D
#include <stdio.h> #include <string.h> #include <malloc.h> /*Declaração do tipo nó para a lista, composto de ponteiro para o próximo nó e de um campo para dado que no caso é o campo char dado[30]; */ typedef struct no { char dado[30]; struct no *proximo; } no; no *primeiro = NULL; //Ponteiro para o primeiro elemento da lista no *ultimo = NULL; //Ponteiro para o último elemento da lista no *alocar; //Ponteiro para fazer alocação /*Rotina de busca Insere o dado em string e ela retorna o ponteiro em hexa para a região da memória para o qual o ponteiro está apontando. */ no * buscar(char *dado) { no *ponteiro; ponteiro = primeiro; while ((ponteiro)&&(strcmp(dado, ponteiro->dado)!=0)) { ponteiro = ponteiro->proximo; } return ponteiro; //Retorna o ponteiro para a região da memória //que está apontando (caso encontre) //Retorna o ponteiro NULL (caso em que não encontra) } /*Rotina que faz a inserção ao final da lista ligada O Parâmetro dado recebe um ponteiro para string A função não retorna valor algum */ void inserirAoFinal(char *dado) { alocar = (struct no *) malloc(sizeof(struct no)); //Faz alocação na memória if (!alocar) { //Se não for possível a alocação, sai do programa printf("Falta de memória"); exit(0); } strcpy(alocar->dado, dado); //Copia o dado para o novo nó alocado if (!primeiro) { //Se não houver elemento ainda na lista, insere //insere na primeira posição apontando o ponteiro //"primeiro" e último primeiro = alocar; ultimo = alocar; } else //se não... { ultimo->proximo = alocar; //Aponta o "próximo" do último elemento //para o novo nó alocado ultimo = alocar; //Aponta o marcador de "ultimo" para o //novo nó alocado } ultimo->proximo = NULL; //Aponta o "próximo" do último nó para o ponteiro //nulo, para verificação de fim de lista } /*Imprime todos os elementos da lista na tela na ordem em que foram inseridos */ void imprimir() { no *ponteiro = primeiro; while (ponteiro) { printf("\n%s", ponteiro->dado); ponteiro = ponteiro->proximo; } } /*Rotina principal com algumas inserções, uma impressão e uma busca no final */ int main() { char dado[30]; printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); printf("\nInserir: "); gets(dado); inserirAoFinal(dado); imprimir(); printf("\nInserir para buscar: "); gets(dado); printf("%p", buscar(dado)); getchar(); }
Perceptron Bolado - perceptron simples escrito em C
Mostra valores da tabela ascii
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Ubuntu com problemas no áudio (3)
Rust é o "C da nossa geração"? (5)
Debian 13 "trixie&... lançado! (44)
Gerenciador de arquivos é finalizado ao abrir pasta específica (2)