1 / 11

TADS – Tipos Abstratos de Dados

TADS – Tipos Abstratos de Dados. Exemplos: Lineares: Listas Pilhas Filas Não lineares: Árvores Grafos. Listas Lineares.

callia
Download Presentation

TADS – Tipos Abstratos de Dados

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TADS – Tipos Abstratos de Dados • Exemplos: • Lineares: • Listas • Pilhas • Filas • Não lineares: • Árvores • Grafos

  2. Listas Lineares É uma sequência de elementos dispostos numa ordem estritamente linear, um após o outro, com operações de alto nível, tais como: acesso, inserção, exclusão de elementos etc. Listas sequenciais: implementadas através de vetores. Listas encadeadas: implementadas através de alocação dinâmica de memória.

  3. Operações Primitivas • Iniciar uma lista. • Acessar o k-esimo nó. • Inserir um nó após o k-esimo nó. • Remover o k-esino nó. • Determinar o número de nós. • Localizar um determinado nó a partir de uma informação dele. • etc.

  4. Estrutura de dados para a lista: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • };

  5. Inicialização da lista: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • void iniciaLista(struct Lista* lista) { • lista->qtde = 0; • }

  6. Acesso ao k-esimo elemento: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • // acessa o k-esimo elemento. Considera primeira posição = zero • char acessa(struct Lista* lista, int k) { • char dado; • // se o índice k está fora da faixa permitida • if(k<0 || k>(lista->qtde-1)) • printf("ERRO: indice fora dos limites"); • else • dado = lista->elemento[k]; • return dado; • }

  7. Inserção no final da lista: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • void insereFinal(struct Lista* lista, char novoDado) { • int i; • // se o índice k está fora da faixa permitida • if(lista->qtde > MAX-1) • printf("ERRO: indice fora dos limites"); • else { • lista->elemento[lista->qtde] = novoDado; • lista->qtde++; • } • }

  8. Inserção numa posição específica: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • void inserePosicao(struct Lista* lista, int k, char novoDado) { • int i; • // se o índice k está fora da faixa permitida • if(k<0 || k>(lista->qtde-1) || (lista->qtde > MAX-1)) • printf("ERRO: indice fora dos limites"); • else { • for(i = lista->qtde; i > k; i--) • lista->elemento[i] = lista->elemento[i-1]; • lista->elemento[k] = novoDado; • lista->qtde++; • } • }

  9. Exclusão de um elemento: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • void exclui(struct Lista* lista, int k) { • int i; • // se o índice k está fora da faixa permitida • if(k<0 || k>(lista->qtde-1)) • printf("ERRO: indice fora dos limites"); • else { • for(i = k; i < lista->qtde; i++) • lista->elemento[i] = lista->elemento[i+1]; • lista->qtde--; • } • }

  10. Conversão para String: • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • char* extraiString(struct Lista* lista) { • int i; • char* p; • p = (char*)malloc(lista->qtde+1); • for(i = 0; i < lista->qtde; i++) { • p[i] = lista->elemento[i]; • } • p[i] = '\0'; • return p; • }

  11. Teste: • #define MAX 100 • #include <stdio.h> • #include <stdlib.h> • #define MAX 100 • struct Lista { • int qtde; • char elemento[MAX]; • }; • // protótipos... • int main(int argc, char *argv[]) { • char aux; • struct Lista palavra; • iniciaLista(&palavra); • insereFinal(&palavra, 'a'); • insereFinal(&palavra, 'r'); • insereFinal(&palavra, 'o'); • printf("%s \n", extraiString(&palavra)); • aux = acessa(&palavra, 1); • inserePosicao(&palavra, 2, 'm'); • exclui(&palavra, 1); • insereFinal(&palavra, 'r'); • printf("%s \n", extraiString(&palavra)); • ... • }

More Related