Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.901 ]
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(); }
Como fazer raízes a partir de 2 e 3 no c.
Exemplo de janela utilizando o compilador Vala
Simulador de cronometro com 2 digitos - otimizado
Nenhum comentário foi encontrado.
Desktop Linux ganha fôlego enquanto distros refinam experiência e segurança
Wayland em alta, IA em debate e novos ventos para distros e devices
Qt 6.10 e Python 3.14 puxam o ritmo do software livre nesta quarta
Atualizações de Apps, Desktop e Kernel agitam o ecossistema Linux nesta terça-feira
Como mudar o nome de dispositivos Bluetooth via linha de comando
Adicionando o repositório backports no Debian 13 Trixie
Warcraft II Reforged no Linux? (0)
Erro ao fazer remaster usando Penguin eggs (0)
queria saber como instalar o android power tools igual ao winux no lin... (7)