Lista ligada simples, algoritmos de inserção, busca e impressão
Publicado por Perfil removido (última atualização em 19/03/2010)
[ Hits: 15.043 ]
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();
}
Pilha, algoritmos push, pop e imprimir explicados
Árvore binária de busca, algoritmos de inserção, caminhamento e busca explicados
Algoritmo de ordenação: Selection Sort
Nenhum comentário foi encontrado.
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









