Explorando as Fundamentais Estruturas de Dados: Uma Introdução
Tags: braziliandevs
Published: 2023-08-01 20:21:01

## Introdução

Seja bem-vindo a esta primeira publicação de uma série que pretendo fazer sobre estrutura de dados. Sou um estudante, em transição de carreira, que está estudando esta disciplina no tecnólogo em análise e desenvolvimento de sistemas, e gostaria de compartilhar tudo aquilo que estou aprendendo e estudando mais sobre o assunto. 

Nesta série vamos explorar os blocos fundamentais no que diz respeito ao desenvolvimento de software e solução de problemas. Vamos começar!

### Definição

Podemos pensar que Estrutura de Dados são conjuntos que armazenam dados de forma eficiente, fornecendo ao usuário operações que o auxiliam a trabalhar com estas estruturas (ordenar, buscar e outros).

Um conjunto de dados é um tipo *abstrato de dados*, estabelecendo uma relação, as funções e as operações que podem ser aplicados a estes dados. Assim, uma *estrutura de dados* é uma **implementação** de um *tipo abstrato de dados*.

Deste modo, temos alguns tipos de Estrutura de Dados como Vetores, Matrizes, Pilhas, Filas, Árvores, Hashtables e Grafos.

## Básico

### Complexidade Big O

Big O é uma forma de categorizarmos algoritmos em tempo de execução e consumo de memória com base no tamanho da entrada de dados fornecida. Big O não tenta ser uma medida exata, e sim uma ideia generalizada para compreender a ordem de grandeza do algoritmo.

E é importante entender isto pois é uma ferramenta que nos ajuda na tomada de decisões sobre qual estrutura de dados será implementada para determinado algoritmo pretendido. Sabendo como o algoritmo vai performar, nos dá uma segurança maior sobre a qualidade do programa que será desenvolvido.

### Estrutura de Vetores e Matrizes

Essas estruturas de dados são homogêneas pois todos os elementos tem o **mesmo tipo associado**.

Desta maneira, temos os Vetores que é:
- Variável composta homogênea **unidimensional**;
- Formada por uma sequência de valores, todos do mesmo tipo, com o mesmo identificador e alocadas em sequência na memória.
- Uma vez que todos os valores possuem o mesmo identificador, o que distingue um valor do outro é a sua posição nesta sequência (estrutura), aqui chamaremos esta posição de índice.

Todos os Vetores são Matrizes, a diferença é que a Matriz possui mais de uma dimensão, ou seja, Matriz é:
- Variável composta homogênea **multidimensional**;
- Formada por uma sequência de valores, todos do mesmo tipo, com o mesmo identificador e alocadas em sequência na memória.
- Uma vez que todos os valores possuem o mesmo identificador, o que distingue um valor do outro é a sua posição nesta sequência (estrutura), aqui chamaremos esta posição de índice.

#### Pseudocódigo
```
// Declarando vetor
Declarar
	notas[3] real;

	// Atribuindo em Vetor
	notas[0] <- 9,0;
	notas[1] <- 8,0;
	notas[2] <- 9,5;

// Declarando matriz
Declarar
	notas[2][2] real;

	// Atribuindo em Matriz
	notas[0][0] <- 9,5;
	notas[0][1] <- 9,0;
	notas[1][0] <- 7,0;
	notas[1][1] <- 5.6;

// Mostrando Valores
Algoritmo MostrarVetor
inicio_algoritmo
	Declarar
		vet[25],i inteiro;

	para i de 0 até 24 passo + 1 faça
		escrever("Digite um valor inteiro");
		ler(vet[i]);
		escrever(vet[i]);
	fimpara;
fim_algoritmo

```

#### Java

```java
import javax.swing.JOptionPane;

public class SomaDeValores {

    public static void main(String[] args) {
        int tamanhoVetor = 10;
        int[] valores = new int[tamanhoVetor];

        for (int i = 0; i < tamanhoVetor; i++) {
            String entrada = JOptionPane.showInputDialog("Digite o valor " + (i + 1) + ":");
            valores[i] = Integer.parseInt(entrada);
        }

        int soma = 0;
        for (int valor : valores) {
            soma += valor;
        }

        JOptionPane.showMessageDialog(null, "A soma dos valores é: " + soma);
    }
}

```

#### Typescript

- Em Typescript não há um tipo específico chamado "vetor", mas os vetores são utilizados por meio de *arrays*.
- Assim, pode-se trabalhar com arrays para representar estruturas de dados *semelhantes* aos vetores.
- Arrays em Typescript é uma coleção ordenada de elementos do mesmo tipo (ou de tipos compatíveis) e é definido pela sintaxe dos colchetes `[]` ou `Array<> = []`.

```typescript
function somarValores(array: number[]): number {
  let soma = 0;
  for (let i = 0; i < array.length; i++) {
    soma += array[i];
  }
  return soma;
}

// Array com 10 valores
const numeros: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// Chama a função para somar os valores da array
const resultado = somarValores(numeros);

console.log(`A soma dos valores é: ${resultado}`);

```

## Praticando

Gosto de praticar o que foi estudado resolvendo problemas na plataforma [Codewars](https://www.codewars.com/). Desta forma consigo aplicar conceitos teóricos para a resolução de problemas e desafios. Vamos praticar!

### 8 kyu - Add Length

Descrição do problema:

E se precisarmos que o comprimento das palavras, separadas por um espaço, seja adicionado ao final da própria palavra e que seja retornado como um array?

**Exemplo(Entrada --> Saída)**
```
"apple ban" --> ["apple 5", "ban 3"]
"you will win" --> ["you 3", "will 4", "win 3"]
```

Sua tarefa é escrever uma função que receba uma String e retorne um Array com o comprimento de cada palavra adicionado a cada elemento.

Solução:

```typescript
export function addLength(str: string): string[] {
  //Transformando a string em uma array
  let strArray = str.split(' ');

  //Criando uma array vazia de Strings para a resposta
  let strReturnArray: string[] = [];

  //Loop para iterar sobre todos os elementos desta array de strings
  for (let i = 0; i < strArray.length; i++) {
	//Template: "String StringLength"
    let str = `${strArray[i]} ${strArray[i].length}`;

	//Utilizando uma operação de Arrays para adicionar essa string na Array.
    strReturnArray.push(str);
  }
  
  return strReturnArray;
}
```


## Conclusão

Chegamos ao final desta publicação sobre Estrutura de Dados. Este será a primeira publicação de uma série que quero fazer utilizando minhas anotações de estudo, e para que possa compartilhar aquilo que estou aprendendo e como estudo.

Até a próxima!