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.