Estruturas de Dados I Listas Estáticas

Documentos relacionados
INE5408 Estruturas de Dados

Filas. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

BCC202 - Estrutura de Dados I

10.1. Aula 10: Pilhas. O conceito de pilha. Algoritmos de inserção e remoção. Exemplo: Notação Polonesa

Listas Lineares. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.1

LP II Estrutura de Dados

LISTAS LINEARES. Estrutura de Dados

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Aula 3 Listas Lineares Sequenciais Ordenadas. prof Leticia Winkler

Estrutura de Dados. Ricardo José Cabeça de Souza Parte 9

Estruturas de Dados I

Estrutura de Dados. Estrutura de Dados Recursividade. Exemplo: 5! = 5 x 4! 4! = 4 x 3! 3! = 3 X 2! 2! = 2 x 1! 1! = 1 x 0!

Listas Lineares. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Aula 2 Listas Lineares Sequenciais. prof Leticia Winkler

Hashing. ACH Introdução à Ciência da Computação II. Delano M. Beder

ESTRUTURA DE DADOS LISTAS LINEARES

22/08/2011. Fila. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Fila. O que é? Para que serve?

Estruturas de Dados Estruturas de Dados Fundamentais

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Aula 15: Pesquisa em Memória Primária. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas (Parte II) Prof. Tiago A. E. Ferreira

Filas Implementação Sequencial

Fila. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Fila. Algoritmos e Estruturas de Dados I

SCC Algoritmos e Estruturas de Dados I

Estrutura de Dados Listas

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Árvores B. Árvores B. Estrutura de Dados II Jairo Francisco de Souza

Aula 10 Alocação Dinâmica de Memória Listas Encadeadas. prof Leticia Winkler

Estruturas de Dados Filas

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Universidade de São Paulo

Tabelas de dispersão/hash

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Árvores B. Árvores B. Estrutura de Dados II Jairo Francisco de Souza

Lista de Exercícios 04

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

2. Listas 3. Listas ligadas simples 4. Operações dentro das listas 5. Listas Circulares 6. Listas Duplamente Ligadas 7. Pilhas 8.

Exemplos. Alocação Dinâmica de Pilhas. Pilhas. Pilhas. Implementação Seqüencial X Encadeada. SCE 182 Algoritmos e Estruturas de Dados I

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

EAD PILHA - DEFINIÇÃO

Lista de Exercícios sobre Listas Implementadas por Encadeamento

LINGUAGEM C: ARRAY: VETORES E MATRIZES

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

Estruturas de Dados em C++ Conceitos. Leandro Tonietto jun-09

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

O que é um jogo digital?

Estruturas de Dados com Jogos. Capítulo 2 Pilhas - Alocação Sequencial e Estática

Listas: a última das 3 estruturas lineares (Pilhas, Filas e Listas)

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Listas Ligadas (Encadeadas) Listas Simplesmente Encadeadas

Complexidade de Algoritmos

Programação: Vetores

16/11/2015 Lista Tipo de dado Lista - Implementação Lista - Implementação Lista - Implementação 3

Pilhas e Filas. Nádia Félix e Hebert Coelho

Fundamentos de Programação

Transcrição:

Estruturas de Dados I Listas Estáticas

Estrutura de Dados Lista - Definição Seqüência de um ou mais itens x 1,x 2,,x n, na qual x i é de um determinado tipo e n representa o tamanho da lista linear. Sua principal propriedade estrutural envolve as posições relativas dos itens em uma dimensão. Assumindo n 1, x1 é o primeiro item da lista e x n é o último item da lista. x i precede x i+1 para i = 1,2,,n 1 x i sucede x i-1 para i = 2,3,,n o elemento x i é dito estar na i-ésima posição da lista.

Estrutura de Dados Lista - Definição Uma Estrutura de Dados Lista é um conjunto de dados dispostos e/ou acessáveis em uma seqüência determinada. Este conjunto de dados pode possuir uma ordem intrínseca (Lista Ordenada) ou não. Este conjunto de dados pode ocupar espaços de memória fisicamente consecutivos, espelhando a sua ordem, ou não. Se os dados estiverem dispersos fisicamente, para que este conjunto seja uma lista, ele deve possuir operações e informações adicionais que permitam que seja tratado como tal (Lista Encadeada).

Listas A Lista é uma estrutura de dados cujo funcionamento é inspirado no de uma lista natural 24 4 89 12 12 20 24 4 55 20 89 Uma lista pode ser Ordenada ou não. Quando for ordenada, pode o ser por alguma característica intrínseca dos dados (ex: ordem alfabética). Pode também refletir a ordem cronológica (ordem de inserção) dos dados).

Listas usando Vetores Listas estáticas 24 89 12 4 55-1 01 23 45 Lista vazia Vetores possuem um espaço limitado para armazenamento de dados. Necessitamos definir um espaço grande o suficiente para a lista. Necessitamos de um indicador de qual elemento do vetor é o atual último elemento da lista. 20 Lista cheia

Modelagem de Listas Estáticas utilizando Algoritmo Estruturado Modelaremos a Estrutura de Dados Lista utilizando a técnica da Programação Estruturada e como forma de armazenamento um Vetor (Array). Veremos por enquanto somente os algoritmos.

Modelagem da Lista Aspecto Estrutural: Necessitamos de um vetor para armazenar as informações. Necessitamos de um indicador da posição atual do último elemento da lista. Necessitamos de uma constante que nos diga quando a lista está cheia e duas outras para codificar erros. Criaremos uma lista estática de inteiros para exemplo. Algoritmo para o TAD: constantes Maxlista = 100; tipo Lista { inteiro inteiro } nometipolista; dados[maxlista]; ultimo;

Modelagem da Lista Aspecto Funcional: Colocar e retirar dados da lista. Testar se a lista está vazia ou cheia e outros testes. Inicializa-la e garantir a ordem dos elementos.

Modelagem da Lista Exemplo de Operações: Colocar e retirar dados da lista: Adiciona(dado) AdicionaNoInício(dado) AdicionaNaPosição(dado,posição) AdicionaEmOrdem(dado) Retira() RetiraDoInício() RetiraDaPosição(posição) RetiraEspecífico(dado)

Modelagem da Lista Exemplo de Operações: Testar a lista e outros testes: ListaCheia ListaVazia Posicao(dado) Contem(dado) Igual(dado1,dado2) Maior(dado1,dado2) Menor(dado1,dado2) Exemplo de Operações: Inicializar ou limpar: InicializaLista DestroiLista

Algoritmo InicializaLista FUNÇÃO inicializalista() início alista.ultimo := -1; fim; Observação: Este e os próximos algoritmos pressupõem que foi definida uma variável global tipo Lista denominada alista. Ou seja, foi declarada no início: nometipolista alista;

Algoritmo DestroiLista FUNÇÃO destroilista() início alista.ultimo := -1; fim; Observação: Este algoritmo parece redundante. Colocar a sua semantica em separado da inicialização porém, é importante. Mais tarde veremos que, utilizando alocação deinâmica de memória, possuir um destrutor para alista é muito importante.

Algoritmo ListaCheia Booleano FUNÇÃO listacheia() início SE (alista.ultimo = Maxlista - 1) ENTÃO RETORNE(Verdade) SENÃO RETORNE(Falso); fim; Pergunta: Existe tipo booleano em C? Adote o padrão: 0 para falso, e diferente de 0 (-1 ou 1) para verdadeiro.

Algoritmo ListaVazia Booleano FUNÇÃO listavazia() início SE (alista.ultimo = -1) ENTÃO RETORNE(Verdade) SENÃO RETORNE(Falso); fim;

Algoritmo Adiciona 24 89 12 4 55 20 45 Procedimento: Testamos se há espaço. Incrementamos o último. Adicionamos o novo dado. Parâmetros: O dado a ser inserido. Lista (global).

Algoritmo Adiciona Constantes ErroListaCheia = -1; ErroListaVazia = -2; ErroPosição = -3; Inteiro FUNÇÃO adiciona(inteiro dado) início SE (listacheia) ENTÃO SENÃO FIM SE fim; RETORNE(ErroListaCheia); alista.ultimo := alista.ultimo + 1. alista.dados[alista.ultimo] := dado; RETORNE(aLista.ultimo);

Algoritmo Retira Procedimento: Testamos se há elementos. Decrementamos o último. Devolvemos o último elemento. Parâmetros: Lista (global).

Algoritmo Retira Inteiro FUNÇÃO retira() início SE (listavazia) ENTÃO RETORNE(ErroListaVazia); SENÃO alista.ultimo := alista.ultimo - 1. RETORNE(aLista.dados[aLista.ultimo + 1]); FIM SE fim;

Algoritmo AdicionaNoInício 24 20 45 89 24 12 89 12 4 55 4 55 Procedimento: Testamos se há espaço. Incrementamos o último. Empuramos tudo para trás. Adicionamos o novo dado na primeira posição. Parâmetros: O dado a ser inserido. Lista (global).

Algoritmo AdicionaNoInício Inteiro FUNÇÃO adicionanoinício(inteiro dado) variáveis inteiro posição; // Variável auxiliar para percorrer início SE (listacheia) ENTÃO RETORNE(ErroListaCheia); SENÃO alista.ultimo := alista.ultimo + 1; posição := alista.ultimo; ENQUANTO (posição > 0) FAÇA // Empurrar tudo para tras alista.dados[posicao] := alista.dados[posicao - 1]; posição := posição - 1; FIM ENQUANTO alista.dados[0] := dado; RETORNE(0); FIM SE fim;

Algoritmo RetiraDoInício 20 24 24 89 89 12 54 20 12 4 55 4 55 Procedimento: Testamos se há elementos. Decrementamos o último. Salvamos e primeiro elemento. Empuramos tudo para a frente. Parâmetros: Lista (global).

Algoritmo RetiraDoInício Inteiro FUNÇÃO retiradoinício() variáveis inteiro posição, valor; início SE (listavazia) ENTÃO RETORNE(ErroListaVazia); SENÃO alista.ultimo := alista.ultimo - 1; valor := alista.dados[0]; posição := 0; ENQUANTO (posição <= alista.ultimo) FAÇA // Empurrar tudo para traz alista.dados[posicao] := alista.dados[posicao + 1]; posição := posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE fim;

Algoritmo AdicionaNaPosição Procedimento: Testamos se há espaço e se a posição existe. Incrementamos o último. Empuramos tudo para trás a partir da posição. Adicionamos o novo dado na posição dada. Parâmetros: O dado a ser inserido. A posição onde inserir. Lista (global).

Algoritmo AdicionaNaPosição Inteiro FUNÇÃO adicionanaposição(inteiro dado, destino) variáveis inteiro posição; início SE (listacheia) ENTÃO RETORNE(ErroListaCheia); SENÃO SE (destino > alista.ultimo + 1) ENTÃO RETORNE(ErroPosição); FIM SE alista.ultimo := alista.ultimo + 1; posição := alista.ultimo; ENQUANTO (posição > destino) FAÇA // Empurrar tudo para tras alista.dados[posicao] := alista.dados[posicao - 1]; posição := posição - 1; FIM ENQUANTO alista.dados[destino] := dado; RETORNE(destino); FIM SE fim;

Algoritmo RetiraDaPosição Procedimento: Testamos se há elementos e se a posição existe. Decrementamos o último. Salvamos elemento na posição. Empuramos tudo para frente até posição. Parâmetros: O dado a ser inserido. A posição onde inserir. Lista (global).

Algoritmo RetiraDaPosição Inteiro FUNÇÃO retiradaposição(inteiro fonte) variáveis inteiro posição, valor; início SE (fonte > alista.ultimo) ENTÃO RETORNE(ErroPosição); SENÃO SE (listavazia) ENTÃO RETORNE(ErroListaVazia); SENÃO alista.ultimo := alista.ultimo - 1; valor := alista.dados[fonte]; posição := fonte; ENQUANTO (posição <= alista.ultimo) FAÇA // Empurrar tudo para frente alista.dados[posicao] := alista.dados[posicao + 1]; posição := posição + 1; FIM ENQUANTO RETORNE(valor); FIM SE FIM SE fim;

Algoritmo RetiraEspecífico Retira um dado específico da lista. Procedimento: Testamos se há elementos. Testamos se o dado existe e qual sua posição. Necessitamos de uma função Posição(dado) Chamamos RetiraDaPosição. Parâmetros: O dado a ser retirado. Lista (global).

Algoritmo Posição Inteiro FUNÇÃO posição(inteiro dado) variáveis início fim; inteiro posição; posição := 0; ENQUANTO (posição <= alista.ultimo E NÃO(IGUAL(dado,aLista.dados[posição]))) FAÇA posição := posição + 1; FIM ENQUANTO SE (posição > alista.ultimo) ENTÃO RETORNE(ErroPosição); SENÃO RETORNE(posição); FIM SE

Algoritmo RetiraEspecífico Inteiro FUNÇÃO retiraespecífico(inteiro dado) variáveis inteiro posição; início SE (listavazia) ENTÃO RETORNE(ErroListaVazia); SENÃO posição := posição(dado); SE (posição < 0) ENTÃO RETORNE(ErroPosição); SENÃO RETORNE(retiraDaPosição(posição)); FIM SE FIM SE fim;

Algoritmos Contem(dado) Procedimento: Testamos se um dado específico existe na lista. Parâmetros: O dado a ser procurado. Lista (global).

Algoritmo Contém Booleano FUNÇÃO Contém(inteiro dado) variáveis início fim; inteiro posição; posição := 0; ENQUANTO (posição <= alista.ultimo E NÃO(IGUAL(dado,aLista.dados[posição]))) FAÇA posição := posição + 1; FIM ENQUANTO SE (posição > alista.ultimo) ENTÃO RETORNE(Falso); SENÃO RETORNE(Verdadeiro); FIM SE

Trabalho 1 Lista Estática Converter todos os algoritmos apresentados nesta aula em programação C. Inicialize a lista e monte um MENU para acessar as opções com o seguinte formato: 1 - Inserir um elemento 2 - Remover um elemento 3 - Inserir um elemento no incio da lista 4 - Retirar um elemento do incio da lista 5 - Inserir um elemento em uma posicao especifica 6 - Retirar um elemento de uma posicao especifica 7 - Retirar um elemento especifico 8 - Procurar um elemento 9 - Esvaziar a lista M - Mostrar os 10 primeiros elementos da lista 0 - Sair

Dados do trabalho Entrega do trabalho: dia 16/05/16 até 23:59:59h Entrega em e-mail: provas.sergio@gmail.com Assunto da mensagem: EDITRAB1 Nome completo do aluno, exemplo: EDITRAB1 Sérgio Portari Valor: 15 pontos