7  Vetores, Matrizes, Fila e Pilha

Este capítulo aprofunda estruturas lineares muito usadas em programação.

7.1 Vetores (arrays unidimensionais)

Vetores armazenam elementos em sequência e cada posição tem um índice.

7.1.1 Exemplo 1: notas de uma turma

const notas = [7.0, 8.5, 6.0, 9.0];

console.log(`Primeira nota: ${notas[0]}`);
console.log(`Quantidade de notas: ${notas.length}`);

7.1.2 Exemplo 2: soma e média

const valores = [10, 20, 30, 40];
let soma = 0;

for (let i = 0; i < valores.length; i++) {
  soma += valores[i];
}

const media = soma / valores.length;
console.log(`Soma: ${soma} | Média: ${media}`);

7.1.3 Exemplo 3: filtro de valores

const numeros = [3, 8, 11, 14, 19, 20];
const pares = numeros.filter((n) => n % 2 === 0);

console.log(pares);

7.2 Matrizes (arrays bidimensionais)

Uma matriz é um array de arrays, com linhas e colunas.

7.2.1 Exemplo 1: acesso por linha e coluna

const matriz = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

console.log(matriz[1][2]); // 6

7.2.2 Exemplo 2: percorrer todos os elementos

const tabela = [
  [10, 20],
  [30, 40],
  [50, 60]
];

for (let linha = 0; linha < tabela.length; linha++) {
  for (let coluna = 0; coluna < tabela[linha].length; coluna++) {
    console.log(`Posição [${linha}][${coluna}] = ${tabela[linha][coluna]}`);
  }
}

7.2.3 Exemplo 3: diagonal principal

const m = [
  [2, 1, 0],
  [4, 3, 8],
  [9, 7, 6]
];

let diagonal = 0;

for (let i = 0; i < m.length; i++) {
  diagonal += m[i][i];
}

console.log(`Soma diagonal principal: ${diagonal}`);

7.3 Fila (FIFO: First In, First Out)

Em fila, o primeiro a entrar é o primeiro a sair.

7.3.1 Exemplo 1: atendimento

const fila = [];

fila.push("Aluno 1");
fila.push("Aluno 2");
fila.push("Aluno 3");

const atendido = fila.shift();
console.log(`Atendido: ${atendido}`);
console.log(fila);

7.3.2 Exemplo 2: próximo da fila

const filaSenhas = ["A01", "A02", "A03"];
console.log(`Próximo: ${filaSenhas[0]}`);

7.3.3 Exemplo 3: fila com validação

const filaLaboratorio = [];

function chamarAluno() {
  if (filaLaboratorio.length === 0) {
    return "Fila vazia";
  }

  return filaLaboratorio.shift();
}

console.log(chamarAluno());
filaLaboratorio.push("Carlos");
console.log(chamarAluno());

7.4 Pilha (LIFO: Last In, First Out)

Em pilha, o último a entrar é o primeiro a sair.

7.4.1 Exemplo 1: empilhar e desempilhar

const pilha = [];

pilha.push("Prato 1");
pilha.push("Prato 2");
pilha.push("Prato 3");

const removido = pilha.pop();
console.log(`Removido: ${removido}`);
console.log(pilha);

7.4.2 Exemplo 2: topo sem remover

const historico = ["home", "produtos", "checkout"];
const topo = historico[historico.length - 1];

console.log(`Página atual: ${topo}`);

7.4.3 Exemplo 3: desfazer ação

const acoes = [];

function executar(acao) {
  acoes.push(acao);
}

function desfazer() {
  if (acoes.length === 0) return "Nada para desfazer";
  return `Desfez: ${acoes.pop()}`;
}

executar("Digitou texto");
executar("Apagou linha");
console.log(desfazer());
console.log(desfazer());
console.log(desfazer());

7.5 Aplicação prática combinando as estruturas

const filaAtendimento = ["Aluno A", "Aluno B"];
const historicoChamadas = [];
const temposEspera = [4, 6, 3, 5];

const chamado = filaAtendimento.shift();
historicoChamadas.push(chamado);

const mediaEspera =
  temposEspera.reduce((acc, t) => acc + t, 0) / temposEspera.length;

console.log(`Chamado agora: ${chamado}`);
console.log(`Média de espera: ${mediaEspera} min`);

7.6 Exercícios

  1. Crie um vetor de 6 números e calcule a média.
  2. Crie uma matriz 3x2 e exiba só os valores maiores que 25.
  3. Simule uma fila com 4 pessoas e atenda 2.
  4. Simule uma pilha de páginas e implemente “voltar”.
  5. Desafio: combine fila e pilha em um sistema simples de atendimento escolar.