<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para Estruturas de Dados - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/estruturas-de-dados/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/estruturas-de-dados/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Tue, 11 Apr 2023 12:56:36 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.6</generator>
	<item>
		<title>O que é Notação Big O em programação e análise de algoritmos</title>
		<link>https://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/</link>
					<comments>https://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 24 Aug 2022 17:23:16 +0000</pubDate>
				<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Algoritmos]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18621</guid>

					<description><![CDATA[<p>Notação Big O A notação Big O é um conceito matemático normalmente empregado para medir o custo de um algoritmo. É uma forma simples de classificar a complexidade computacional de um algoritmo. No geral, significa encontrar uma função que relacione o tamanho da entrada de um algoritmo com o número de passos necessários à sua execução (complexidade temporal) ou quantidade de espaço de armazenamento que ele emprega (complexidade espacial). Comumente a função que descreve a performance de um algoritmo se refere ao seu limite superior, que determina o pior caso (de entrada de dados) do algoritmo. Em ciência da computação, a notação Big O é empregada para classificar algoritmos de acordo com seu tempo de execução / número de passos (custo) ou requisitos de espaço, conforme a entrada de dados aumenta. Análise de Algoritmos, termo cunhado pelo cientista da computação Donald Knuth (autor de The Art of Computer Programming), é o processo de encontrar a complexidade computacional de um algoritmo. Complexidade computacional se refere à quantidade de tempo, armazenamento ou outros recursos necessários para a execução de um algoritmo. Em outras palavras,  usamos essa notação para indicar quanto tempo algo demorará para executar, ou o espaço que ocupará na memória, [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/">O que é Notação Big O em programação e análise de algoritmos</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Notação Big O</h2>
<p>A notação Big O é um conceito matemático normalmente empregado para medir o custo de um <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/02-logica-de-programacao-algoritmos-e-fluxogramas/">algoritmo</a>. É uma forma simples de classificar a complexidade computacional de um algoritmo.</p>
<p>No geral, significa encontrar uma função que relacione o tamanho da entrada de um algoritmo com o número de passos necessários à sua execução (complexidade temporal) ou quantidade de espaço de armazenamento que ele emprega (complexidade espacial).</p>
<p>Comumente a função que descreve a performance de um algoritmo se refere ao seu limite superior, que determina o pior caso (de entrada de dados) do algoritmo.</p>
<p>Em ciência da computação, a notação Big O é empregada para classificar algoritmos de acordo com seu tempo de execução / número de passos (custo) ou requisitos de espaço, conforme a entrada de dados aumenta.</p>
<table style="height: 148px; width: 83.9822%; border-collapse: collapse; border-style: solid; border-color: #3b0404; background-color: #eff2e6;" border="3">
<tbody>
<tr>
<td style="width: 100%;">
<p><em>Análise de Algoritmos</em>, termo cunhado pelo cientista da computação Donald Knuth (autor de <a href="https://www.amazon.com.br/Computer-Programming-Volumes-1-4a-Boxed/dp/0321751043" target="_blank" rel="noopener">The Art of Computer Programming</a>), é o processo de encontrar a complexidade computacional de um algoritmo.</p>
<p><em>Complexidade computacional</em> se refere à quantidade de tempo, armazenamento ou outros recursos necessários para a execução de um algoritmo.</p>
</td>
</tr>
</tbody>
</table>
<p>Em outras palavras,  usamos essa notação para indicar quanto tempo algo demorará para executar, ou o espaço que ocupará na memória, dado uma quantidade N de dados a serem manipulados.</p>
<p>Qual a importância de saber isso? Vai te permitir desenvolver software muito melhor porque você irá entender como é possível melhorar a performance do programa, tornando-o mais eficiente e escalável, sem complexidade adicional.</p>
<p>Se um projeto precisa usar um algoritmo específico, é importante entender o quão rápido ou lento ele é em comparação com outras alternativas.</p>
<h3>Definição Formal de Big O</h3>
<p>A seguir temos uma definição formal da notação Big O, retirada da Wikipedia:</p>
<blockquote>
<p>&#8220;A notação Big O é uma notação matemática que descreve comportamento limite de uma função quando o argumento tende a um valor em particular ou ao infinito.&#8221;</p>
</blockquote>
<p>Trata-se de uma notação membro de uma família de notações inventadas por Paul Bachmann, Edmund Landau e outros, chamadas em conjunto de <strong>Notação Bachmann-Landau</strong> ou ainda <strong>Notação Assintótica</strong>.</p>
<p><strong><em>Curiosidade</em>:</strong> A letra &#8216;O&#8217; vem da palavra em alemão <strong><em>Ordnung</em></strong>, com o significado de <strong>Ordem</strong> (de aproximação).</p>
<p>O Big O se foca no cenário de <em>pior caso</em> no qual o algoritmo consome o maior tempo (ou recursos) para executar. Isso significa que o algoritmo nunca irá demorar <em>MAIS</em> que esse cenário &#8211; mas pode demorar <em>MENOS</em> em determinadas circunstâncias.</p>
<p>Perceba que essa notação serve para calcular o tempo máximo que irá demorar a execução do algoritmo (em termos de custo), mas o tempo real pode ser menor. Por exemplo, uma busca linear em um array pode encontrar o item na primeira posição pesquisada, como se fosse O(1) (melhor resultado).</p>
<p>Assim, o Big O sempre se refere ao pior resultado possível.</p>
<p>Note que o Big O serve para algoritmos escritos em qualquer linguagem de programação e sempre é calculado da mesma forma.</p>
<p><em><strong>Observação importante</strong></em>: essa notação <strong>NÃO</strong> nos informa a velocidade de um algoritmo em segundos, pois existem muitos fatores que podem influenciar essa velocidade, como por exemplo o hardware empregado para executar o algoritmo. Usamos o Big O para <em>comparar algoritmos entre si</em>.</p>
<h3>Funções e Complexidade</h3>
<p>Na notação Big O, a letra &#8220;<strong>n</strong>&#8221; representa o tamanho da entrada, enquanto a função &#8220;g(n) = n&#8221;, associada ao &#8220;O()&#8221; nos informa a complexidade do algoritmo em relação ao tamanho dessa entrada.</p>
<p>Sendo assim, podemos ter algoritmos classificados de acordo com seu nível de complexidade, como segue:</p>
<ul>
<li><strong>Complexidade Constante: O(1)<br />
</strong>Não importa a quantidade total de dados acessados, o tempo de acesso é sempre 1, ou seja, sempre o mesmo custo para acessar qualquer um dos dados no conjunto. Exemplo: acesso a um elemento de um <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/17-logica-de-programacao-vetores-definicao-e-declaracao/">array</a>.</li>
<li><strong>Complexidade Linear: O(n)</strong><br />
O acesso a um elemento demora o tempo equivalente à quantidade de dados da coleção. Exemplo: <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/22-logica-de-programacao-pesquisa-sequencial-em-vetores-arrays/">busca linear</a> de um dado em uma lista ou array não ordenado &#8211; o algoritmo, no pior caso, tem de procurar em até <em>n</em> elementos, caso o dado buscado ser o último ou inexistente.</li>
<li><strong>Complexidade Logarítmica O(log n)</strong> <br />
Sua performance aumenta drasticamente conforme a quantidade de elementos aumenta. Exemplo: árvores de busca balanceada ou algoritmos de <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/23-logica-de-programacao-pesquisa-binaria-em-vetores-arrays/">busca binária em arrays</a>. Sua performance se aproxima comumente do O(1).<br />
Geralmente os dados precisam estar classificados (ordenados) de alguma forma.</li>
<li><strong>Complexidade Linearítmica: O(n log n)</strong><br />
É uma combinação das complexidades linear e logarítmica. Algoritmos que usam estratégias do tipo dividir e conquistar são linearítmicos, como os algoritmos de classificação <strong>Merge Sort</strong> e <strong>Heap Sort</strong>.</li>
<li><strong>Complexidade quadrática O(n<sup>2</sup>)</strong><br />
Complexidade na qual o custo computacional cresce de acordo com o quadrado da quantidade de elementos de entrada. Exemplo de algoritmo: Algoritmos de classificação como <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ordenacao-de-arrays-em-c-com-o-metodo-bubblesort/"><strong>Bubble Sort</strong></a>, <strong>Insertion Sort</strong> ou <strong>Selection Sort.</strong> </li>
<li><strong>Complexidade polinomial (n<sup>c</sup>)</strong><br />
A quantidade de operações é proporcional à potência c do tamanho da entrada (engrada elevada a um valor c).<br />
Exemplo: Encontrar o determinante de uma matriz usando <strong>Decomposição LU</strong>.<br />
Um caso especial de complexidade polinomial é a complexidade quadrática, na qual c = 2.</li>
<li><strong>Complexidade fatorial O(n!).</strong><br />
Uma das piores complexidades em termos de custo. O tempo necessário para execução do algoritmo cresce astronomicamente conforme aumenta a quantidade de dados de entrada.<br />
Exemplo: Encontrar o determinante de uma matriz usando o <strong>Teorema de Laplace</strong></li>
</ul>
<p>Alterar a complexidade de um algoritmo, por exemplo de linear para logarítmica, pode fazer com que a aplicação tenha uma performance milhões ou até bilhões de vezes maior.</p>
<p>O gráfico a seguir mostra uma comparação entre diversos níveis de complexidade, relacionando o número de operações necessárias para realizar uma tarefa de acordo com a quantidade de elementos de um conjunto de dados:</p>
<div id="attachment_18622" style="width: 710px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-18622" class="wp-image-18622" title="Gráfico da Complexidade de algoritmos em notação Big O" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2022/08/grafico-complexidade-big-o.png" alt="Gráfico da Complexidade de algoritmos em notação Big O" width="700" height="452" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2022/08/grafico-complexidade-big-o.png 799w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/08/grafico-complexidade-big-o-420x271.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2022/08/grafico-complexidade-big-o-768x496.png 768w" sizes="(max-width: 700px) 100vw, 700px" /><p id="caption-attachment-18622" class="wp-caption-text">Crescimento da Complexidade de Algoritmos.<br />
Fonte: <a href="https://www.bigocheatsheet.com/" target="_blank" rel="noopener">https://www.bigocheatsheet.com/</a></p></div>
<h3>Comparação de algoritmos com Big O distintos</h3>
<p>Imagine que um algoritmo de busca linear de O(n) demore 1 ms (um milissegundo) para realizar uma operação, ao passo que um algoritmo de busca binária d O(log n) também demora 1 ms para realizar a operação.</p>
<p>Quantas operações serão necessárias para realizar <em>n</em> operações com cada algoritmo? A tabela a seguir mostra alguns valores calculados:</p>
<table style="border-collapse: collapse; width: 82.2951%; height: 92px;" border="1">
<tbody>
<tr style="height: 23px;">
<td style="width: 33.3333%; text-align: center; height: 23px;"><strong>Núm. de Elementos<br />
no Conjunto</strong></td>
<td style="width: 33.3333%; text-align: center; height: 23px;"><strong>Busca Linear: O(n)</strong></td>
<td style="width: 33.3333%; text-align: center; height: 23px;"><strong>Busca Binária: O(log n)</strong></td>
</tr>
<tr style="height: 23px;">
<td style="width: 33.3333%; text-align: center; height: 23px;">10</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">10 ms</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">3 ms</td>
</tr>
<tr style="height: 23px;">
<td style="width: 33.3333%; text-align: center; height: 23px;">100</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">100 ms</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">7 ms</td>
</tr>
<tr style="height: 23px;">
<td style="width: 33.3333%; text-align: center; height: 23px;">10.000</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">10 s</td>
<td style="width: 33.3333%; text-align: center; height: 23px;">14 ms</td>
</tr>
<tr>
<td style="width: 33.3333%; text-align: center;">1.000.000.000</td>
<td style="width: 33.3333%; text-align: center;">11 dias</td>
<td style="width: 33.3333%; text-align: center;">32 ms</td>
</tr>
</tbody>
</table>
<p>Perceba que o algoritmo de busca linear tem um aumento de custo computacional muito mais elevado do que o algoritmo de busca binária considerado.</p>
<p>Para conjuntos com poucos elementos a diferença entre eles é pequena, porém conforme aumentamos a quantidade de dados de entrada os algoritmos começam a se comportar de forma muito diversa.</p>
<p>No exemplo, para conjuntos pequenos de dados praticamente não há diferença entre usar um algoritmo ou outro, mas para conjuntos grandes o emprego do algoritmo de complexidade <em><strong>O(log n)</strong></em> é imprescindível.</p>
<p>Em suma, o tempo de execução para cada algoritmo não cresce na mesma proporção. Por isso é importante saber o Big O de cada algoritmo &#8211; assim é possível escolher o melhor a usar em cada caso.</p>
<p>A tabela a seguir mostra alguns algoritmos populares de ordenação de arrays (vetores), com suas complexidades de tempo e espaço na notação Big-O:</p>
<table style="border-collapse: collapse; width: 67.8689%; height: 109px;" border="1">
<thead>
<tr>
<td style="width: 33.3333%; text-align: center;"><strong>Algoritmo</strong></td>
<td style="width: 33.3333%; text-align: center;"><strong>Complexidade temporal</strong></td>
<td style="width: 33.3333%; text-align: center;"><strong>Complexidade espacial</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 33.3333%;">Selection Sort</td>
<td style="width: 33.3333%; text-align: center;">O(n<sup>2</sup>)</td>
<td style="width: 33.3333%; text-align: center;">O(1)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Insertion Sort</td>
<td style="width: 33.3333%; text-align: center;">O(n<sup>2</sup>)</td>
<td style="width: 33.3333%; text-align: center;">O(1)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Bubble Sort</td>
<td style="width: 33.3333%; text-align: center;">O(n<sup>2</sup>)</td>
<td style="width: 33.3333%; text-align: center;">O(1)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Heapsort</td>
<td style="width: 33.3333%; text-align: center;">O(n log n)</td>
<td style="width: 33.3333%; text-align: center;">O(1)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Mergesort</td>
<td style="width: 33.3333%; text-align: center;">O(n log n)</td>
<td style="width: 33.3333%; text-align: center;">O(n)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Quicksort</td>
<td style="width: 33.3333%; text-align: center;">O(n<sup>2</sup>)</td>
<td style="width: 33.3333%; text-align: center;">O(log n)</td>
</tr>
<tr>
<td style="width: 33.3333%;">Tree Sort</td>
<td style="width: 33.3333%; text-align: center;">O(n<sup>2</sup>)</td>
<td style="width: 33.3333%; text-align: center;">O(n)</td>
</tr>
</tbody>
</table>
<h3>Outras Notações de Complexidade Algorítmica</h3>
<p>Além do Big O, existem outras notações que podem ser empregadas para determinar o custo computacional de algoritmos, geralmente se focando em fatores distintos. Algumas delas são:</p>
<ul>
<li>Notação Omega (Ω()): descreve o limite inferior da complexidade</li>
<li>Notação Theta (Θ()): descreve o limite exato da complexidade</li>
<li>Notação Little O (o()): descreve o limite superior, porém excluindo o limite exato.</li>
</ul>
<h3>Resumo</h3>
<ul>
<li>Conhecendo o Big O de um algoritmo, saberemos qual a performance e eficiência de acordo com o volume de informações que entram.</li>
<li>Quando comparamos algoritmos distintos que resolvem o mesmo problema, por meio do Big O podemos determinar qual deles é o mais eficiente.</li>
<li>De forma bem simplificada, o Big O nos diz quantas operações um algoritmo precisa realizar para completar sua tarefa.</li>
</ul>
<h3>Referências</h3>
<ul>
<li>Erickson, J. <em><strong>Algorithms</strong></em>. 1ª edição, 2019. Disponível para download em <a href="http://jeffe.cs.illinois.edu/teaching/algorithms/" target="_blank" rel="noopener">http://jeffe.cs.illinois.edu/teaching/algorithms/</a></li>
<li>Sedgewick, R.; Wayne, K. <em><strong>Algorithms</strong></em>. 4 edição, 2011. Editora Addison-Wesley Professional.</li>
<li>Cormen, T.H.; Leiserson, C.E.; Rivest, R.L. <em><strong>Introduction to Algorithms</strong></em>. 3ª edição, 2009. Editora MIT Press.</li>
</ul>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/">O que é Notação Big O em programação e análise de algoritmos</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/estruturas-de-dados/o-que-e-notacao-big-o-em-programacao-e-analise-de-algoritmos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como implementar uma pilha em Java usando Arrays</title>
		<link>https://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/</link>
					<comments>https://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 30 Jul 2018 13:57:41 +0000</pubDate>
				<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=12834</guid>

					<description><![CDATA[<p>Como implementar&#160;uma pilha em Java usando um array Anteriormente nós estudamos o funcionamento e aplicações das pilhas em estruturas de dados. Vamos ver agora como implementar uma estrutura de pilha na linguagem Java, usando um array como base. Lembrando que também é possível implementar pilhas usando listas ligadas, assunto que abordaremos mais à frente em nosso curso de Estruturas de Dados. Criando a Pilha Primeiramente criaremos uma classe de nome Pilha para representar as pilhas no programa principal: /* Implementando operações com pilhas em Java Criando a Classe Pilha Implementamos as funções isEmpty, peek, push e pop */ public class Pilha { static final int MAX = 1000; int top; int a[] = new int[MAX]; // Define tamanho máximo da pilha // Construtor Pilha() { top = -1; } // Métodos da pilha boolean isEmpty() { return (top &#60; 0); } boolean push(int x) { if (top &#62;= (MAX-1)) { System.out.println("Estouro de Pilha!"); return false; } else { a[++top] = x; return true; } } int pop() { if (top &#60; 0) { System.out.println("Pilha Vazia!"); return 0; } else { int x = a[top--]; return x; } } int peek() { if (top &#60; 0) { System.out.println("Pilha Vazia!"); return 0; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/">Como implementar uma pilha em Java usando Arrays</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como implementar&nbsp;uma pilha em Java usando um array</h2>
<p>Anteriormente nós estudamos o funcionamento e aplicações das <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/" target="_blank" rel="noopener">pilhas em estruturas de dados</a>. Vamos ver agora como implementar uma estrutura de pilha na linguagem Java, usando um <a href="http://www.bosontreinamentos.com.br/java/como-usar-arrays-em-java/" target="_blank" rel="noopener">array</a> como base.</p>
<p>Lembrando que também é possível implementar pilhas usando listas ligadas, assunto que abordaremos mais à frente em nosso curso de Estruturas de Dados.</p>
<h3>Criando a Pilha</h3>
<p>Primeiramente criaremos uma classe de nome <strong>Pilha</strong> para representar as pilhas no programa principal:</p>
<pre><span style="color: #339966;"><strong>/*</strong></span>
<span style="color: #339966;"><strong>Implementando operações com pilhas em Java</strong></span>
<span style="color: #339966;"><strong>Criando a Classe Pilha</strong></span>
<span style="color: #339966;"><strong>Implementamos as funções isEmpty, peek, push e pop</strong></span>
<span style="color: #339966;"><strong>*/</strong></span>
<span style="color: #ff0000;"><strong>public class Pilha </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>   static final int MAX = 1000;</strong></span>
<span style="color: #ff0000;"><strong>   int top;</strong></span>
<span style="color: #ff0000;"><strong>   int a[] = new int[MAX]; <span style="color: #339966;">// Define tamanho máximo da pilha</span></strong></span>   
<span style="color: #ff0000;"><strong>
   <span style="color: #339966;">// Construtor</span>
   Pilha() </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>      top = -1;</strong></span>
<span style="color: #ff0000;"><strong>   }

</strong></span><span style="color: #339966;"><strong>   // Métodos da pilha
<span style="color: #ff0000;">   boolean isEmpty() </span><span style="color: #ff0000;">{
</span>    <span style="color: #ff0000;"> return (top &lt; 0);
</span><span style="color: #ff0000;">   }</span></strong></span>
<span style="color: #ff0000;"><strong>   boolean push(int x) </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>      if (top &gt;= (MAX-1)) </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>         System.out.println("Estouro de Pilha!");</strong></span>
<span style="color: #ff0000;"><strong>         return false;</strong></span>
<span style="color: #ff0000;"><strong>      }</strong></span>
<span style="color: #ff0000;"><strong>      else </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>         a[++top] = x;</strong></span>
<span style="color: #ff0000;"><strong>         return true;</strong></span>
<span style="color: #ff0000;"><strong>      }</strong></span>
<span style="color: #ff0000;"><strong>   }</strong></span>
<span style="color: #ff0000;"><strong>   int pop() </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>      if (top &lt; 0) </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>         System.out.println("Pilha Vazia!");</strong></span>
<span style="color: #ff0000;"><strong>         return 0;</strong></span>
<span style="color: #ff0000;"><strong>      }</strong></span>
<span style="color: #ff0000;"><strong>      else </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>         int x = a[top--];</strong></span>
<span style="color: #ff0000;"><strong>         return x;</strong></span>
<span style="color: #ff0000;"><strong>      }</strong></span>
<span style="color: #ff0000;"><strong>   }
   int peek() {
      if (top &lt; 0) {
         System.out.println("Pilha Vazia!");
         return 0;
      }
      else {
         return a[top];
      }
   }</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<h3>Usando a pilha</h3>
<p>Para usar a nossa classe Pilha vamos instanciá-la no programa principal e realizar algumas operações push e pop para inserir e retirar itens na pilha:</p>
<pre><span style="color: #339966;"><strong>// Código do main</strong></span>
<span style="color: #ff0000;"><strong>import java.util.Scanner;
public class PilhaJava </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>
   public static void main(String args[]) </strong></span><span style="color: #ff0000;"><strong>{
      Scanner entrada = new Scanner(System.in);
      System.out.println("Entre com um número:");
      int valor = entrada.nextInt();
</strong></span>
<span style="color: #ff0000;"><strong>      Pilha novaPilha = new Pilha();
</strong></span>
<span style="color: #ff0000;"><strong>      novaPilha.push(valor);</strong></span>
<span style="color: #ff0000;"><strong>      novaPilha.push(70);</strong></span>
<span style="color: #ff0000;"><strong>      novaPilha.push(88);</strong></span>
<span style="color: #ff0000;"><strong>      System.out.println("Item de valor " + novaPilha.pop() + " retirado da pilha");
      System.out.println("Item restante: " + novaPilha.peek());
      System.out.println("Item de valor " + novaPilha.pop() + " retirado da pilha");
      System.out.println("Item restante: " + novaPilha.peek()); </strong></span>
<span style="color: #ff0000;"><strong>   }</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15089 size-full" title="Implementar pilha em java com array" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/07/pilha-java-array.jpg" alt="Implementar pilha em java com array" width="542" height="207" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2018/07/pilha-java-array.jpg 542w, https://www.bosontreinamentos.com.br/wp-content/uploads/2018/07/pilha-java-array-420x160.jpg 420w" sizes="auto, (max-width: 542px) 100vw, 542px" /></p>
<p>É isso aí! No próximo tutorial veremos como criar e utilizar pilhas em linguagem C.</p>
<p>Até lá!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/">Como implementar uma pilha em Java usando Arrays</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Estruturas de Dados: o Registro</title>
		<link>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/</link>
					<comments>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 01 Dec 2017 10:55:01 +0000</pubDate>
				<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=9047</guid>

					<description><![CDATA[<p>Conceito de Registro Um Registro é uma estrutura que fornece um formato especializado para armazenar informações em memória. Ele inclui as informações sobre uma entidade específica, podendo, por exemplo, corresponder às informações pertinentes a um cliente em um arquivo de clientes ou a um automóvel em um arquivo de controle de uma concessionária, entre outros. Um registro é dividido em unidades de dados chamadas de Campos. Cada campo é utilizado para armazenar um dado específico, de um tipo determinado. Por exemplo, em um registro de clientes podemos ter um campo para armazenar o nome do cliente, outro para seu sobrenome, e um outro campo para armazenar seu CPF. Representando os registros Os registros podem ser representados de formas distintas, dependendo da linguagem de programação adotada para a criação do algoritmo no qual eles serão empregados. Em linguagem C, por exemplo, os registros podem ser representados por estruturas (structures), ao passo que em C++ e Java, por objetos de uma classe. Os membros de dados dentro desses objetos equivalem aos campos no registro. Exemplo de um registro Tomemos como exemplo os dados de um cliente de uma loja qualquer. Para representar esses dados na memória do computador, e posteriormente armazená-los em [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/">Estruturas de Dados: o Registro</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Conceito de Registro</h2>
<p>Um Registro é uma estrutura que fornece um formato especializado para armazenar informações em memória.</p>
<p>Ele inclui as informações sobre uma entidade específica, podendo, por exemplo, corresponder às informações pertinentes a um cliente em um arquivo de clientes ou a um automóvel em um arquivo de controle de uma concessionária, entre outros.</p>
<p>Um registro é dividido em unidades de dados chamadas de Campos. Cada campo é utilizado para armazenar um dado específico, de um tipo determinado. Por exemplo, em um registro de clientes podemos ter um campo para armazenar o nome do cliente, outro para seu sobrenome, e um outro campo para armazenar seu CPF.</p>
<h3>Representando os registros</h3>
<p>Os registros podem ser representados de formas distintas, dependendo da linguagem de programação adotada para a criação do algoritmo no qual eles serão empregados. Em linguagem C, por exemplo, os registros podem ser representados por estruturas (structures), ao passo que em C++ e Java, por objetos de uma classe.</p>
<p>Os membros de dados dentro desses objetos equivalem aos campos no registro.</p>
<h3>Exemplo de um registro</h3>
<p>Tomemos como exemplo os dados de um cliente de uma loja qualquer. Para representar esses dados na memória do computador, e posteriormente armazená-los em disco, podemos lançar mão do uso de um registro.</p>
<p>Abaixo podemos ver alguns campos de exemplo que constituem o registro de um cliente:</p>
<table>
<tbody>
<tr>
<td>CPF</td>
</tr>
<tr>
<td>Nome</td>
</tr>
<tr>
<td>Sobrenome</td>
</tr>
<tr>
<td>Rua</td>
</tr>
<tr>
<td>Telefone</td>
</tr>
</tbody>
</table>
<p>O registro é identificado por um nome, como por exemplo &#8220;Cliente&#8221;, e seus membros (campos) podem ser acessados por meio do uso do operador ponto (.). Por exemplo, para acessar o CPF do cliente poderíamos utilizar a seguinte declaração:</p>
<pre><span style="color: #ff0000;"><strong>Cliente.CPF</strong></span></pre>
<p>Além disso, um campo qualquer pode conter um outro registro, caso seja um campo de dados composto. Em nosso exemplo, o campo Rua poderia ser subdividido em mais campos, como Nome_Rua e Número_Rua, para diferenciar esses dois dados.</p>
<h3>O conceito de Chave</h3>
<p>Geralmente um dos campos de um registro é denominado Chave, ou ainda Campo-Chave. Usamos esse campo em particular para nos auxiliar na procura de um conjunto específico de dados dentro de um arquivo de dados (ou seja, na busca de um registro).</p>
<p>Em nosso exemplo, poderíamos pesquisar um cliente específico a partir de seu número de CPF, armazenado em um campo homônimo, que pode ser considerado o campo-chave.</p>
<h3>Exemplos</h3>
<p>A seguir temos um exemplo de implementação desse registro de clientes em C, usando uma estrutura:</p>
<pre><span style="color: #ff0000;"><strong>struct cliente</strong></span>
<span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>  char CPF[11];</strong></span>
<span style="color: #ff0000;"><strong>  char nome[30];</strong></span>
<span style="color: #ff0000;"><strong>  char sobrenome[50];</strong></span>
<span style="color: #ff0000;"><strong>  char rua[60];</strong></span>
<span style="color: #ff0000;"><strong>  int numero;</strong></span>
<span style="color: #ff0000;"><strong>  char telefone[11];</strong></span>
<span style="color: #ff0000;"><strong>};</strong></span></pre>
<p>&nbsp;</p>
<p>Note que na linguagem, além de definirmos os nomes de cada campo, também precisamos definir o tipo de dados de cada um, para que sejam realizadas as alocações de memória adequadas quando o registro for devidamente criado em tempo de execução do programa.</p>
<p>Essas estruturas são usadas para definir os <em><strong>registros </strong></em>que são armazenados em arquivos, e, juntamente com outras técnicas de programação, como os<strong> <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-uma-introducao/" target="_blank" rel="noopener noreferrer">ponteiros</a></strong>, permitem e simplificam a criação de estruturas de dados mais complexas, como por exemplo as pilhas, listas ligadas, filas e árvores, entre outras.</p>
<p>(<a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/" target="_blank" rel="noopener noreferrer">Clique aqui para saber mais sobre estruturas em linguagem C</a>).</p>
<p>Nos próximos artigos vamos explorar essas e outras estruturas de dados. Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/">Estruturas de Dados: o Registro</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Estruturas de Dados: O que são Pilhas</title>
		<link>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/</link>
					<comments>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 10 Aug 2017 13:50:56 +0000</pubDate>
				<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=9049</guid>

					<description><![CDATA[<p>O que são Pilhas (Stacks) Uma Pilha é uma estrutura de dados que serve como uma coleção de elementos,  e permite o acesso a somente um item de dados armazenado &#8211; o último item que foi inserido na estrutura (item do topo). Esse item pode ser lido ou removido. Caso seja removido, teremos acesso ao item imediatamente anterior a ele que se torna automaticamente o último item da pilha (topo), e assim sucessivamente, até que a estrutura esteja vazia. Uma pilha difere de um array, que é outra estrutura que permite o armazenamento de itens (dados) pois o acesso aos itens de uma pilha é restrito &#8211; somente um item pode ser lido ou removido por vez, na ordem inversa em que foram colocado na pilha, ao contrário de um array (vetor), onde podemos acessar qualquer elemento em qualquer posição diretamente, sem a necessidade de acessar itens anteriores primeiro (desde que conhecida a posição do elemento que se deseja acessar). Podemos implementar pilhas de algumas formas, como por meio de arrays ou com o uso de ADTs (Abstract Data Types / Tipos de Dados Abstratos). Estudaremos ambas as formas nestas lições. Aplicações das pilhas As pilhas encontram inúmeras aplicações em [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/">Estruturas de Dados: O que são Pilhas</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que são Pilhas (Stacks)</h2>
<p>Uma <strong>Pilha</strong> é uma estrutura de dados que serve como uma coleção de elementos,  e permite o acesso a somente um item de dados armazenado &#8211; o último item que foi inserido na estrutura (item do topo). Esse item pode ser lido ou removido.</p>
<p>Caso seja removido, teremos acesso ao item imediatamente anterior a ele que se torna automaticamente o último item da pilha (topo), e assim sucessivamente, até que a estrutura esteja vazia.</p>
<p>Uma pilha difere de um array, que é outra estrutura que permite o armazenamento de itens (dados) pois o acesso aos itens de uma pilha é restrito &#8211; somente um item pode ser lido ou removido por vez, na ordem inversa em que foram colocado na pilha, ao contrário de um array (vetor), onde podemos acessar qualquer elemento em qualquer posição diretamente, sem a necessidade de acessar itens anteriores primeiro (desde que conhecida a posição do elemento que se deseja acessar).</p>
<p>Podemos implementar pilhas de algumas formas, como por meio de arrays ou com o uso de <strong>ADTs</strong> (Abstract Data Types / Tipos de Dados Abstratos). Estudaremos ambas as formas nestas lições.</p>
<h3>Aplicações das pilhas</h3>
<p>As pilhas encontram inúmeras aplicações em programação e desenvolvimento de algoritmos, como por exemplo:</p>
<ul>
<li>Avaliação de Expressões e Parsing Sintático</li>
<li>Algoritmos de Backtracking</li>
<li>Gerenciamento de Memória em Tempo de Compilação</li>
<li>Implementação de diversos algoritmos, como Grahan scan e SMAWK</li>
<li>Operações como desfazer e refazer em aplicações</li>
<li>Controle de navegação em browsers</li>
<li>Endereçamento de instruções em microprocessadores</li>
<li>Análise de expressões aritméticas</li>
</ul>
<p>e muitas outras.</p>
<h3>Como funciona um Pilha</h3>
<p>Para entender como uma pilha funciona, faremos uma analogia com o mundo real.</p>
<p>Imagine uma pilha de pratos na cozinha. Se quisermos utilizar um prato, pegamos um do topo desta pilha (último prato). Se necessitarmos de outro, pegamos o próximo da pilha (que agora é o último), e assim por diante.</p>
<p>Quando um prato é lavado, após seu uso, pode ser recolocado novamente na pilha de pratos, sempre no topo. Esse prato recém-colocado na pilha passa a ser o último, e o primeiro que será retirado quando precisarmos usar um prato novamente.</p>
<p>Essa é a ideia geral de uma estrutura de dados do tipo pilha. Nela, os dados são inseridos na pilha (empilhados), e acessados em ordem inversa (o último a ser inserido é sempre o primeiro a ser utilizado). Colocar um elemento no topo de uma pilha é uma operação que recebe um nome especial: <strong>push</strong>. Já a remoção de um elemento do topo da pilha é uma operação denominada <strong>pop</strong>.</p>
<p>Por conta deste modo de operação, as pilhas são classificadas como estruturas de dados de armazenamento <strong>Last-In, First-Out</strong> &#8211; <strong>LIFO</strong>, &#8220;o último a entrar é o primeiro a sair&#8221;, pois o último item inserido na pilha é sempre o primeiro a ser removido (ou lido).</p>
<p>A figura a seguir ilustra uma pilha contendo valores numéricos, e seu topo assinalado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10395" title="Pilha em estruturas de dados" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/pilha-estrutura-de-dados.png" alt="Pilha em estruturas de dados" width="400" height="362" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/pilha-estrutura-de-dados.png 488w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/pilha-estrutura-de-dados-420x380.png 420w" sizes="auto, (max-width: 400px) 100vw, 400px" /></p>
<h3>Operações Push e Pop</h3>
<p>Uma pilha permite o acesso somente ao último item de dados inserido. Ao ser removido esse item, é possível acessar o item anterior a ele, e assim por diante. Para tal, lançamos mão de algumas operações específicas, tanto para inserir quanto para retirar itens da pilha.</p>
<p>As duas principais operações realizadas sobre uma pilha são as operações básicas <strong>push</strong> e <strong>pop</strong>.</p>
<p>A operação push é executada para adicionar um elemento ao topo de uma pilha.</p>
<p>A operação pop é executada para retirar um elemento do topo de uma pilha. O elemento retirado é sempre o último que foi adicionado com a operação push.</p>
<p>A figura a seguir ilustra a operação push em uma pilha, sendo executada duas vezes para permitir a inserção de dois novos valores em uma pilha já existente:</p>
<div id="attachment_10397" style="width: 811px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10397" class="wp-image-10397" title="Operação push() em uma pilha" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-push-pilha-estruturas-dados.png" alt="Operação push() em uma pilha" width="801" height="362" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-push-pilha-estruturas-dados.png 1029w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-push-pilha-estruturas-dados-420x190.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-push-pilha-estruturas-dados-768x347.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-push-pilha-estruturas-dados-1024x463.png 1024w" sizes="auto, (max-width: 801px) 100vw, 801px" /><p id="caption-attachment-10397" class="wp-caption-text">Operação push em uma pilha</p></div>
<p>Já a figura a seguir ilustra a operação pop sendo efetuada sobre a pilha, de modo a remover elementos. Note que se trata de uma operação exatamente inversa à operação push:</p>
<div id="attachment_10398" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10398" class="wp-image-10398 size-full" title="Operação pop em uma pilha" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-pop-pilha-estruturas-dados-e1525887438393.png" alt="Operação pop em uma pilha" width="1014" height="486" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-pop-pilha-estruturas-dados-e1525887438393.png 1014w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-pop-pilha-estruturas-dados-e1525887438393-420x201.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/08/operação-pop-pilha-estruturas-dados-e1525887438393-768x368.png 768w" sizes="auto, (max-width: 1014px) 100vw, 1014px" /><p id="caption-attachment-10398" class="wp-caption-text">Operação pop em uma pilha</p></div>
<h3>Mais sobre pilhas</h3>
<p>As pilhas, no geral, são estruturas de dados de tamanho pequeno. Com apenas alguns itens de dados, uma pilha pode ser útil na realização de diversas tarefas computacionais.</p>
<p>Além das operações push e pop, existem algumas outras operações comuns implementadas em pilhas, como <strong>peek</strong>, <strong>isFull</strong> e <strong>isEmpty</strong>. A seguir temos uma breve descrição de cada uma:</p>
<ul>
<li>peek &#8211; Consiste na leitura do valor armazenado no topo da pilha, sem no entanto removê-lo. Às vezes chamada de <em>top</em>.</li>
<li>isFull &#8211; Função utilizada para verificar se uma pilha está cheia (ou seja, se não é mais possível armazenar itens)</li>
<li>isEmpty &#8211; Função que verifica se uma pilha está vazia &#8211; ou seja, se não é possível continuar a remover itens.</li>
</ul>
<p>As pilhas podem ser implementadas de duas formas principais: usando arrays ou usando listas encadeadas (<em>linked lists</em>). Na próxima lição veremos como implementar uma pilha usando arrays em linguagem C, e posteriormente <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/como-implementar-uma-pilha-em-java-usando-arrays/">como implementar pilhas em Java</a>.</p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/">O que são Estruturas de Dados</a></p>
<p style="text-align: right;">Próximo: Como implementar uma pilha em linguagem C usando array.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/">Estruturas de Dados: O que são Pilhas</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>O que são Estruturas de Dados</title>
		<link>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/</link>
					<comments>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 04 Mar 2017 13:24:04 +0000</pubDate>
				<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Lógica]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=9045</guid>

					<description><![CDATA[<p>Estruturas de Dados e Algoritmos Uma Estrutura de Dados consiste em uma organização de dados na memória de um computador ou em um dispositivo de armazenamento, de modo que esses dados possam ser utilizados de forma eficiente. Estruturas de dados diversas encontram muitas aplicações em desenvolvimento de sistemas, sendo que algumas são altamente especializadas e utilizadas em tarefas específicas. Usando estruturas de dados adequadas, podemos administrar uma grande quantidade de dados de forma eficiente, com aplicações em bancos de dados ou serviços de busca e indexação de dados, e no desenvolvimento de algoritmos eficientes. Figura 1: Estrutura de Dados básica &#8211; Array Um Algoritmo é um conjunto de instruções detalhadas e ordenadas, cujo propósito é realizar uma tarefa ou operação específica. Os algoritmos são utilizados para manipular dados nestas estruturas de várias formas, como por exemplo, inserindo dados, procurando itens específicos ou ainda ordenando seus elementos. Neste tutorial vamos tratar exclusivamente da definição de Estrutura de Dados. Operações básicas em Estruturas de Dados No geral, em uma estrutura de dados precisamos saber como realizar um determinado conjunto de operações básicas, como por exemplo: Inserir um novo item Excluir um item existente Localizar (procurar) um elemento específico Varrer (percorrer) todos os [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/">O que são Estruturas de Dados</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Estruturas de Dados e Algoritmos</h2>
<p>Uma Estrutura de Dados consiste em uma organização de dados na memória de um computador ou em um dispositivo de armazenamento, de modo que esses dados possam ser utilizados de forma eficiente.</p>
<p>Estruturas de dados diversas encontram muitas aplicações em desenvolvimento de sistemas, sendo que algumas são altamente especializadas e utilizadas em tarefas específicas. Usando estruturas de dados adequadas, podemos administrar uma grande quantidade de dados de forma eficiente, com aplicações em bancos de dados ou serviços de busca e indexação de dados, e no desenvolvimento de algoritmos eficientes.</p>
<div id="attachment_9074" style="width: 810px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-9074" class="wp-image-9074" title="Estrutura de Dados básica: Array" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/03/array-estrutura-dados.png" alt="Estrutura de Dados básica: Array" width="800" height="230" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/03/array-estrutura-dados.png 919w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/03/array-estrutura-dados-420x121.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/03/array-estrutura-dados-768x221.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /><p id="caption-attachment-9074" class="wp-caption-text">Figura 1: Estrutura de Dados básica &#8211; Array</p></div>
<p>Um Algoritmo é um conjunto de instruções detalhadas e ordenadas, cujo propósito é realizar uma tarefa ou operação específica.</p>
<p>Os algoritmos são utilizados para manipular dados nestas estruturas de várias formas, como por exemplo, inserindo dados, procurando itens específicos ou ainda ordenando seus elementos.</p>
<p>Neste tutorial vamos tratar exclusivamente da definição de Estrutura de Dados.</p>
<h3>Operações básicas em Estruturas de Dados</h3>
<p>No geral, em uma estrutura de dados precisamos saber como realizar um determinado conjunto de operações básicas, como por exemplo:</p>
<ul>
<li>Inserir um novo item</li>
<li>Excluir um item existente</li>
<li>Localizar (procurar) um elemento específico</li>
<li>Varrer (percorrer) todos os itens constituintes da estrutura para visualização</li>
<li>Classificar (ordenar), o que consiste em colocar os itens de dados em uma determinada ordem (numérica, alfabética, etc.)</li>
</ul>
<p>Entre outras que estudaremos nas pŕoximas lições.</p>
<h3>Estruturas de Dados principais</h3>
<p>As principais estruturas de dados que estudaremos neste curso da Bóson Treinamentos em Tecnologia são as seguintes:</p>
<ul>
<li>Array (vetores e matrizes)</li>
<li>Registro</li>
<li>Union</li>
<li>Lista encadeada</li>
<li>Pilha</li>
<li>Fila</li>
<li>Fila de prioridades</li>
<li>Árvore binária</li>
<li>Tabela Hash</li>
<li>Heap</li>
<li>Grafo</li>
</ul>
<p>As estruturas de dados podem implementar um ou mais tipos de dados abstratos (ADT / Abstract Data Types), os quais especificam operações que podem ser executadas em uma estrutura de dados, além da complexidade dessas operações.</p>
<p>A seguir, discutiremos o conceito de Registro, estrutura amplamente utilizada na construção de estruturas de dados.</p>
<p>Próximo: O Conceito de <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-o-registro/">Registro em Estruturas de Dados</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/">O que são Estruturas de Dados</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
