A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

TADS – Tipos Abstratos de Dados

Apresentações semelhantes


Apresentação em tema: "TADS – Tipos Abstratos de Dados"— Transcrição da apresentação:

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> 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); ... }


Carregar ppt "TADS – Tipos Abstratos de Dados"

Apresentações semelhantes


Anúncios Google