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

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

Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 1 TADS – Tipos Abstratos de Dados Exemplos: Lineares:

Apresentações semelhantes


Apresentação em tema: "Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 1 TADS – Tipos Abstratos de Dados Exemplos: Lineares:"— Transcrição da apresentação:

1 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 1 TADS – Tipos Abstratos de Dados Exemplos: Lineares: Listas Pilhas Filas Não lineares: Árvores Grafos

2 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 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 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 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 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 4 #define MAX 100 struct Lista { int qtde; char elemento[MAX]; }; Estrutura de dados para a lista:

5 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 5 #define MAX 100 struct Lista { int qtde; char elemento[MAX]; }; void iniciaLista(struct Lista* lista) { lista->qtde = 0; } Inicialização da lista:

6 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 6 #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 (lista->qtde-1)) printf("ERRO: indice fora dos limites"); else dado = lista->elemento[k]; return dado; } Acesso ao k-esimo elemento:

7 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 7 #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++; } Inserção no final da lista:

8 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 8 #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 (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++; } Inserção numa posição específica:

9 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 9 #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 (lista->qtde-1)) printf("ERRO: indice fora dos limites"); else { for(i = k; i qtde; i++) lista->elemento[i] = lista->elemento[i+1]; lista->qtde--; } Exclusão de um elemento:

10 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 10 #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 qtde; i++) { p[i] = lista->elemento[i]; } p[i] = '\0'; return p; } Conversão para String:

11 Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 11 #define MAX 100 #include #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));... } Teste:


Carregar ppt "Eng. de Computação – Estruturas de Dados I – Listas Sequenciais prof. Henrique Monteiro Cristovão 1 TADS – Tipos Abstratos de Dados Exemplos: Lineares:"

Apresentações semelhantes


Anúncios Google