Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.969 ]
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();
}
Usando dois contadores em uma estrutura de repetição simples
Utilizando ponteiros na manipulação de strings
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (10)
Assisti Avatar 3: Fogo e Cinzas (3)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (42)









