Estruturas de Dados: Pilhas, Filas e Árvores em C

Classificado em Design e Engenharia

Escrito em em português com um tamanho de 2,85 KB

Pilhas: Declaração em Vetor

#define tam 10
typedef struct {
    int topo;
    int el[tam]; // Lugar onde serão armazenados os dados
} pilha;

Operações com Pilhas

  • Inicialização: void inicia(pilha *p) { p->topo = -1; }
  • Verificar se está cheia: int cheia(pilha *p) { return (p->topo == tam - 1); }
  • Verificar se está vazia: int vazia(pilha *p) { return (p->topo == -1); }
  • Inserção (Push): int push(pilha *p, int val) { if (cheia(p)) return 0; p->el[++p->topo] = val; return 1; }
  • Remoção (Pop): int pop(pilha *p, int *val) { if (vazia(p)) return 0; *val = p->el[p->topo--]; return 1; }

Filas: Implementação

  • Inicialização: void fila_vazia(int *i, int *f) { *i = 0; *f = 0; }
  • Inserção: int ins_fila(int *fila, int *inicio, int *fim, int val) { if (((*fim + 1) % tam) == *inicio) return 0; else { *fim = (*fim + 1) % tam; fila[*fim] = val; return 1; } }
  • Remoção: int rem_fila(int *fila, int *inicio, int *fim, int *val) { if (*fim == *inicio) return 0; else { *inicio = (*inicio + 1) % tam; *val = fila[*inicio]; return 1; } }
  • Impressão: void imprime(int *fila, int inicio, int fim) { ... }

Árvores Binárias

Uma árvore estritamente binária é aquela em que todo nó que não é folha possui sub-árvores esquerda e direita não vazias.

Árvores perfeitamente balanceadas: A sub-árvore à esquerda possui (N div 2) nós e a sub-árvore à direita possui N - (N div 2) - 1 nós.

Conceitos Fundamentais

  • Raiz: Nó no topo da árvore.
  • Descendentes: Nós ligados abaixo de um nó específico.
  • Altura: O nível máximo da árvore.
  • Folha: Nós que não possuem descendentes.
  • Grau: Número de descendentes diretos.

Percursos em Árvores

  • PreOrder: Raiz, Esquerda, Direita.
  • InOrder: Esquerda, Raiz, Direita.
  • PosOrder: Esquerda, Direita, Raiz.

Implementação dos Percursos

void Pre_Ordem(struct no_arvore *R) { if (R != NULL) { printf("%i ", R->info); Pre_Ordem(R->esq); Pre_Ordem(R->dir); } }

void In_Ordem(struct no_arvore *R) { if (R != NULL) { In_Ordem(R->esq); printf("%i ", R->info); In_Ordem(R->dir); } }

void Pos_Ordem(struct no_arvore *R) { if (R != NULL) { Pos_Ordem(R->esq); Pos_Ordem(R->dir); printf("%i ", R->info); } }

Entradas relacionadas: