Tecnologia da Informação
C - Listas encadeadas
Listas encadeadas são como vetores (ou 'array' em inglês). O maior diferencial de uma lista encadeada para um vetor é que cada elemento de uma lista possui um ponteiro apontando para o próximo elemento da lista.
Esse post cobrirá as seguintes operações com listas
- Criar uma lista
- Inserir um novo elemento
- Remover um elemento
- Procurar por um elemento
- Imprimir na tela todos os elementos da lista
Criando uma nova lista
Primeiro precisamos criar uma estrutura que armazenará os dados desejados
typedef struct elem{
int id; //Poderia ser qualquer tipo e quantidade de variaveis
struct elem *prox; //Ponteiro pra o próximo elemento
}Elem;
Agora, criamos um ponteiro para cabeca, que será o inicio de nossa lista
Lembrando quem em cab, não há id. Ou seja, o primeiro elemento da lista será cab->prox
Elem *cab; // Criamos cabeca
cab = (Elem*)malloc(sizeof(Elem)); //Alocamos espaço na memória para cabeca
cab->prox = NULL; //cabeca->proximo aponta para NULL
Inserindo um novo elementovoid Inserir(int id, Elem * cab) {
Elem * novo;
novo = (Elem*)malloc(sizeof(Elem));
novo->id = id;
novo->prox = cab->prox;
cab->prox = novo;
}
Removendo um elementovoid Remover(int id, Elem * cab) {
Elem *p;
Elem *p_ant;
p = cab->prox;
while(p!=NULL && p->id!=id){ //Roda até achar o id procurado
p_ant = p;
p=p->prox;
}
p_ant->prox = p->prox;
free(p);
}
Procurando por um elementoElem * Busca(int id, Elem * cab) {
Elem *p;
p = cab->prox;
while(p!=NULL && p->id!=id) {
p=p->prox;
}
return p;
}
Imprimindo todos os elementosvoid Imprime(Elem * cab){
printf("Lista:\n");
Elem *p;
p = cab->prox;
while(p != NULL) {
printf("Id %d\n", p->id);
p = p->prox;
}
}
Exemplo de uso das funçõesAgora criaremos uma lista e faremos algumas operações com ela
main(){
Elem *cab; // Criamos cabeca
cab = (Elem*)malloc(sizeof(Elem)); //Alocamos espaço na memória para cabeca
cab->prox = NULL; //cabeca->proximo aponta para NULL
Inserir(1, cab);
Inserir(2, cab);
Inserir(3, cab);
Inserir(4, cab);
Inserir(5, cab);
Imprime(cab); // Imprime 1, 2, 3
Remover(2, cab);
Imprime(cab); // Imprime 1, 3
Elem *elem = Busca(3, cab);
printf("\nId do elem: %d\n", elem->id);
free(cab); //Terminamos de usar cab, então podemos liberar a memória que estava sendo usada para ele
system("pause");
}
Bom, espero que esse post tenha ajudado na compreensão de listas encadeadas.
Lembrando que o código esta pronto, bastando apenas copiar e colar.
Download do código completo: Listas encadeadas.c
Simples Assim
loading...
-
Postgresql - Calcular Subtotal / Total - Equivalente Ao With Rollup No Mysql
Neste artigo, vamos mostrar 2 exemplos de como utilizar a função "SUM" para calcular o subtotal / total em uma consulta. Para quem usa o Mysql, a consulta que vamos fazer é semelhante ao "WITH ROLLUP". Caso ainda não conheça a função...
-
Postgresql - Criar Tabela Segunda Parte
Nesta segunda parte, vamos mostrar: como criar uma tabela. Vamos apresentar um exemplo da criação da tabela "tb_paciente";incluir registros em uma tabela utilizando o comando INSERT; criar uma coluna com preenchimento obrigatório ou...
-
[linux] Drop Caches
O Linux retém em memória dados carregados previamente do disco e os mantém em memória pelo tempo que for possível. Essa ação acelera o carregamento destes dados posteriormente. Essas áreas de memória se chamam caches. No entanto, nem sempre...
-
Nhibernate
NHibernate é uma biblioteca (Framework) que possibilita a conexão a um banco de dados Sql sem a necessidade do uso de strings de conexão. Com ele é possível persistir (receber e enviar) dados de uma tabela do banco de dados de maneira muito simples...
-
Mysql - Primeiros Passos
Instalar e gerenciar um banco de dados MySql é bem simples. InstalaçãoDownload e instalação do XAMPP, que da suporte ao MySql e a outras ferramentas como o phpMyAdmin, usado para gerenciar seus bancos de dados.Inicie o XAMPP e no modulo MySql clique...
Tecnologia da Informação