



Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Material explicando a Estrutura de dados!!
Tipologia: Notas de estudo
1 / 5
Esta página não é visível na pré-visualização
Não perca as partes importantes!
2 - Estrutura de Dados
Com vários tipos de dados diferentes e possíveis, a escolha pela maneira adequada para melhor garantir o relacionamento da estrutura de dados com o domínio do problema a ser tratado pela lógica de programação é fator determinante para obtenção de algoritmo otimizado. As estruturas de dados serão responsáveis pela especificação conceitual dos dados de forma conciliadora com o domínio do problema que as rotinas do programa estão resolvendo. Imagine que a interface do sistema está tratando de um cálculo de reajuste percentual para o preço de um determinado produto. Faz sentido que os campos destinados à indicação do percentual a ser utilizado no cálculo assim como o preço do produto estejam associados a um tipo de dados que permite operações numéricas. Importante perceber ainda que faz parte do ambiente do estudo da Estrutura de Dados as operações para manipulação dos seus dados que também estão relacionadas com o domínio do problema. Alterar o preço do produto por meio de um percentual informado talvez signifique ter que localizar tal produto em uma lista e alterar seu valor. Outro detalhe interessante é que os tipos de dados capazes de representar por completo o domíno do problema normalmente não se limitam ao uso apenas dos dados primitivos oferecidos pelas linguagens de programação. Porém, são os tipos básicos de dados e operadores que as linguagens oferecem que permitirão a construção de uma estrutura flexível que seja adequada ao problema que se pretende resolver. Assim, é o programador quem deverá fazer bom uso da implementação da estrutura abstrata de dados para conseguir bons resultados. Para ilustrar esse conceito será feito o uso do exemplo apresentado por Edelwiss e Galante (2009), no qual é tratada uma estrutura de dados responsável por armazenar “datas”.
O problema : construir um tipo de dados que permita armazenar uma data no formato de dia, mês e ano. Além disso é necessário somar dias à uma determinada data, escrevê-la por extenso e verificar se é válida. Para resolver essa situação ou qualquer outra que se apresente, será necessário realizar duas etapas. Etapa 1: estruturar um tipo de dado para representar e armazenar adequadamente o domínio do problema. Uma das maneiras seria criar um tipo de
dado que contivesse três campos. O primeiro para armazenar o dia, o segundo para armazenar o mês e o terceiro para armazenar o ano. Como tanto dias quanto meses ou anos podem ser representados por números, esses três campos poderiam ser do tipo inteiro. Essa estrutura pode ser genericamente descrita conforme o Exemplo 1: Classe = Date Date.dia: tipo inteiro; Date.mês: tipo inteiro; Date.ano: tipo inteiro; Fim da Classe
Exemplo 1 - Exemplo de estrutura para armazenar data
Etapa 2: determinar o funcionamento das operações aplicáveis ao tipo de dados. No caso do tipo Date seria possível, entre outras operações: acrescentar dias ou escrever a data por extenso. Vale destacar que as operações que precisarão ser realizadas dependem do domínio do problema. Talvez em um determinada situação a data não precise ser escrito por extenso, por exemplo. A descrição de algumas dessas operações pode ser, genericamente, assim demonstrada:
Function InitializeDate Inputs: Day, Month, Year (integer) Outuput: D (Date) Recebe três parâmetros inteiros referente ao dia, mês e ano e retorna a data resultante. Exemplo 2 - Exemplo de Operação que Inicializa a Data
Function PlusDays Inputs: D (Date), DaysToPlus (integer) Output: Date Recebe um parâmetro (D) com a data de referência para o cálculo e outro com a quantidade de dias (DaysToPlus) que devem ser somados à data de referência. Retorna a data resultante da soma dos dias.
Exemplo 3 - Exemplo de Operação que Soma dias à data
Em estruturas lineares os elementos (nodes) estão posicionados de maneira sequencial. Assim uma única repetição do algoritmo é capaz de percorrer os nodes do início ao fim da estrutura. Os nodes precisam de uma identificação de localização nas estruturas lineares. Isso pode ser feito por meio de um indicador de índice para casos como os vetores ou o próprio node precisa de um dado para apontar para o item anterior ou até mesmo posterior como, por exemplo, nas listas. Dessa maneira, cada node é uma estrutura personalizada, armazenando seu valor e a referência para o item seguinte, conforme ilustrado na Figura 2. Quando não existir um próximo elmento, o último node deve apontar para “ null ”, já que não existe um próximo item.
Figura 2 - Exemplo de Estrutura personalizada do node
Já nas estruturas não lineares os elementos podem ser mais de um predecessor ou sucessor. Fazem parte dessa classificação, entre outras, as estruturas de grafos e árvores. A Figura 3 ilustra uma estrutura em grafo.
Figura 3 - Exemplo de estrutura em grafo
E 1
E (^2) E 3
E (^4) E 5 E 6
Node Valor (value) Próximo (next)
Node Valor (value) Próximo (next)
Node Valor (value) Próximo (next)
NULL
A Figura 4 apresenta as principais estruturas lineares e não lineares que são abordados durante o período de estudo dessa disciplina. Cada uma delas será detalhada de maneira específica.
Figura 4 - Estruturas a serem estudadas
Para saber mais GRONER, L. Estrutura de dados e algoritmos com JavaScript. Novatec Editora. São Paulo, 2a. edição. 2018 NINA, E; GALANTE, R. Estrutura de dados. Bookman, Porto Alegre, 262 p. 2009 TENEMBAUM, A.A; LANGSAM, Y.; AUGENSTEIN, M.J. Estrutura de dados usando C. Makron Books, São Paulo, 1995 LAFORE, R. Estrutura de Dados e Algoritmos em JAVA. Editora Ciência Moderna, Rio de Janeiro, 2004 EGYPTO, C. Apostila de Esturuta de Dados. Centro Federal de Educação Tecnológica da Paraíba. 2004. Disponível em: DOVICCHI, J. Estrutura de Dados. E-book. Disponível em: http://www.inf.ufsc.br/~joao.dovicchi/pos-ed/ebook/e-book_estrut_dados_dovicchi.pdf RICARTE, I.L.M. Estruturas de Dados. Depto de Engenharia de Computação e Automação Industrial. Universidade Estadual de Campinas. Disponível em: http://calhau.dca.fee.unicamp.br/wiki/images/0/01/EstruturasDados.pdf SIMON, I. A Revolução Digital e a Sociedade do Conhecimento. 2000. Disponível em: https://www.ime.usp.br/~is/ddt/mac333/aulas/tema-11-24mai99.html KOFFMAN, E. B.; WOLFGANG, P.A.T. Objetos, Abstração, Estrutura de Dados e Projeto Usando C++. LTC. Rio de Janeiro, 2008.
Pilha (Stack) Fila (Queue) Lista (List) Vetor e Matriz (Array)
Tabela de Espelhamento (Hash Table) Árvore (Tree)