Algorithms & Data Structure

The TEACHING content is temporarily only available in Portuguese. Try to give it a go and check the videos on the YouTube Channel by clicking on the buttons bellow. English videos are coming soon. Codes are available in English.

There are more materials on the video's description also on YouTube.

1. Fundamentos de Algoritmos Sequenciais

Algoritmos Sequenciais e Pseudo Linguagem (Portugol)

  • Fundamentos: Conceitos, Representação, Fluxogramas, Pseudo Linguagem

  • Tipos de Dados: tipos de dados que podem ser considerados para escrevermos algoritmos

  • Estrutura: Tipos de Dados, Variáveis, Comandos de Entrada e Saída e Comandos de Atribuição

  • Portugol (Ex): Variáveis, Tipos de Dados, Comandos de Entrada e Saída e Comandos de Atribuição


Código Fonte: Hello World em C

2. Linguagem C: Estrutura do Código-Fonte e Entrada e Saída

Entrada e Saída em C e o HELLO WORLD

  • Hello World: Como escrever seu primeiro algoritmo em Linguagem C.

  • scanf e printf: Como usar as funções de leitura do teclado e impressão na tela.

3. Linguagem C: Tipos de Dados e Operações Lógicas e Aritméticas

Tipos de Dados e Operações

  • Tipos de Dados: Tipos de Dados em Linguagem C (int, char, float, double, void)

  • Operações: Operações lógicas e aritméticas com dados inteiros (int) e de ponto flutuante (double e float) em C

4. Condicionais: Estruturas de Seleção (Portugol + Linguagem C)

Estruturas de Seleção: SE-SENÃO (IF-ELSE), ESCOLHA-CASO (SWITCH-CASE)

Vídeos:

PORTUGOL

  • Fundamentos: Tipos de Condicionais em Algoritmos. Protótipo e quando usar cada tipo de seleção: simples, composta, encadeada e múltipla-escolha.

  • SE (Portugol): Usar o comando SE em Portugol e entender a execução das linhas.

  • Operadores Relacionais: Operadores Lógicos e Relacionais com Tabelas Verdade das funções lógicas.

  • Escolha-Caso: Usar a estrutura condicional ESCOLHA-CASO para construir um MENU de lanchonete em Portugol

LINGUAGEM C

  • IF-ELSE: Uso do comando IF com o ELSE em Linguagem C.

  • IF - ELSE IF - ELSE: Seleção composta e encadeada IF-ELSE em Linguagem C.

  • Calculadora (IF-ELSE): Construindo uma calculadora com IF-ELSE em Linguagem C.

  • Switch-Case: Uma calculadora com a estrutura de múltipla-escolha SWITCH-CASE em Linguagem C.

  • Expressões Lógicas: Teste com operadores lógicos e relacionais na formação de expressões para condicionais em Linguagem C.

5. Repetição: Laços / Loops (Portugol + Linguagem C)

Repetição: PARA (FOR), WHILE (ENQUANTO), DO-WHILE, (FAÇA-ENQUANTO)

Vídeos:

PORTUGOL

  • Fundamentos: O básico para entender o que são as repetições (laços ou loops) em algoritmos sequenciais.

  • PARA: o comando para repetição contada em Portugol.

  • ENQUANTO: o comando para repetição com teste no início em Portugol

  • FAÇA-ENQUANTO: o comando para repetição com teste no fim em Portugol.

  • Laço + Seleção: criando um menu combinando uma repetição com uma seleção em Portugol (FAÇA-ENQUANTO com ESCOLHA-CASO)

LINGUAGEM C

  • FOR: o comando para repetição contada em Linguagem C.

  • FOR FOR: repetição contada encadeada em Linguagem C.

  • WHILE: repetição com teste no início em Linguagem C.

  • DO-WHILE: repetição com teste no fim em Linguagem C.

  • FOR + IF: criar um programa com várias condições (usando IF) dentro de um laço FOR

  • WHILE + SWITCH CASE: criar uma calculadora com MENU que fica na tela tipo um loop infinito

  • DO WHILE + IF: criar um programa com várias condições (usando IF) dentro de um laço DO WHILE

6. Vetores

Vetores

Vídeos:

PORTUGOL

  • Fundamentos: Entender o que são vetores e como eles são vistos na memória.

  • Percorrer o Vetor: Utilizar estruturas de repetição para acessar todos os elementos do vetor.

  • Somar os vetores: Realizar operações aritméticas entre dois vetores

LINGUAGEM C

  • Percorrer em Ling C: Utilizar estruturas de repetição para acessar todos os elementos do vetor em Linguagem C.

7. Matrizes

Matrizes

Vídeos:

PORTUGOL

  • Fundamentos: O que são Matrizes e como elas são armazenadas e acessadas na memória?

  • Percorrer em Portugol: Utilizando laços PARA do Portugol, aninhados, para preenher e ler elementos das Matrizes.

LINGUAGEM C

  • Percorrer em Linguagem C: Utilizando laços FOR em Linguagem C, aninhados, para preencher e ler elementos das Matrizes.

  • Operações em Linguagem C: Para duas matrizes, vamos calcular as matrizes soma e multiplicação resultantes, além da matriz transposta da matriz 1.

8. STRINGs (Cadeias de Caracteres)

STRINGS

LINGUAGEM C

  • Fundamentos: Vamos aprender o que são STRINGs, ou cadeias de caracteres, em Linguagem C. Aqui vemos o conceito, para que servem, como funcionam e como declarar. Além disso, entendemos um pouco da sua relação com vetores. .

  • Ler do Teclado: Vamos aprender a ler STRINGs do teclado em Linguagem C. Primeiro testamos com a função scanf(). Depois, com a função fgets(). E vemos também a importância de limpar o buffer de entrada para ler mais de uma STRING no mesmo código e evitar sobreposição dos dados. Por fim, vemos como calcular o tamanho de uma STRING com a função strlen().

  • Copiar e Concatenar: Vamos copiar o conteúdo de uma STRING para outra com a função strcpy() e strncpy(). Vamos também concatenar o conteúdo de duas STRINGs com strcat().

  • Comparar: Vamos comparar o conteúdo de duas STRINGs usando as funções strncmp().

9. Ponteiros em C

Ponteiros

LINGUAGEM C

  • Fundamentos: Vamos aprender o conceito de Ponteiros e como estas variáveis se comportam na memória.

  • Tipos de Dados: Vamos estudar os tipos de ponteiros e como atribuir cada tipo de ponteiro a cada tipo de variável. Também vamos ver por que não podemos atribuir ponteiros a tipos diferentes de dados,.

  • Atribuição (1): Vamos ver como fazer para copiar um ponteiro para o outro (são dois vídeos e este é o primeiro). Assim, ambos apontarão para a mesma variável.

  • Atribuição (2): Vamos ver como fazer para copiar um ponteiro para o outro (são dois vídeos e este é o segundo). Assim, ambos apontarão para a mesma variável.

  • Aritmética (1): Aqui vamos estudar (detalhando a parte teórica) sobre as operações aritméticas soma e subtração que são permitidas entre ponteiros. Vamos ver aqui também como ocorre o incremento de ponteiros (de acordo com o tipo de dado que ele aponta).

  • Aritmética (2): Aqui vamos executar um código para mostrar o incremento do ponteiro de acordo com o tipo que ele aponta. Vamos fazer isso tanto fazendo p++ e também vamos observar o resultado de somar uma constante ao ponteiro tipo p = p + 5. Para isso, vamos ver também como imprimir o tipo endereço usado no printf usando o %p.

  • Aritmética (3): Aqui vamos executar o código e mostrar como somar e subtrair os ponteiros entre si. Vamos analisar expressões como "p3 = p1 + p2" e "p4 = p2 - p1" e ver o que isso significa.

  • Aritmética (4): Aqui vamos modificar os conteúdos das variáveis apontadas através dos ponteiros. Vamos combinar isso com aritmética de ponteiros e analisar expressões do tipo: *p3 = *p2 + *p1;.

  • Vetores: Percorrer um vetor através da aritmética de ponteiros, ou seja, vamos percorrer o vetor a partir do endereço inicial dele e seguimos incrementando o ponteiro para percorrer o vetor sem precisar indexar. Vamos começar com p = &a[0] para fazer o ponteiro apontar para o vetor e seguir percorrendo apenas por p++;

  • Strings: Vamos percorrer uma cadeia de caracteres, ou seja, percorrer uma string, sem precisar indexar (acessar pelo índice). Vamos percorrer a string através de um ponteiro e e contar quantos caracteres há naquela string. Aqui utilizamos a técnica de percorrer um vetor por aritmética de ponteiros.

  • Matriz (1): Vamos ver aqui uma matriz de ponteiros, ou seja, como usar uma matriz em que os elementos são ponteiros e não variáveis comuns.

  • Matriz (2): Como percorrer uma matriz de ponteiros e acessar diferentes variáveis em diferentes posições de memória. Aqui vamos pegar um código, declarar uma matriz de ponteiros inteiros e fazer essa matriz apontar para diversas variáveis na memória. Além disso, vamos passar a matriz de ponteiros como parâmetro em uma função.

  • Matriz (3): O vídeo mostra com utilizar uma matriz de ponteiros para apontar para várias cadeias de caracteres diferentes (strings), sendo que cada cadeia é uma mensagem de erro que pode ser escolhida pelo sistema operacional.

  • Ponteiro de Ponteiro: Indireção de Múltipla ou Ponteiros de Ponteiros. Vamos analisar na memória e com um código como utilizar variáveis que são ponteiros de ponteiros.


12. STRUCTS (Registros)

STRUCTs

LINGUAGEM C

  • Fundamentos: Vamos aprender o que são STRUCTs (REGISTROS), em Linguagem C. Aqui vemos o conceito, para que servem, como funcionam e como declarar.

  • Acessar campos: Vamos declarar STRUCTs criando um novo tipo de dado para cadastrar um aluno e acessar os campos desta STRUCT.

  • Ler STRINGs: Vamos aprender a ler STRINGs dentro das STRUCTS. Isso é útil se queremos armazenas nomes, endereços e quaisquer outras cadeias de caracteres.

  • Atribuição: Como copiar conteúdo de campos de uma STRUCT para outra, bem como copiar STRUCTs inteiras para outras.

  • Typedef: Utilizar o comando TYPEDEF para definir novos nomes para os tipos de dados nativos ou definidos pelo usuário.

  • Ponteiros: Vamos aprender a usar ponteiros para fazer STRUCTs apontarem para outras STRUCTs. Além disso, vamos acessar campos específicos de STRUCTs com ponteiros só para algum elemento.

  • Vetores e Matrizes: Vamos aprender a criar e percorrer vetores (matrizes) de STRUCTs.

  • Lista Postal: Vamos construir uma lista postal para cadastrar pessoas e endereços com STRUCTs em linguagem C. Nossa base da implementação será um vetor de STRUCTs e vamos criar funções para inserir um cadastro, excluir um cadastro e imprimir os cadastros na tela.

15. Arquivos em C

16. Alocação Dinâmica

Alocação Dinâmica de Memória

Vídeos:

  • Visão da Memória: Aprender a noção de Espaço de Endereçamento para entender como o seu "código rodando" é visto na memória principal. Para isso, veremos as divisões da memória: Pilha + Heap + espaço para varáveis globais e de inicialização + região de código (instruções)

  • MALLOC e FREE: Usar as funções da biblioteca padrão para solicitar memória em tempo de execução e liberar esta memória em seguida.

17. Recursividade

Recursividade

Vídeos:

  • Fundamentos: Entender o conceito de função e recursivas, o caso básico e a evolução das chamadas. Para que usar e como usar. Além disso, vemos qual o impacto disso na memória onde ficam armazenadas as variáveis locais geradas e os endereços de retorno necessários.

  • Fatorial Recursivo: Implementação de um algoritmo fatorial recursivo. Mostra as chamadas empilhadas até o caso básico, bem como o retorno progressivo.

18. Mecanismos de Dados: Introdução a FILA, LISTA, PILHA e ÁRVORE

19. FILA

FILA

Vídeos:

  • Fila Linear: O conceito de FILA e sua estrutura na Memória.

  • Fila Linear em Ling C: Implementação de uma FILA de caracteres em uma MATRIZ acessada por indexação de matrizes.

  • Fila Circular: O conceito de FILA CIRCULAR e sua estrutura na Memória.

  • Fila Circular em Ling C: Implementação de uma FILA CIRCULAR de caracteres em uma MATRIZ acessada por indexação de matrizes.

  • Agenda em Ling C: Implementação de uma FILA para uma AGENDA DE COMPROMISSOS tendo como base uma MATRIZ indexada que armazena ponteiros para STRINGs em posições diversas da memória..

20. PILHA

PILHA

Vídeos:

  • Fundamentos: O conceito de PILHA e sua estrutura na Memória.

  • PILHA em Ling C: Implementação de uma PILHA de caracteres em uma MATRIZ acessada por indexação de matrizes.

Tópicos Extras

Configurar o editor de código Atom e compilador GCC para usar no Windows 10