C - Listas encadeadas
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 elemento
void Inserir(int id, Elem * cab) {
Elem * novo;
novo = (Elem*)malloc(sizeof(Elem));
novo->id = id;
novo->prox = cab->prox;
cab->prox = novo;
}

Removendo um elemento
void 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 elemento
Elem * Busca(int id, Elem * cab) {
Elem *p;
p = cab->prox;
while(p!=NULL && p->id!=id) {
p=p->prox;
}
return p;
}

Imprimindo todos os elementos
void 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ções
Agora 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








.