Tipos de Dados - lucassouzavieira/DataStructures GitHub Wiki
Tipos de Dados
Nós
Nós para listas encadeadas
struct Node{ long int key; struct Node* pointer; };
Nós para listas duplamente encadeadas
struct DoubleNode { long int key; struct DoubleNode* next; struct DoubleNode* previous; };
Nós para árvores binárias de busca
struct nodeBST{ long int key; struct nodeBST* right; struct nodeBST* left; };
Nós para árvores AVL
struct nodeAVL{ long int key; int balanceFactor; struct nodeAVL* right; struct nodeAVL* left; };
Nós para árvores Red-Black
struct nodeRB{ long int key; int blackHeight; Color color; struct nodeRB* right; struct nodeRB* left; struct nodeRB* father; };
As structs acima são referenciadas pelo projeto da seguinte maneira
typedef struct DoubleNode dnode;
typedef struct Node node;
typedef struct nodeBST nodetree;
typedef struct nodeAVL nodeavl;
typedef struct nodeRB noderb;
Listas
###Lista Encadeada
Listas encadeadas são representadas pela seguinte estrutura
struct List { node* list; node* last; long int nodes; };
A variável list
representa a Lista propriamente dita, e é sobre ela que as operações de lista são executadas
A variável last
armazena o endereço do último nó da lista
###Lista Circular
Listas Circulares são representadas pela seguinte estrutura
struct CircleList { node* list; long int nodes; };
A variável list
representa a Lista Circular propriamente dita, e é sobre ela que as operações são executadas
###Lista Dupla
Listas Duplas são representadas pela seguinte estrutura
struct DoublyList { dnode* list; dnode* startOfList; dnode* endOfList; long int nodes; };
A variável list
representa a Lista Dupla propriamente dita, e é sobre ela que as operações são executadas
Pilha e Fila
###Pilha (dinâmica)
Pilhas são representadas pela seguinte estrutura
struct Stack { node* stack; node* top; long int nodes; };
A exemplo das listas, a variável stack
representa a pilha de elementos, e é sobre ela que as operações são executadas.
###Fila (dinâmica)
Filas são representadas pela seguinte estrutura
struct Queue { node* queue; node* endOfQueue; long int nodes; };
Da mesma maneira que a pilha, a variável queue
representa a fila de elementos.
Deque
Deques são representadas pela seguinte estrutura
struct Deque { node* startOfQueue; node* endOfQueue; unsigned long int nodes; };
Pilha e Fila (estáticas)
Pilhas e Filas estáticas usam o mesmo tipo abstrato de dado:
struct Array { long int* vector; long int size; long int last; };
Onde as operações de pilha/fila são executadas sobre vector
.
Heap
Heaps são representados pela seguinte estrutura
struct Heap{ long int *vector; long int elements; long int maxElements; };
Onde vector
é o vetor utilizado para as operações de Heap
##Árvores Binárias
Árvore Binária de Busca
Um nó de uma BST é definido pela estrutura:
struct nodeBST{ long int key; struct nodeBST* right; struct nodeBST* left; };
typedef struct nodeBST nodetree;
E a árvore completa é definida como:
struct BinarySearchTree{ nodetree* root; long int nodes; };
Onde root
representa a árvore propriamente dita, e é sobre ela que são executadas as operações
Árvore AVL
Um nó de uma Árvore AVL é definido pela estrutura:
struct nodeAVL{ long int key; int balanceFactor; struct nodeAVL* right; struct nodeAVL* left; };
typedef struct nodeAVL nodeavl;
E a árvore completa é definida como:
struct AVLTree{ nodeavl* root; long int nodes; };
Onde root
representa a árvore propriamente dita, e é sobre ela que são executadas as operações