Buscar

6 - Estruturas de Dados Homogêneas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Algoritmos
Prof. Hilton Cardoso Marins Junior
hiltonmarins@gmail.com
ESTRUTURAS DE DADOS HOMOGÊNEA
Características das Estruturas de Dados Homogêneas
É uma coleção de variáveis do mesmo tipo (homogênea) que é 
referenciada por um nome comum.
Ocupa posições contíguas da memória. O endereço mais baixo
corresponde ao primeiro elemento e mais alto ao último.
Possui número de elementos fixo, ou seja, a variável desse tipo é 
declarada com uma quantidade de elementos que não pode ser
alterada durante a execução do programa.
Estrutura de Dados Homogênea
Uma estrutura de dados homogênea é também conhecida como 
vetor, matriz, variável indexada ou array
Um elemento específico do vetor é acessado por meio de um 
índice (ou subscrito). O indíce é um número inteiro que 
corresponde a posição de um elemento dentro do vetor.
0 1 2 3 4 5 6 7 8 9
7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5
posição 9
1a. posição 10a. posição
2a. posição
posição 0
posição 1
Estruturas de Dados Homogênea
A figura acima poderia representar as notas de 10 alunos. 
Geralmente associamos as posições a alguma entidade do 
mundo real. Neste caso associamos cada posição a um aluno: 
posição 0 armazena a nota do 1º aluno, posição 1 armazena nota 
do aluno 2º aluno e assim por diante.
Observação: Em C, todo vetor tem 0 como o índice do seu 
primeiro elemento.
0 1 2 3 4 5 6 7 8 9
7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5
Declaração de um Vetor Unidimensional
Sintaxe : tipo nome-variável[tamanho]
Exemplo: double notas[10];
No exemplo acima é declarado um vetor de nome notas com 10 elementos
do tipo double.
Se os elementos do vetor ocupam posições contiguas da memória, porque
os endereços não são consecutivos? A nota 8,0 da posição 1, por exemplo, 
não deveria estar no endereço 1001, porque ela está no endereço 1008?
A linguagem C não realiza verificação de limites em vetores. Se durante uma
operação o limite for transposto, acarretará resultados imprevisíveis .
0 1 2 3 4 5 6 7 8 9
7,5 8,0 3,5 10,0 6,0 8,0 9,0 6,5 7,5 4,5
1000 1008 1016 1024 1032 1040 1048 1056 1064 1072
Endereços de memória
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0
1
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 1
1
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 2
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 2
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 3
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 3
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 4
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 4
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4 5
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4 5
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4 50 5
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4 50 5
6
num i
Manipulação de Vetor
O trecho de programa abaixo prenche um vetor com os 5 
primeiros múltiplos de 10.
main(){
int num[5];
int i;
for (i = 1; i <= 5; i++){
num[i-1] = i * 10;
}
}
0 10 1
1 20 2
2 30 3
3 40 4
4 50 5
6
num i
Vetor Bidimensional (matriz)
Declaração: tipo nome-variável [linhas][colunas]
Exemplo: float notas [40][4];
Para acessar a nota do 40o. aluno no 3o. bimestre: 
printf(“%f”, notas[39][2]); // será mostrado 10.0
0 1 2 3
0 10,0 9,5 8,5 9,5
1 7,0 8,5 9,5 10,0
2 9,0 6,5 7,5 9,5
.
.
.
39 8,5 5,0 10,0 9,0
Neste exemplo, associamos as 
linhas aos alunos e as coluna
aos bimestres
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
Neste exemplo cada elemento da matriz é calculado somando o 
número da linha ao número da coluna correspondente.
0 1 2
0
1
2
i j
num
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0
1
2
i j
0
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0
1
2
i j
0 0
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0
1
2
i j
0 0
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num0 1 2
0 0
1
2
i j
0 0
1
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1
1
2
i j
0 0
1
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1
1
2
i j
0 0
1
2
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1
2
i j
0 0
1
2
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1
2
i j
0 0
1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2
i j
0 0
1 1
2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2 3
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2 3
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2 3 4
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2 3 4
i j
0 0
1 1
2 2
3
Manipulação de vetor bidimensional
main(){
int num[3][3];
int i, j, x;
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
num[i][j] = i+j;
}
}
}
num
0 1 2
0 0 1 2
1 1 2 3
2 2 3 4
i j
0 0
1 1
2 2
3 3
Configuração final do vetor
Inicialização de Vetores
C permite inicializarmos um vetor no momento da declaração.
int i[10]={1,2,3,4,5,6,7,8,9,10}
Isto siginifica que i[0] terá o valor 1, i[1] o valor 2 e assim sucessivamente.
Vetores de caracteres (strings) devem ser inicializados assim:
char str[18] = “Ifet Juiz de Fora”;
Toda string possui no seu final um caracter nulo que sinaliza o seu fim (‘/0’). Por
isso que dimensionamos o vetor str com tamanho 18 apesar de Ifet Juiz de Fora só
possuir 17 caracteres.
Inicialização de Vetores
int quadrados[10][2] = {1,1,2,4,3,9,4,16,5,25,
6,36,7,49,8,64,9,81,10,100};
Vetor Não Dimensionado
Se, em um comando de inicialização de vetor, seu tamanho não é 
especificado, o compilador C cria um vetor grande o bastante para
conter todos os inicializadores presentes. Isto é chamado de vetor ou
matriz não-dimensionada.
main(){
char str1[18] = “Ifet Juiz de Fora”;
char str2[] = “Ifet Juiz de Fora”;
printf("\nTamanho de str1 (%s) e %d",str1,sizeof(str1));
printf("\nTamanho de str2 (%s) e %d",str2,sizeof(str2));
}
As saídas do programa acima serão:
Tamanho de str1 e 18
Tamanho de str2 e 18
A função sizeof() calcula o 
tamanho em bytes de uma
variável
String
Muitas linguagens de programação fornecem o tipo String para que possamos
armazenar uma cadeia de caracteres. Não é o caso da Linguagem C. 
Em C uma String é definida como um vetor de caracteres sendo seu último
elemento o caracter nulo (\0). Por esta razão, você precisa declarar vetores de 
caracteres como um caractere mais longo que a maior string que elas devem
guardar. 
Você não precisa adicionar o nulo no final das constantes string manualmente. O 
compilador C faz isso por você automaticamente. Por exemplo, para guardar uma
string de 10 caracteres, devemos declarar assim: char str[11].Com isso
reservamos espaço para o nulo no final da string.
Embora C não tenha o tipo de dado string, ela permite constantes de strings. 
Exemplo: “jose da silva”
A Entrada de uma String
Para solicitar a entrada de uma string, utilize a função gets():
char frase[80];
printf("\nDigite uma frase: "); 
gets(frase);
Procure saber sobre algumas funções pré-definidas em C para a 
manipulação de strings, como por exemplo funções para comparação
de strings, cópia, etc.
Vetor de String
Usa-se um vetor bidimensional de caracteres.
O tamanho do índice esquerdo indica o número de strings.
O tamanho do índice direito especifica o comprimento máximo de cada string.
Declaração de um vetor de 30 strings, cada qual com um comprimento máximo de 
79 caracteres: char str[30][80];
Para acessar uma string individual, específicamos apenas o índice esquerdo: a 
instrução gets(str[2]) acessa a terceira string.
Para acessar um caractere de uma string individual da matriz anterior, 
específicamos da seguinte forma:a instrução printf(“%c”,str[2][5])
mostra o sexto caractere da terceira string.
Vetor de String
char cidades[5][20] declara o vetor (matriz) abaixo.
gets(cidades[1]) lê do teclado uma string (barbacena por
exemplo) e armazena na posição 1.
Lendo e Exibindo Texto
int i, j ;
char texto [100][80] ;
//permite a digitação do texto
printf("\nDigite o texto e 1 linha em branco para encerrar\n" );
for (i=0; i<100; i++){
gets(texto[i]);
}
//mostra o texto na tela
for (i=0; i<100; i++){
if (texto[i][0] == '\0'){
break ;
}
printf("%s\n", texto[i]);
}
Qual a quantidade máxima de caracteres que poderão ser digitados?

Outros materiais