Estrutura De Dados
Trabalho Universitário: Estrutura De Dados. Pesquise 862.000+ trabalhos acadêmicosPor: rodrigoasth • 14/11/2014 • 902 Palavras (4 Páginas) • 291 Visualizações
Estrutura de Dados
Vetores em C
Essas estruturas são tipos de dados compostos ou estruturados, ou seja, elas são formadas de estruturas de dados mais simples que existem na linguagem. A forma mais simples é o vetor unidimensional, que pode ser definido abstratamente como um conjunto finito e ordenado de elementos homogêneos. Por homogêneo entendemos que todos os elementos no vetor precisam ser do mesmo tipo.
As duas operações básicas que acessam um vetor são a extração e o armazenamento. A extração é uma operação que permite obter o valor por meio de um índice em um determinado vetor. O armazenamento é uma operação que permite guardar um valor em uma determinada posição especificada pelo índice.
O menor índice de um vetor é chamado de limite mínimo e é sempre 0. O maior é o limite máximo. Se lower é o limite mínimo de um vetor e upper o limite máximo, o tamanho do vetor é dado por upper – lower + 1. Por exemplo, no vetor a[100], o limite mínimo é 0, o limite máximo é 99 e o tamanho é 100.
Uma técnica muito útil é declarar uma constante para guardar o tamanho do vetor, afim de em casos de alterações no tamanho, fazemos isto a partir de um único local. Por exemplo:
#define TAMANHO 100;
int a[TAMANHO];
for(i=0; i < TAMANHO; i++);
Implementação de estruturas em C
Uma estrutura é um grupo de itens no qual cada item é identificado por um identificador próprio, sendo cada um deles conhecido como um membro da estrutura. (Em várias outras linguagens de programação, uma estrutura é chamada de “registro” e um membro é chamado de “campo”).
Uma primeira alternativa de declaração de estrutura:
struct{
char first[10];
char midinit;
char last[20];
}sname, ename;
Como alternativa, podemos atribui um nome à estrutura e, em seguida, declarar as variáveis por meio desse nome. Por exemplo:
struct nometipo {
char first[10];
char midinit;
char last[20];
};
struct nometipo sname, ename;
Para obter o máximo de clareza no programa, recomenda-se que seja declarado um nome para cada estrutura e que em seguida as variáveis sejam declaradas usando-se o nome.
typedef struct {
char first[10];
char midinit;
char last[20];
}NOMETIPO;
NOMETIPO sname, ename;
Os nomes de estruturas são convencionalmente escritos com letras minúsculas, mas os especificadores do typedef são escritos com letras maiúsculas ao apresentar programas em C.
Assim que uma variável é declarada podemos acessar as estruturas:
printf(“%s”, sname.first);
ename.midinit = ‘m’;
Um membro de uma estrutura pode ser declarado como outra estrutura.
struct addrtype {
char straddr[40];
char city[10];
char state[2];
char zip[5];
} ;
podemos declarar um novo nome de estrutura, nmadtype, com:
struct nmadtype {
struct nametype name;
struct addrtype address;
} ;
Se declararmos duas variáveis:
struct nmadtype nmad1, nmad2;
os seguintes comandos serão válidos:
nmad1.name.midinit = nmad2.name.midinit;
nmad2.address.city[4] = nmad1.name.first[1];
for ( i = l ; i < 10; i++)
nmad1.name.first[i] = nmade2.name.first[i];
Observação:
Duas estruturas não pode ser submetidas a uma comparação de igualdade numa única operação em C.
if(e.nmaddr.name == s.nmad.name) e sim if(e.nmaddr.name.midinit == s.nmad.name.midinit)
Alocação de memória
Ao se declarar uma variável qualquer, o compilador deixa reservado um espaço suficiente na memória para armazená-la
int a; // 4 bytes
float x; // 4 bytes
double y; // 8 bytes
char c; // 1 byte
char *c; // 4 bytes
Ao fazer a alocação estática, apenas o espaço necessário na memória é reservado.
Quando se declara um vetor, o valor entre colchetes indica quantas vezes o espaço de memória necessário para o tipo básico será alocado.
char v[100]; // 100 * sizeof(char) = 100 bytes
int v[100]; // 100 * sizeof(int) = 400 bytes
float vf[200]; // 200 * sizeof(float) = 800 bytes
double z[1000]; // 1000 * sizeof(double) = 8000 bytes
Pode-se utilizar: sizeof(v)
Pode ser utilizado para descobrir o tamanho de uma string?
A referência a uma posição de um vetor indica o cálculo de uma posição de memória a partir do início do vetor
float x[1000];
//
...