Skip to content

Latest commit

 

History

History
244 lines (166 loc) · 8.01 KB

README.md

File metadata and controls

244 lines (166 loc) · 8.01 KB

TADs - Tipos Abstratos de Dados Encadeados em C


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

Informação Carregada Em Cada NO

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);

Pilha Encadeada

É 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.


Compilar e Executar

gcc pilha.c -o pilha && ./pilha

Estrutura

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.

Métodos e Procedimentos

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 *);

Fila Encadeada

É 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.

Compilar e Executar

gcc fila.c -o fila && ./fila

Estrutura

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.

Métodos e Procedimentos

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 *);

Lista Simplesmente Encadeada

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

Estrutura

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.

Métodos e Procedimentos

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 *);

Lista Duplamente Encadeada

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.

Vantagens:

  • 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.

Desvantagens:

  • 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.

Compilar e Executar

gcc lst_dupla.c -o lst_dupla && ./lst_dupla

Estrutura

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.

Métodos e Procedimentos

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 *);

Tabela HASH com Lista Simplesmente Encadeada

WIP...


Arvore Binária de Busca

WIP...