Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.715 ]
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(); }
Classe para manipulação de números complexos
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (16)
Arch Linux - Guia para Iniciantes (2)
Problemas ao instalar o PHP (11)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)