Você está na página 1de 13

Algoritmos e

Estruturas de Dados
Sistemas de Informação
3º período

Aulas 07 e 08 – 29/03/2023
Prof. Anderson L. A. Vilaça

78

Algoritmos e Estruturas de Dados - AED


Assuntos desta Aula

• Revisão de Alocação estática e dinâmica de memória

• Exemplo de programa com uso de alocação dinâmica de memória

• Estrutura de dados heterogêneas – uso do comando struct em C/C++

• Uso do comando typedef para definir novos tipos de dados

• Uso de estrutura com alocação dinâmica de memória

79

1
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• A Tabela apresenta uma breve descrição das diferenças entre a alocação estática e a alocação
dinâmica.

80

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• A Tabela apresenta uma breve descrição das diferenças entre a alocação estática e a alocação
dinâmica.

81

2
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• Nesse tipo de alocação os dados não precisam estar necessariamente organizados
sequencialmente na memória do computador.

• Em geral, os blocos de memória alocados podem estar dispersos na memória do computador


(estruturas encadeadas fazem melhor uso desse tipo de memória).

• Além disso, a quantidade total de memória utilizada pelo programa não precisa ser
previamente conhecida.

• Os blocos de memória podem ser alocados, liberados e realocados para diferentes


propósitos, durante a execução do programa.

• O acesso aos dados agora é feito por ponteiros que apontam para os blocos de memória
alocados, e não mais por variáveis.

• A Figura a seguir mostra um exemplo passo a passo do funcionamento da HEAP.

82

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória.

A função malloc() encontra-se dentro da


biblioteca stdlib.h, devendo ser colocada
a instrução #include <stdlib.h> logo
abaixo de #include <stdio.h>

83

3
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica

A função free() encontra-se dentro da


biblioteca stdlib.h, devendo ser colocada
a instrução #include <stdlib.h> logo
abaixo de #include <stdio.h>

84

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

Tanto as variáveis comuns (Posicao, Elemento, i, N) quanto as


variáveis que são do tipo ponteiro, lembrando que ponteiros
guardam endereços de memória (*Vetor, *pV) são alocadas no
STACK.

85

4
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

Tanto as variáveis comuns


(Posicao, Elemento, i, N)
quanto as variáveis que são do
tipo ponteiro, lembrando que
ponteiros guardam endereços de
memória (*Vetor, *pV) são
alocadas no STACK.

86

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

sizeof() retorna a
quantidade de bytes
que uma variável ou
tipo de dados usa.

A função malloc() encontra-se dentro da biblioteca stdlib.h, devendo ser


colocada a instrução #include <stdlib.h> logo abaixo de #include <stdio.h>

87

5
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.
O STACK ocupa a região de
memória inciada por 0x7FFF...

O HEAP esta usando a


região de memória
iniciada por 0x555B...

88

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

Usamos a variável
pV++ para fazer os
incrementos nos
endereços.

Quando usamos o operador * precedendo a variável do tipo ponteiro, será


buscado o valor que está armazenado no endereço de memória contido em pV.

89

6
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

Valores digitados pelo


teclado e impressos em
sequencia conforme a
formatação

90

Algoritmos e Estruturas de Dados - AED


Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

91

7
Algoritmos e Estruturas de Dados - AED
Alocação de memória: Estática x Dinâmica
• Pegando o programa anterior (determinar o maior e menor elemento de um vetor)
e tornando ele mais flexível ainda, com alocação dinâmica de memória. Nesta
versão observaremos os endereços reservados no STACK (pilha) e no HEAP.

A função free() encontra-se dentro da


biblioteca stdlib.h, devendo ser colocada
a instrução #include <stdlib.h> logo
abaixo de #include <stdio.h>

92

Algoritmos e Estruturas de Dados - AED


Estrutura de dados heterogêneas – uso do comando struct em C/C++
• Até agora, trabalhamos as estruturas de dados homogêneas (vetores e matrizes).

• Iremos agora, começar a estudar as estruturas heterogêneas e como podemos programa-las


em C/C++.

• Dessa forma iremos entender a importância destas estruturas na implementação de diversos


aplicativos, principalmente os que utilização estruturas de dados.

• Como já falado anteriormente, a maioria dos problemas modelados necessitam de uma


representação dos dados composta por diferentes tipos simultaneamente, tais como,
string, inteiros, datas, etc.

• Esta variação de tipos de dados é permitida na composição de uma estrutura de dados


heterogênea.

• As estruturas de dados, ou como são chamadas também de registros, são


definidas através de struct.
• Em C/C++, utilizando struct é possível definir um novo tipo de dado
composto por várias variáveis, denominadas membros da estrutura.

93

8
Algoritmos e Estruturas de Dados - AED
Estrutura de dados heterogêneas – uso do comando struct em C/C++
• O exemplo a seguir, ilustra a utilização de struct.

struct DADOS_ALUNO
{
int CodAluno;
char Nome[100];
int Turma;
};

• Basicamente todos os tipos de variáveis em C++ podem ser utilizadas como membros de uma
estrutura. Os membros mais comuns são: int, char, float etc.

• Inclusive, uma outra estrutura pode ser membro de um segunda estrutura.

94

Algoritmos e Estruturas de Dados - AED


Estrutura de dados heterogêneas – uso do comando struct em C/C++
• O exemplo a seguir, ilustra a utilização de struct.

struct DADOS_ALUNO
{
int CodAluno;
char Nome[100];
int Turma;
};

• Basicamente todos os tipos de variáveis em C++ podem ser utilizadas como membros de uma
estrutura. Os membros mais comuns são: int, char, float etc.

• Inclusive, uma outra estrutura pode ser membro de um segunda estrutura.

95

9
Algoritmos e Estruturas de Dados - AED
Estrutura de dados heterogêneas – uso do comando struct em C/C++
• No exemplo a seguir, escrito apenas para o C++, a estrutura heterogênea foi declarada
localmente dentro da função main().

• Isto implica que a estrutura somente poderá ser utilizada dentro da função main().

#include <iostream>
using namespace std;

void main()
{
struct DADOS_ALUNO
{
int CodAluno;
char Nome[100];
int Turma;
};

struct DADOS_ALUNO AlunoA;

96

Algoritmos e Estruturas de Dados - AED


Estrutura de dados heterogêneas – uso do comando struct em C/C++
• Continuação do programa.....

AlunoA.CodAluno = 10;
strcpy(AlunoA.Nome, "Gabriela");
AlunoA.Turma = 250;

cout << "Código do Aluno: " << AlunoA.CodAluno << endl;


cout << "Nome: " << AlunoA.Nome << endl;
cout << "Turma: " << AlunoA.Turma << endl;

system("pause > null");


}

97

10
Algoritmos e Estruturas de Dados - AED
Uso do comando typedef para definir novos tipos de dados
• O comando typedef permite que na linguagem C/C++ sejam definidos novos tipos de dados
pelo usuário além dos tipos básicos (char, int, float, etc...) já existentes. A sua sintaxe é:

• typedef TIPO nome_do_tipo;

typedef struct Dados_Aluno


{
int CodAluno;
char Nome[100];
int Turma;
} Tipo_Aluno;

98

Algoritmos e Estruturas de Dados - AED


Uso do comando typedef para definir novos tipos de dados

99

11
Algoritmos e Estruturas de Dados - AED
Incrementando um pouco mais o nosso programa....

100

Algoritmos e Estruturas de Dados - AED


Incrementando um pouco mais o nosso programa....

101

12
Algoritmos e Estruturas de Dados - AED
Incrementando um pouco mais o nosso programa....

102

13

Você também pode gostar