INTELIGÊNCIA ARTIFICIAL Curso: Ciências da Computação Prof:. Arimatéia Júnior
Sumário Definição de Estrutura de dados; Tipos de estrutura de dados; Implementação de estruturas de dados; Exercicios;
Programas consistem de duas partes: Algoritmos; Estrutura de dados. Introdução Programas consistem de duas partes: Algoritmos; Estrutura de dados. Um bom Programa , na realidade, é a combinação de ambos
Introdução A escolha e a implementação de uma boa estrutura de dados são tão importantes quanto as rotinas que manipulas esses dados. A forma como a informação é organizada e acessada é normalmente determinada pela natureza do programa.
Introdução A escolha e a implementação de uma boa estrutura de dados são tão importantes quanto as rotinas que manipulas esses dados. A forma como a informação é organizada e acessada é normalmente determinada pela natureza do programa.
Introdução As estruturas de dados são utilizadas para realizar o armazenamento e a recuperação de dados que se deseja trabalhar. Onde é meu lugar??
Introdução Existem basicamente 4 tipos de mecanismos responsáveis por essas condições: Fila; Pilha Lista; Árvore binária*.
FILA Uma fila é simplesmente uma lista linear de informações, que é acessada seguindo o principio: o primeiro que entra e o primeiro que sai (First In First Out); FIFO 1 3 1 2 5 4 Primeiro a sair Segundo ocupa o lugar do primeiro
FILA - Implementação Interface do tipo genérico da fila: 1. Função fila-cria: - Aloca dinamicamente a estrutura da fila; - Inicializa seus campos e retorna seu ponteiro. 2. Funcao fila_insere e funcao fila_retira: - Insere e retira, respectivamente, um valor real na fila. 3. Função fila_vazia: - Informa se a fila está ou não vazia. 4. Função libera_fila: - Destroi a fila, liberando toda a memória usada pela estrutura.
FILA - Implementação //cria uma fila //enfileira um novo elemento Fila* fila_cria (void); //cria uma fila void fila_insere (Fila* p, float v); //enfileira um novo elemento float fila_retira (Fila* p); //retira um elemento (primeiro) int fila_vazia (Fila* p); //verifica se a fila está vazia void fila_libera (Fila* p); //esvazia toda a estrutura alocada para a fila, liberando seus elementos
FILA - Implementação //cria uma fila //enfileira um novo elemento Fila* fila_cria (void); //cria uma fila void fila_insere (Fila* p, float v); //enfileira um novo elemento float fila_retira (Fila* p); //retira um elemento (primeiro) int fila_vazia (Fila* p); //verifica se a fila está vazia void fila_libera (Fila* p); //esvazia toda a estrutura alocada para a fila, liberando seus elementos
FILA - Implementação – Vetor (vet) armazena os elementos da fila. Typedef struct fila Fila; Implementacao de fila com vetor: – Vetor (vet) armazena os elementos da fila. – Estruturas de fila: #define Num_elementos 100 // numero máximo de elementos Typedef struct fila { int N; //número de elementos atualmente na fila int INI; //posição do próximo elemento na fila float Vet [Num_elementos ] ; } Fila ;
FILA - Implementação Agora que foi criado a estrutura da fila Inicia-se a construção da função responsável por criar a fila dentro do programa. Fila * fila_cria (void) Fila* fila_cria (void) { Fila* f = (Fila*) malloc (sizeof(Fila)); //alocando memoria f->n = 0; // inicializa a fila como vazia; f->ini = 0; // escolhe uma posição inicial; return f; }
FILA - Implementação Visão atual da fila Inicio Número de elementos atualmente na fila = 0 Número de elementos que a fila pode ter = 10 Fim
Verificar se ainda existe vagas na fila FILA - Implementação Os dois passos inicias na implementação foram completados. Passo seguinte, implementar a função responsável por inserir elementos na fila. Deve-se atentar as fatores de segurança no momento da inserção. Verificar se ainda existe vagas na fila
FILA - Implementação { int fim; if ( fn == Num_elementos) void fila_insere (Fila* f, float v) { int fim; if ( fn == Num_elementos) printf(“Fila lotada”); exit(1); } fim = (fini + fn); f->vet[fim] = v; fn++; void fila_insere (Fila* f, float v) { int fim; if (f-> == N) { printf (“Fila não tem espaço disponível”); exit (1); } fim = (f->ini + f->n)%N; //cálculo do índice do último elemento f->vet[fim] = v; f->n++; }
FILA - Implementação float fila_retira (Fila* f); { float v; if ( fila_vazia(f)) printf(“Fila vazia”); exit(1); } v = fvet[fini]; fini = fini+1; fn--; void fila_insere (Fila* f, float v) { int fim; if (f-> == N) { printf (“Fila não tem espaço disponível”); exit (1); } fim = (f->ini + f->n)%N; //cálculo do índice do último elemento f->vet[fim] = v; f->n++; }
Implementação da função fila_vazia FILA - Implementação Implementação da função fila_vazia int fila_vazia (Fila* f) { return (f->n == 0); }
Por fim, temos a função responsável pela liberação da memória alocada; FILA - Implementação Por fim, temos a função responsável pela liberação da memória alocada; Void libera_fila (Fila* f) { free(f); }