- Informação Carregada Em Cada NO
- Pilha Encadeada
- Fila Encadeada
- Lista Simplesmente Encadeada
- Lista Duplamente Encadeada
- Tabela HASH com Lista Simplesmente Encadeada
- Árvore Binária de Busca
Necessário compilador GCC
sudo apt update
sudo apt install build-essential
Clone
Execute todos comandos do GCC a partir da pasta raiz: tads
git clone https://github.com/dalmofelipe/tads
cd tads
A informação que cada NO das tads carregam é básica para exemplos, possui apenas um inteiro ID e string para um texto. O arquivo info.h
contem a estrutura e metodos auxiliares.
typedef struct info {
int ID;
char nome[MAXBUFF];
// ...
} INFO;
INFO INFO_default_value();
INFO INFO_set_value(int, char *);
INFO INFO_set_interativo(char *);
bool INFO_is_equal(INFO, INFO);
É uma estrutura de dados que segue o princípio FILO (First In, Last Out). Isso significa que o último elemento adicionado à pilha será o primeiro a ser removido. A pilha é utilizada em diversas aplicações que requerem esse tipo de comportamento, como a avaliação de expressões matemáticas, gerenciamento de chamadas de função (stack frames), e mais.
gcc pilha.c -o pilha && ./pilha
Nós - Cada elemento da pilha é armazenado em um nó que contém um valor (ou dados) e um ponteiro para o próximo nó na pilha.
Topo - A pilha mantém uma referência apenas ao nó no topo, que é o elemento mais recentemente adicionado.
Sem Nó Cabeça - Diferentemente de algumas implementações que utilizam um nó cabeça como um marcador ou sentinela para simplificar operações, esta estrutura não utiliza esse nó extra.
void PILHA_inicia(PILHA *);
bool PILHA_vazia(PILHA *);
void PILHA_empilhar(PILHA *, INFO);
INFO PILHA_get_topo(PILHA *);
INFO PILHA_desempilhar(PILHA *);
void PILHA_imprime(PILHA *);
void PILHA_drop(PILHA *);
É uma estrutura de dados que segue o princípio FIFO (First In, First Out), ou seja, o primeiro elemento adicionado à fila será o primeiro a ser removido. A fila é análoga a uma fila de pessoas em um banco, onde as pessoas são atendidas na ordem em que chegam. São amplamente utilizadas em sistemas de processamento de dados, onde a ordem de chegada dos dados precisa ser mantida, como em filas de impressão, processamento de tarefas em sistemas operacionais, etc.
gcc fila.c -o fila && ./fila
Nós - Cada elemento da fila é armazenado em um nó que contém um valor (ou dados) e um ponteiro para o próximo nó na fila.
Inicio e Fim - A fila mantém duas referências, uma para nó no inicio e outro para o fim da fila, onde o elemento mais recentemente adicionado pela fim da fila.
Sem Nó Cabeça - Esta implementação não utiliza esse nó extra.
void FILA_inicia(FILA *);
bool FILA_vazia(FILA *, bool);
void FILA_enfileirar(FILA *, INFO);
INFO FILA_get_primeiro(FILA *);
INFO FILA_desemfilelar(FILA *);
void FILA_imprime(FILA *);
void FILA_drop(FILA *);
Uma lista simplesmente encadeada é uma estrutura de dados fundamental em ciência da computação. Ela consiste em uma coleção de elementos, onde cada elemento (ou nó) contém um valor e uma referência (ou ponteiro) para o próximo nó na lista. É chamada de "simplesmente encadeada" porque cada nó tem apenas uma referência para o próximo nó.
gcc lista.c -o lista && ./lista
Nós - Elemento da lista que armazenado o valor e um ponteiro para o próximo nó da lista.
Inicio ou Cabeça - Referência para nó do inicio lista.
Fim ou Calda - Referências para nó do fim da fila.
Tamanho - Valor inteiro que é atualizado de acordo com a quantidade de Nos na lista.
void LISTA_inicia(LISTA *);
bool LISTA_vazia(LISTA *, bool);
void LISTA_add_inicio(LISTA *, INFO);
void LISTA_add_fim(LISTA *, INFO);
void LISTA_add_posicao(LISTA *, INFO, int);
INFO LISTA_get_info(LISTA *, int);
int LISTA_buscar_posicao_info(LISTA *, INFO);
INFO LISTA_remove_inicio(LISTA *);
INFO LISTA_remove_fim(LISTA *);
INFO LISTA_remover_busca(LISTA *, INFO);
INFO LISTA_remover_posicao(LISTA *, int);
void LISTA_prioridade_maxima(LISTA *, int);
void LISTA_prioridade_minima(LISTA *, int);
void LISTA_prioridade_deslocamento(LISTA *, int, int);
void LISTA_swap_info(LISTA *, int, int);
void LISTA_imprime(LISTA *);
void LISTA_drop(LISTA *);
Uma lista duplamente encadeada é uma estrutura de dados que consiste em uma sequência de elementos, chamados de nós, onde cada nó contém um valor e dois ponteiros: um que aponta para o nó anterior e outro que aponta para o nó seguinte. Isso permite a navegação tanto para frente quanto para trás na lista. Diferente de uma lista simplesmente encadeada (que possui apenas um ponteiro para o próximo nó), a lista duplamente encadeada facilita operações de inserção e remoção de nós em qualquer posição, já que não depende apenas de um único sentido de navegação.
-
Permite fácil navegação bidirecional.
-
Inserções e remoções em qualquer posição são mais fáceis comparadas a uma lista simplesmente encadeada.
-
Útil para implementar estruturas como listas de navegação (onde é necessário voltar a um elemento anterior) e outras que exigem eficiência em operações de remoção e inserção.
-
Ocupa mais memória do que uma lista simplesmente encadeada devido ao armazenamento de dois ponteiros.
-
Possui uma implementação mais complexa, principalmente em operações que exigem manipulação de ponteiros.
gcc lst_dupla.c -o lst_dupla && ./lst_dupla
Nós - Cada nó contém três partes principais: um valor ou dado, um ponteiro para o nó anterior e um ponteiro para o próximo nó.
Inicio ou Cabeça - O primeiro elemento da lista, que geralmente possui o ponteiro anterior nulo.
Fim ou Calda - O último elemento da lista, com o ponteiro para o próximo nó nulo.
Inserção e remoção - A lista duplamente encadeada permite inserções e remoções eficientes tanto no início quanto no final da lista, ou em qualquer posição intermediária, já que possui ponteiros para ambos os lados.
Tamanho - Valor inteiro que é atualizado de acordo com a quantidade de Nos na lista.
void LST_DUPLA_inicia(LISTA *);
bool LST_DUPLA_vazia(LISTA *, bool);
void LST_DUPLA_add_inicio(LISTA *, INFO);
void LST_DUPLA_add_fim(LISTA *, INFO);
void LST_DUPLA_add_posicao(LISTA *, INFO, int);
INFO LST_DUPLA_get_info(LISTA *, int);
int LST_DUPLA_buscar_posicao_info(LISTA *, INFO);
INFO LST_DUPLA_remove_inicio(LISTA *);
INFO LST_DUPLA_remove_fim(LISTA *);
INFO LST_DUPLA_remover_busca(LISTA *, INFO);
INFO LST_DUPLA_remover_posicao(LISTA *, int);
void LST_DUPLA_prioridade_maxima(LISTA *, int);
void LST_DUPLA_prioridade_minima(LISTA *, int);
void LST_DUPLA_prioridade_deslocamento(LISTA *, int, int);
void LST_DUPLA_swap_info(LISTA *, int, int);
void LST_DUPLA_imprime(LISTA *);
void LST_DUPLA_drop(LISTA *);
WIP...
WIP...