Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.759 ]
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(); }
Calculo de fatorial em C++ com o Qt Creator
Resolvendo Equações de 1º e 2º grau
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Meus HDs não aparecem mais no boot da placa mãe (12)
Acabei zuando meu Linux inteiro e estou desesperado (10)
Linux Mint com GForce 630 e 2 monitores dos quais só um está na resolu... (2)