Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.745 ]
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(); }
light_konsole - konsole de ultima hora
Função switch q armazena sequencias
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Linux Lite Demorando Muito Para Ligar (1)
PC não liga no filtro de linha (4)
Remoção de propaganda com o programa Comskip[AJUDA] (2)