Você está na página 1de 33
sa10si2022 21:65, Unidade 2 Estutura de dados com orientagio a objetos ESTRUTURA DE DADOS COM ORIENTACAO A OBJETOS UNIDADE 2 -ESTRUTURAS DE DADOS Autora: Ana Lucia Pegetti Revisor: Marcos Paulo Lobe De Candia INICIAR Introdugao Caro(a) estudante, Uma varidvel pode ser interpretada como um elemento e uma estrutura de dados, como um conjunto, Uma estrutura de dados é uma forma especial de organizar, processar, recuperar e@ armazenar dados. Embora existam varios tipos de estruturas basicas e avancadas, qualquer uma delas 6 projetada para organizar dados de acordo com uma finalidade especifica, de modo que eles possam ser acessados e trabalhados de maneira apropriada Na area de programago, uma estrutura pode ser projetada para ser utilizada por varios algoritmos. Cada estrutura de dados contém informagées sobre os valores dos dados e os relacionamentos entre eles e as fungdes que podem ser aplicadas. Geralmente, as fungdes so classificadas por suas caracteristicas, podendo ser lineares ou nao lineares , Iitps:tfstudent.ulfe.com.br/ContentPlayer/index?lo=plU T¥pJ7YXIVIY7GWOSZA‘% 34% 3d8I=ySdEfpMurHaig47%2dDKHLNW' 343d ‘avsr2002 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos homogéneas ou nao homogéneas , estaticas ou dinamicas . Os tipos de estrutura de dados s&o determinados por quais tipos de operagdes sao necessarias ou quais tipos de algoritmos serio aplicados. O dominio deste conteido é a base para uma boa programagdo, entéo aproveite o contetido desta unidade! Bons estudos! 2.1 Estruturas estaticas de dados Uma estrutura de dados estatica é uma organizagao ou colego de dados na meméria de tamanho fixo. Isso faz com que o tamanho maximo da estrutura precise ser conhecido com antecedéncia, pois a meméria ndo pode ser realocada posteriormente. Os arrays séo um exemplo importante de uma estrutura de dados estatica e linear. Uma das principais vantagens das estruturas de dados estaticas ¢ que, com a alocagao fixa de meméria, nenhum controle ou supervisao é necessdrio para evitar problemas de estouro ou estouros em potencial de meméria ao adicionar novos itens ou remover os existentes. Isso toma as estruturas de dados estaticas mais faceis de programar. Assim, para nao haver diividas sobre a classificagéo das estruturas de dados e as suas caracteristicas, apresentaremos a seguir uma breve descrigéo sobre cada uma das caracteristicas mencionadas. Classificando as estruturas de dados » Clique nas setas ou arraste para visualizar 0 contetido Estruturas em que cada elemento EX ter um Unico predecessor. NAO LINEARES Apresentam cada elemento podendo ter mais de um predecessor ou sucessor. HOMOGENEAS Dados homogéneos séo aqueles que possuem sé um tipo basico de dados. Os vetores e matrizes so estruturas de dados que trabalham somente com dados homogéneos. NAQ_UAMOCENECAG hitps:tfstudent.ulfe.com.briContentPlayer/index?le=plU 7¥pJ7YXIVIY7GWOSZA%:3d%38I=ySdETpMurHaig47%2dDKHLNWK3d%3dBcd=FSUN... 2/39 sa10si2022 21:65, Unidade 2 Estutura de dados com orientagéo a objetos NAU-NUMUULNEAS Dados heterogéneos so aqueles que possuem mais de um tipo basico de dados. As listas so estruturas de dados que trabalham com dados heterogéneos. ESTATICAS So estruturas de dados que tém tamanho fixo, ou seja, seu tamanho e localizagdo na meméria no se altgram durante a execugao. DINAMICAS Uma estrutura dinamica de dados so estruturas que aumentam e diminuem conforme 0 necessario, alocando e desalocando meméria em tempo de execucdo. 2.1.1 Arrays (Vetores) Puga e Rissetti (2004) definem um vetor como uma colegao de varidveis de um mesmo tipo que compartilham o mesmo nome e que ocupam posigdes consecutivas de meméria. Cada varidvel da colegéo 6 denominada de elemento e identificada por um indice, Para se declarar um vetor, deve-se atribuir um nome, um tipo e um tamanho. Veja a Figura 1: Figura 1 —Representagao de um vetor. Fonte: Elaborada pela autora, 2020. #PraCegoVer: A Figura 1 apresenta um quadro de duas linhas e dez colunas. A esquerda das duas linhas esta o nome delas. A primeira 6 a linha de Indice e cada uma das colunas esta preenchida com numerais de 0 a 9 dentro de colchetes, da esquerda para a direita. A linha inferior recebe o nome de Nome: temp. A sequéncia de dados nela, que correspondem A linha superior, 6 5, 13, 23, 45, 55, 34, 23, 4, 2 e1. Um vetor v é referenciado por seu nome e indice. No exemplo da Figura 1, 0 quinto elemento correspondente ao niimero 55 deve ser referenciado como v[4], pois o primeiro Iitps:tfstudent.ulfe.com.br/ContentPlayer/index?lo=plU T¥pJ7YXIVIY7GWOSZA‘% 34% 3d8I=ySdEfpMurHaig47%2dDKHLNW' 343d ‘avsr2002 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos indice é 0 (zero). Em um vetor, a quantidade de elementos armazenada é dada pelo indice de maior valor, mais 1. E interessante ressaltar que a inicializacdo de vetores na primeira posigao com o valor zero é realizada em linguagens zero-based como Java e C, de forma que ndo so todas que tém essa estrutura. Para se declarar um vetor em Java, define-se o tipo e o identificador, acrescentando colchetes. Vale lembrar que, em Java, todo vetor é um objeto que, além de ser declarado, deve ser instanciado através do operador new. Observe o exemplo de cédigo para a declaragdo e criagdo de um vetor v em Java: int{ ] v = new int [5]; //declaragao e criagao Os vetores em Java também podem ser inicializados de forma direta, sem indicagao de ntimeros de elementos e sem 0 operador new para criar o objeto vetor, como no exemplo: intl] meses = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; Os vetores tém como vantagem permitirem acesso a qualquer um de seus elementos em qualquer ordem e em qualquer momento, o que ndo impacta na eficiéncia do cédigo (PUGA; RISSETTI, 2004). Para acessar aos elementos de um vetor, geralmente utiizam-se estruturas de repeticao através da utilizacdo de indices para definir 0 elemento desejado. Hierarquia de estrutura de dados Fonte: Elaborada pela prépria autora. #PraCegoVer : A figura apresenta uma hierarquia de estrutura de dados, sendo que todos os titulos estéo na cor amarela. No topo, na margem superior esquerda, ha uma figura de um computador, Do lado superior direito, hd uma figura de uma arvore. Apés 0 titulo da figura (Hierarquia de estrutura de dados), ao centro est4 apresentado o titulo: tipos de estruturas de dados, que esta dividido em duas categorias: estruturas de dados primitivos e estruturas de dados nao primitivas. A estrutura de dados primitiva se desmembra em inteiro, booleano, caractere e flutuante. Ja a estrutura de dados nao primitivos, desmembra-se em outras duas categorias: estrutura linear hitps:tfstudent.ulfe.com.briContentPlayer/index?le=plU 7¥ipJ7YXIVIY7GWOSZA%:3d%38I=ySdETpMurHaig47%2DDKHLNWK3d%SdBcd=FSUN... 4/39 sa10si2022 21:65, Unidade 2 Estutura de dados com orientagao a objetos e estrutura nao-linear. Abaixo da estrutura linear, sao apresentadas as estruturas atriz, pilha, e lista culada. Abaixo da estrutura nao- linear so apresentadas as estruturas arvores, grafo e tabela de hash . Na parte inferior esquerda, é apresentado o logo da linguagem de programagao Java. © uso de uma estrutura de repetigao facilita a atribuigdo, a leitura e a exibicdo dos elementos de um vetor. Contudo, deve-se ter atengao especial aos limites de seus indices, pois ao tentar acessar elementos fora dos limites do vetor, 0 sistema apresentara um erro de execugao do Java, com a mensagem: ArrayindexOutOfBoundsException Para reduzir a possibilidade de erro, pode-se utilizar 0 método length , que retorna a quantidade de elementos de um objeto. Isso é possivel porque um objeto reconhece seu tamanho. Veja a estrutura no exemplo: int{] num = new int{]; int soma = 0; for(int i = 0; i < num.length; i++) soma = soma + num[i); No exemplo anterior, a estrutura de repeticéo é limitada ao tamanho do vetor e esta adaptada a qualquer valor recebido pela variavel num 2.1.2 OperagGes em vetores E possivel realizar varias operagdes com os elementos de um array. Leitura de dados, impressdo de dados e localizacao do maior e do menor valor séo operagées comuns de realizarmos com um array. Caso o array seja constituido de dados numéricos, é possivel realizar algumas operagdes comuns, como a soma e o calculo da média dos elementos do array. A classe MetodosComunsVetor contém os métodos para processar um array unidimensional (vetor). Veja o exemplo: import java.util. Scanner; pe * Esta classe contém métodos comuns para manipulagao de vetores 1 public class MetodosComunsVetor hitps:tfstudent.ulfe.com.briContentPlayer/index?le=plU ¥IpJ7YXIVIY?GWOSZA%:3d%3d8I=ySdETpMurHaig47%2DDKHLNWK3d%SdBcd=FSUN... 5/39 ‘avsr2022 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos cr * O método preencheVetor aceita um array ou um ntimero de elementos como argumentos * Cada elemento é preenchido pelo usuario. 1 private static void preencheVetor(int{] lista, int n) { II Cria um objeto scanner para entrada no teclado. Scanner teclado = new Scanner(System.in); for (int i = 0; i listali) return max; yt Agora que o Java esta instalado em seu computador, que tal comegar a testar algumas das estruturas de dados vistas? Vamos comegar com um exercicio simples de array . Faga um algoritmo que construa dois vetores A e B de 10 elementos e, a partir deles, crie um vetor C, composto pela soma dos elementos. 2.1.3 Matrizes Entende-se por matrizes estruturas de dados indexadas que utilizam mais de um indice para a identificagdo de seus elementos, sendo chamadas de matrizes de dimensdo n , onde n representa o ntimero de indices requeridos (PUGA; RISSETTI, 2004). Arrays multidimensionais com duas dimensées sao utilizados, muitas vezes, para representar Iitps:tstudent.ulfe.com.briContentPlayer/index?le=plU vIpJ7YXIVIY7GWOSZA%:3d%38I=ySdETpMurHaig47%2DDKHLNWK3d%3dBcd=FSUN... 7/39 ‘avsr2022 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos tabelas de valores com os dados organizados em linhas e colunas. Deitel e Deitel (2017) apresentam a estrutura de uma matriz na Figura 2: Figura 2 — Array bidimensional com trés linhas e quatro colunas, Fonte: DEITEL; DEITEL, 2017, p. 213. #PraGegoVer : A figura apresenta a imagem de uma array bidimensional, composto por trés linhas e quatro colunas. De cima para baixo, temos as linhas zero, um e dois. Da esquerda para a direita, temos as colunas zero, um, dois e trés. Cada intersegao de uma linha com coluna é composta por dois valores entre colchetes, independentes, que so preenchides com o valor do indice da linha e do indice da coluna com o nome da array. Coluna 0: Linha 0 a [0] [0]; Linha 1 a [1] [0]; Linha 2 [2] [0]. Coluna 4: Linha 0 a [0] [1]; Linha 1 a [1] [1]; Linha 2 a [2] [1]. Coluna 2: Linha 0 a [0] [2]; Linha 4 a [1] [2]; Linha 2. a [2] [2]. Coluna 3: Linha 0 a [0] [3]; Linha 1 a [1] [3]; Linha 2 a [2] [3]. A maioria das linguagens nao impée limite sobre a dimensao de uma estrutura indexada, ficando a cargo do programador utilizar a quantidade de indices que considerar conveniente. A declaragao de uma matriz é semelhante a de um vetor, que 6 uma matriz de dimensdo 1. A declaragao de uma matriz, por sua vez, é feita entre colchetes, onde os indices da matriz so separados por uma virgula: 0 primeiro indice identifica uma linha, e 0 segundo uma coluna em uma matriz bidimensional. Veja 0 exemplo abaixo, que apresenta uma estrutura de declaragao e iniciagdo de uma matriz: int[ IE] b = {{1, 2}, {3, 4); De acordo com Puga e Rissetti (2004, p.96), diferente de outras linguagens de programagao, Java puramente ndo oferece suporte a arrays (vetores) multidimensionais. Porém a mesma funcionalidade pode ser obtida com a declaragao de um array de arrays Em um array multidimensional, todos os elementos do array ocupam um bloco continuo de meméria, mas isso néo é verdade em Java. Portanto, um array multidimensional é realmente um array de ponteiros, onde cada ponteiro pode se referir a um array unidimensional. Um exemplo para ficar mais facil o entendimento é apresentado na Figura 3. Se for criado um array A = new int [3][4], pode-se pensar em uma matriz de trés linhas e quatro colunas. hitps:tstudent.ulfe.com.briContentPlayer/index?le=plU ¥IpJ7YXIVIY7GWOSZA%:3d%38I=ySdETpMurHaig47%2DDKHLNWK3d%3dBcd=FSUN... 8/39 ‘avsr2022 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos Mas em Java, na realidade, A guarda uma referéncia ao array de trés itens, onde cada item 6 uma referéncia para o array de quatro elementos. Figura 3 — Array multidimensional com trés linhas e quatro colunas. Fonte: Elaborada pela autora, 2020, #PraGegoVer : A figura apresenta a imagem de uma array multidimensional denominado A, composto por trés linhas e quatro colunas, disposto em forma tabular. Na segunda imagem, que representa a visio em Java, sao apresentadas quatro estruturas individuais, em forma de colunas com e quatro linhas. Em relagao a operagdes com matrizes, essas se assemelham as operagdes em vetores, onde o sistema acessa seus elementos individualmente, realizando calculos matematicos e comparativos. A estrutura das matrizes permite o armazenamento de valores, que podem ser referenciados e associados a outros, em duas ou mais dimensées. De forma andloga aos vetores, a estrutura das matrizes deve ser declarada, inicializada e instanciada. No exemplo a seguir, a primeira parte do comando corresponde a criagdo e declaracao da matriz, depois os valores sdo atribuidos a ela. Cada posigdo recebe um valor que se inicia com zero e é incrementado. A utilizagao do /ength no loop da flexibilidade necessaria em caso de mudanga no tamanho da matriz mudar. int] matriz = new int{5][5]; // cria a matriz 5x5 int valor = 0; for (int i = 0; i < matriz.length; i++) { for (int j = 0; j < matriz[i].length; j++) { matriz[i][i] = valor; valor+- Dicas para manipulagao de arrays » Clique nas abas para saber mais sobre o assunto hitps:tfstudent.ulfe.com.briContentPlayer/index?le=plU vpJ7YXIVIY7GWOSZA%:3d%38I=ySdETpMurHaig47%2dDKHLNWK3d%3dBcd=FSUN... 9/39 ‘avsr2022 21:86 Unidade 2-Estulura de dadon com oenagéo a objeos Muitas manipulages comuns de arrays utilizam as instrugdes for , como no exemplo de cédigo apresentado anteriormente. Os arrays multidimensionais podem ter mais de duas dimensées. O Java, por sua vez, nao suporta arrays multidimensionais diretamente, mas permite especificar arrays unidimensionais cujos elementos também sejam arrays unidimensionais, alcangando, assim, 0 mesmo efeito (DEITEL; DEITEL, 2017). Os arrays multidimensionais podem ser inicializados com inicializadores de array em declaragées assim como os arrays unidimensionais. Observe o exemplo retirado de Deite e Deitel (2017, p.214), onde um array bidimensional b com duas linhas e duas colunas poderia ser declarado e inicializado com inicializadores de array aninhados como a seguir:int{][] b = {{1, 2}, 3, 4) Os arrays multidimensionais sao mantidos como arrays de arrays unidimensionais. Portanto, 0 array b na declaragao anterior 6 na realidade composto de dois arrays unidimensionais separados — um que contém o valor na primeira lista de inicializadores aninhados (1, 2} e outro que contém o valor na segunda lista de inicializadores aninhados {3, 4}, Portanto o préprio array b é um array de dois elementos; cada um desses elementos 6 um array unidimensional de valores int. Teste seus conhecimentos Atividade no pontuada 2.2 Estruturas dinamicas de dados Matrizes so estruturas de dados muito titeis, embora limitadas: seu tamanho tem que ser conhecido no momento da compilagéo e seus dados ficam separados na meméria do computador pela mesma distancia, 0 que dificulta a inclusdo de outros itens (levando em consideragao a movimentagao de outros dados na matriz). Assim, podemos superar essa dificuldade utilizando listas encadeadas 2.2.1 Lista simplesmente encadeada Entende-se por lista encadeada uma estrutura de dados formada por um conjunto de elementos dispostos em uma organizagdo nao linear, espalhados pela meméria. Para que hitps:tfstudent.ulfe.com.briContentPlayer/index?le=plU vpJ7YXIVIY7GWOSZA%:3d%38I=ySdEfpMurHaig47%2DDKHLNWK3d%SdBcd=Su,.. 10/39

Você também pode gostar