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