Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 14.923 ]
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();
}
Aplicações em listas dinâmicas
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Mint Xfce não mantém a conexão no wi-fi (2)
Problemas com Driver NVIDIA (5)
Warcraft II Remastered no Linux? (8)









