Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Apostila de Estrutura de Dados com C++, Trabalhos de Estruturas de Dados e Algoritmos

Fornece conceitos e exemplos da aplicação de estruturas de dados usando a linguagem C.

Tipologia: Trabalhos

2021

À venda por 04/11/2021

paulo_bacalhau
paulo_bacalhau 🇧🇷

1 documento

1 / 251

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Prof. Paulo Alexandre Serra Coucello da Fonseca
Estrutura de Dados
Estrutura de Dados 2021
Página: 1
Apostila de Estrutura de Dados
com C
2021.2
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Apostila de Estrutura de Dados com C++ e outras Trabalhos em PDF para Estruturas de Dados e Algoritmos, somente na Docsity!

Estrutura de Dados

Apostila de Estrutura de Dados

com C

Estrutura de Dados

  • Introdução..................................................................................................................... Sumário
    • Estruturas de Dados
    • Ementa
  • Introdução a linguagem de programação C
    • Objetivos.................................................................................................................
    • Apresentação...........................................................................................................
      • Características da linguagem C
    • Estrutura básica de um programa em C
      • Comentários
    • Fundamentos em C..................................................................................................
      • Diretiva #include
    • Comandos básicos
      • Instruções de entrada e saída
      • A função printf ( )
      • A função scanf ( )
      • Funções malloc e free
    • Tipos de dados
    • Variáveis
      • Variáveis
      • Inicializando variáveis
      • Nomes de variáveis
    • Operadores
      • Operadores relacionais e lógicos..........................................................................
      • Incremento e decremento.....................................................................................
    • Tomada de decisão
      • Comando if-else Estrutura de Dados
      • Comando switch
    • Laços
      • Comando for
      • Comando while
      • Comando do-while
    • Resumo
    • Atividades de aprendizagem
  • Funções, matrizes/vetores, ponteiros e arquivos
    • Objetivos.................................................................................................................
    • Funções
      • Protótipo de uma função
      • Função recursiva
    • Matrizes/Vetores
      • Referenciação e atribuição dos elementos de uma matriz/vetor
      • Inicialização de matrizes/vetores
    • Ponteiros
      • Operadores
      • Declaração de ponteiros
      • Inicialização de ponteiros
    • Arquivos
      • Funções para manipulação de arquivos
      • Arquivos em modo texto
      • Funções para ler dados
      • Funções para escrever dados................................................................................
      • Estruturação de dados em arquivos textos
      • Acesso caractere a caractere
      • Acesso linha a linha............................................................................................. Estrutura de Dados
      • Acesso via palavras chave
      • Arquivos em modo binário
      • Função para salvar e recuperar
    • Resumo
    • Atividades de aprendizagem
  • Visão geral de estrutura de dados e listas lineares
    • Objetivos.................................................................................................................
    • Introdução
    • Conceitos básicos
      • Conceito de Estrutura de Dados
      • Tipos de dados
      • Tipos abstratos de dados
      • Estruturas de dados
        • Definição
        • Declaração do ponteiro para registro
        • Alocação de memória para um registro
        • Atribuição a um campo do registro
        • Liberar memória de endereço pa2
      • Listas lineares......................................................................................................
      • Tipos de listas lineares
        • a) Lista estática desordenada.
        • b) Lista estática ordenada
        • c) Lista dinâmica desordenada
        • d) Lista dinâmica ordenada
    • Resumo
    • Atividades de aprendizagem
  • Pilhas
    • Objetivos.................................................................................................................
    • Introdução Estrutura de Dados
    • Pilha estática
      • Operações básicas
    • Pilha dinâmica.......................................................................................................
      • Operações básicas
    • Resumo
    • Atividades de aprendizagem
  • Filas e árvores
    • Objetivos...............................................................................................................
    • Introdução à fila
      • Aplicações de filas no âmbito computacional
      • Formas de representação das filas
    • Fila estática
    • Fila dinâmica
    • Introdução à árvore
    • Árvore binária
      • Percurso em árvores binárias
  • Ordenação e pesquisa
    • Objetivos...............................................................................................................
    • Introdução à ordenação
    • Método da bolha ou bubblesort
    • Introdução à pesquisa
    • Pesquisa sequencial
    • Pesquisa binária
    • Resumo
    • Atividades de aprendizagem
  • Desenvolvimento de algoritmos / Análise de algoritmos
    • Introdução Estrutura de Dados
    • O que é um algoritmo
    • Medidas de Complexidade
    • Análise de Complexidade de um algoritmo
    • Notação O
    • Convenções para as expressões de O
    • Exemplo de análise da notação O
    • Análise de complexidade da Busca Linear
      • Pior Caso...........................................................................................................
      • Caso Médio
      • Melhor Caso
      • Um exemplo numérico
  • Divisão e Conquista
    • Máximo e Mínimo de uma lista
    • Ordenação por Intercalação
    • Ordenação por Concatenação
    • Busca Binária
      • Rapidez do BuscaBin
  • Métodos de Ordenação
    • Métodos de Ordenação Interna
    • Método de ordenação por Seleção
      • Algoritmo de Ordenação por seleção:
      • Análise de complexidade
    • Método de ordenação por Inserção
      • Algoritmo de Ordenação por Inserção
      • Análise de complexidade do algoritmo
    • Método de ordenação Quicksort
      • Algoritmo Partição Estrutura de Dados
      • Versão recursiva do Quicksort
      • Outra versão recursiva do Quicksort
      • Conclusão
    • Método de ordenação Shellsort..............................................................................
      • Algoritmo Shellsort
      • Análise do algoritmo
    • Método de ordenação Heapsort
      • Fila de prioridades
      • Heaps
      • Heapsort
      • Análise de complexidade do Heapsort
      • Conclusão
    • Comparação entre os métodos de ordenação
  • Anexo I – Alguns códigos-fonte da apostila
    • Código completo de uma lista estática desordenada
    • Código completo de uma lista estática ordenada
    • Código completo de uma pilha estática usando vetor
    • Código completo de uma pilha dinâmica usando struct
    • Código completo de uma fila estática usando vetor
    • Código completo de uma fila dinâmica usando struct
    • Código que implementa os métodos de ordenação e pesquisa
  • Anexo II - Programas e links úteis.............................................................................
    • Download do Dev C++
    • Instalando o DotNet
    • Instalando o Visual Studio e SDK
    • Emulador de linha de comando
  • Para uso do C# no VSCode Estrutura de Dados
  • Criando um projeto console no DotNet..................................................................
  • Links para execução online de programas em C++
  • Outros links interessantes:

Estrutura de Dados

Introdução a linguagem de programação C

Objetivos

Conhecer e identificar a estrutura básica de um programa em C. Implementar programas básicos na linguagem C. Implementar programas em C utilizando as estruturas de decisão e as estruturas em laços.

Apresentação

Habitualmente antes de resolvermos exemplos ou exercícios, elaboraremos o algoritmo, que nada mais é que uma sequência de operações cuja execução produz um resultado que é a resposta de um problema proposto. Um programa de computador nada mais é que a codificação de um algoritmo numa linguagem de programação. Linguagens como C, Pascal, BASIC, ALGOL, Clipper, COBOL, etc., são chamadas procedurais, devido ao fato das instruções serem executadas de forma sequencial, enquanto que as linguagens baseadas no conceito de eventos como C++, C##, Java, Visual BASIC, utilizam outra estratégia de programação (Programação Orientada ao Objeto). Em C utilizaremos a metodologia estruturada.

Introdução

A linguagem C foi desenvolvida inicialmente por Dennis M. Ritchie e Ken Tompson no laboratório Bell no ano de 1972. Baseada na linguagem B criada por Tompson, esta linguagem evoluiu da linguagem BCPL, dando origem as duas linguagens anteriores. C foi inicialmente projetada para ser utilizada no sistema operacional Unix. Podemos definir a linguagem C como sendo uma linguagem de programação robusta e multiplataforma, projetada para aplicações modulares de rápido acesso.

Veremos aqui a estrutura ANSI C (ANSI É a sigla para American National Standards Institute e designa uma organização americana que tem a função de estabelecer quais normas desenvolvidas devem virar padrão.), versão padrão definida pelo comitê americano ANSI e suportada praticamente por todos os compiladores C. Podendo ser

Estrutura de Dados

considerada como uma linguagem de médio nível, pois possui instruções que a tornam ora uma linguagem de alto nível e estruturada como o Pascal, se assim se fizer necessário, ora uma linguagem de baixo nível, pois possui instruções tão próximas da máquina, que só o Assembler possui. De fato, com a linguagem C podemos construir programas organizados e concisos (como o Pascal), ocupando pouco espaço de memória com alta velocidade de execução (como o Assembler). Infelizmente, dada toda a flexibilidade da linguagem, também poderemos escrever programas desorganizados e difíceis de serem compreendidos (como usualmente são os programas em BASIC). Devemos lembrar que a linguagem C foi desenvolvida a partir da necessidade de se escrever programas que utilizassem recursos próprios da linguagem de máquina de uma forma mais simples e portável que o Assembler.

Linguagem C é case sensitive, ou seja, diferencia letras maiúsculas de minúsculas.

As inúmeras razões para a escolha da linguagem C como a predileta para os desenvolvedores “profissionais”. As características da Linguagem C servirão para mostrar o porquê de sua ampla utilização.

Características da linguagem C

 Portabilidade entre máquinas e sistemas operacionais.  Dados compostos em forma estruturada.  Programas Estruturados.  Total interação com o Sistema Operacional.  Código compacto e rápido, quando comparado ao código de outras linguagens de complexidade análoga.

Estrutura básica de um programa em C

Um programa em C consiste em uma ou várias “funções”. Vamos começar pelo menor programa possível em C:

main ( ) { }

Estrutura de Dados

Fundamentos em C

Desta forma a orientação que adotaremos neste início do curso se deterá mais na compreensão geral do programa, do que a análise detalhada de cada comando ou função utilizada. De fato, apresentaremos alguns comandos fundamentais para a escrita de programas básicos e apenas nos utilizaremos sua sintaxe mais elementar (posteriormente estudaremos cada um deles mais detidamente), para construirmos os primeiros programas do curso.

Exemplo 1: Programa mostra a idade. /* Exemplo Idade */ #include <stdio.h> int main(int argc, char *argv[]) { int idade; idade = 40; printf("Sua idade e' %d anos. \n", idade); }

Diretiva #include

Toda a diretiva, em C, começa com o símbolo # no início da linha. A diretiva #include inclui o conteúdo de outro arquivo dentro do programa atual, ou seja, a linha que contêm a diretiva é substituída pelo conteúdo do arquivo especificado.

Sintaxe: #include ou #include “nome do arquivo”

O primeiro caso é o mais utilizado. Ele serve para incluir alguns arquivos que contêm declaração das funções da biblioteca padrão, entre outras coisas. Estes arquivos,

Estrutura de Dados

normalmente, possuem a extensão .h e se encontram em algum diretório pré-definido pelo compilador (/usr/include no Linux; c:\dev- -c++\include no Windows com o Dev-C++). Sempre que o programa utilizar alguma função da biblioteca-padrão deve ser incluído o arquivo correspondente. A tabela a seguir apresenta alguns dos principais. h da linguagem C:

Arquivo Descrição stdio.h Funções de entrada e saída (I/O) string.h Funções de tratamento de strings math.h Funções matemáticas ctype.h Funções de teste e tratamento de caracteres stdlib.h Funções de uso genérico

A segunda forma, onde o nome do arquivo aparece entre aspas duplas, serve normalmente para incluir algum arquivo que tenha sido criado pelo próprio programador ou por terceiros e que se encontre no diretório atual, ou seja, no mesmo diretório do programa que está sendo compilado.

Comandos básicos

As instruções de entrada e saída são comandos quase que obrigatórios em qualquer programa na linguagem C. Na maioria dos programas em C, o usuário necessita entrar com algumas informações e também saber o resultado de algum processamento. Descreve-se a seguir os comandos básicos da linguagem C.

Instruções de entrada e saída

O objetivo de escrevermos programas é em última análise, a obtenção de resultados (Saídas) depois da elaboração de cálculos ou pesquisas (Processamento) através do fornecimento de um conjunto de dados ou informações conhecidas (Entradas).

Estrutura de Dados

A função scanf ( )

Uma das mais importantes e poderosas instruções, servirá basicamente para promover leitura de dados (tipados) via teclado. Sua forma geral será: scanf(“string de controle”, lista de argumentos); Posteriormente ao vermos sua sintaxe completa, abordaremos os recursos mais poderosos da , no momento bastará saber que:

%c - leitura de caractere; %d - leitura de números inteiros; %f - leitura de números reais; %s - leitura de caracteres.

A lista de argumentos deve conter exatamente o mesmo número de argumentos quantos forem os códigos de formatação na . Se este não for o caso, diversos problemas poderão ocorrer - incluindo até mesmo a queda do sistema - quando estivermos utilizando programas compilados escritos em C. Cada variável a ser lida, deverá ser precedida pelo caractere &, por razões que no momento não convém explicarmos, mas que serão esclarecidas no decorrer do curso. Para sequência de caracteres (%s), o caractere & não deverá ser usado.

Exemplo: Programa para ler e mostrar uma idade.

/* Exemplo Lê e Mostra Idade / #include <stdio.h> #include <conio.h> main ( ) { int idade; char nome[30]; printf("Digite sua Idade: "); scanf("%d",&idade); printf("Seu Nome: "); scanf("%s",nome); / Strings não utilizar '&' na leitura */ printf("%s sua idade e' %d anos. \n", nome, idade); }

Estrutura de Dados

Funções malloc e free

As funções malloc() e free() permitem que utilizemos a área de memória livre para criar nossas variáveis. As variáveis serão criadas em tempo de execução.

A função malloc() aloca memória e tem esse protótipo: ponteiro = malloc(numero_de_bytes);

  • O numero_de_bytes é a quantidade de memória que deseja alocar;
  • A função malloc() retorna um ponteiro para a primeira área livre;
  • A função malloc faz parte a biblioteca stdlib.h

int *p; p = malloc(10000);

A função free() desaloca memória e tem esse protótipo:

free(ponteiro);

Tipos de dados

No momento dispomos de conhecimento para elaboração de programas básicos para construção de pequenos programas, pois conhecemos instruções de entrada de dados (scanf) e de saída (printf). Veremos a seguir Tipos de Dados da linguagem C, variáveis, operadores, e demais instruções básicas. Devemos procurar compreender a utilidade das declarações que serão exibidas a seguir, relacionando estes recursos com os exemplos e exercícios vistos anteriormente. Semelhante ao BASIC, Pascal e COBOL, a linguagem C necessita que todas as variáveis tenham seus tipos definidos. C aceita tipos básicos (caractere, inteiro, ponto flutuante, dupla precisão e sem valor) e modificadores (sinal, sem sinal, longo e curto) que podem alterar os tipos básicos.

Estrutura de Dados

Todas as variáveis devem ser declaradas desta forma: "tipo nome_de_variaveis;"

Exemplos:

int i,j,l; short int si; double balanco, consolidacao; char nome[30];

Basicamente, as variáveis podem ser declaradas fora das funções (globais) que valem para todas as funções do programa. Podem ser declaradas dentro de uma função (locais) sendo desconhecida no restante do programa. Além disso podem ser usadas para passagem de valores entre funções (parâmetros).

Inicializando variáveis

Em C podemos criar uma variável e logo em seguida utilizarmos o operador de atribuição para inicializarmos o valor de uma variável. Este processo denomina-se inicialização de variáveis. Vejamos abaixo como fazemos tal procedimento.

int i=0; double x=10.5;

// Exemplo: Criando três variáveis e inicializando-as em tempo de criação. int main ( ) { int evento = 5; char corrida = 'A'; float tempo = 27.25; printf ("O melhor tempo da eliminatória %c" ,corrida); printf (" \n do evento %d foi %f", evento, tempo); }

Estrutura de Dados

Nomes de variáveis

A escolha de nomes de variáveis em C pode conter quantos caracteres quiser, sendo o primeiro caractere obrigatoriamente uma letra ou o caractere sublinhado. Outra característica marcante em C, é que os nomes de variáveis podem ser criadas com nomes iguais, desde que contenham letras maiúsculas ou minúsculas, para diferenciá-las. É isso mesmo, C faz distinção entre letras maiúsculas e minúsculas.

Exemplo demonstrando case sensitive

#include <stdio.h> int main() { int valor = 1; double Valor = 2.5; printf ("Valor inteiro %d" , valor); printf ("\nValor ponto flutuante %f", Valor); } Observem que as variáveis possuem os mesmos nomes, só que a primeiro é denominada valor escrita em minúsculo e a segunda denominada Valor, sendo o primeiro caractere escrito em maiúscula.

Operadores

C é uma das linguagens com maior número de operadores, devido possuir todos os operadores comuns de uma linguagem de alto nível, porém também possuindo os operadores mais usuais a linguagens de baixo nível. Para fins didáticos, dividiremos os operadores em aritméticos, lógicos e de bits. No momento abordaremos apenas as duas primeiras classes.

Operadores aritméticos

Os operadores aritméticos são utilizados para efetuar as operações matemáticas básicas como adição, multiplicação, divisão, resto de divisão inteira, subtração o menos unário,