Estruturas de Dados
Por: fabiofsl • 27/3/2016 • Trabalho acadêmico • 2.997 Palavras (12 Páginas) • 326 Visualizações
- Estrutura de Dados
- Conceitos
- Alocação de Memória: Qualquer programa precisa de memória para “rodar”. Ao iniciar um programa, o sistema operacional aloca espaço para a execução. Mas se o espaço inicial não for suficiente é preciso alocar memória em tempo de execução.
- Ponteiros em C: Trabalhar com ponteiro pode, a princípio, parecer bem confuso. Mas quando entendemos o conceito para o uso de ponteiro facilita a situação.
Ponteiro é uma variável como qualquer outra e também precisa ter um tipo primitivo para sua declaração (int, float, char). A questão que pode mais nos confundir é sua aplicação. Uma das aplicações é para vetores e matrizes (principalmente de strings) como veremos mais adiante.
Literalmente um ponteiro “aponta” para outra variável do mesmo tipo, ou seja, no ponteiro contém o endereço da variável apontada.
Para ficar menos confuso vamos usar um exemplo prático de uso de ponteiro:
int num;/* Declara uma variável do tipo inteiro.*/
int *pnum;/* Declara um ponteiro do tipo inteiro com o uso do * (asterisco).*/
num = 15;/* Atribui 15 a num.*/
pnum = #/* Atribui o endereço (&) de num a pnum.*/
*pnum = 20;/* Lê-se: conteúdo de pnum recebe.*/
Se mandarmos imprimir a variável num, esta terá o valor 20, pois o ponteiro para num alterou o valor de num.
- Estruturas de dados e C: Estruturas são conjuntos de dados formados a partir de dados já existente na linguagem C. São usadas para definirem uma classe de problemas a serem resolvidos, e também para definirem um tipo abstrato de dado para implementação.
Duas estruturas conhecidas em C são o vetor e a estrutura (struct) que veremos adiante. Através destas estruturas podemos criar estruturas mais complexas para resolver problemas igualmente complexos.
- Vetores em C: Vetor é uma estrutura de dados que pode ser unidimensional que segundo () é “um conjunto finito e ordenado de elementos homogêneos”.
Por finito quer dizer que existe um limite para a quantidade de elementos do vetor; por ordenados quer dizer que há uma sequência para os elementos começando sempre em zero e terminando no total de elementos - 1; por homogêneo quer dizer que os elementos são do mesmo tipo.
- Implementando vetores unidimensionais: A seguir, temos uma declaração em C para um vetor unidimensional, int vet[10], ou seja, declaramos um vetor de 10 elementos do tipo inteiro. Então, são alocadas dez posições consecutivas na memória com espaço para conter todos os elementos inteiros deste vetor.
O vetor nada mais é que um ponteiro que aponta para o índice zero. A notação vet[i] é equivalente à *(vet+i).
- Operações com strings de caracteres: Uma string é um vetor de caracteres. O final de uma string é representado pelo caracter NULL. Para especificar uma constante string os caracteres devem estar entre aspas duplas (ou aspas simples para um único caracter).
Vamos fazer algumas operações usando strings.
Declarando a string globalmente temos:
char string[10];
/* Encontrar o tamanho da string.*/
strlen(string);/* Retorna um inteiro com a quantidade de caracteres contidos em string.*/
/* Concatenação.*/
strcat(string1, string2);/* Coloca a string2 em sequência da string1.*/
- Estruturas em C: Diferentemente do vetor onde todos os elementos são do mesmo tipo, a estrutura (struct) pode conter elementos de tipos distintos. Cada item é conhecido como membro.
Exemplo de uma declaração de estrutura:
struct aluno
{
char nome[20],
endereço[50],
ra[10];
int idade;
};
Note que há dois tipos de membros, int e char, e por isso essa estrutura é chamada de heterogênea.
- Implementando estruturas: Usando o exemplo do tópico anterior, para acessar um membro da struct aluno, devemos declarar uma variável deste tipo e, então fazer o acesso. Por exemplo, para acessar o membro idade devemos fazer assim:
struct aluno nAluno;/* Declara uma variável do tipo struct aluno.*/
nAluno.idade = 15;/* Insere o valor 15 dentro do membro idade.*/
Para leitura e escrita de todos os membros fazemos como acima.
- Alocação Estática de Memória
Quando a alocação de memória é feita no momento da compilação dizemos que é estática, pois seu tamanho não se altera durante a execução do programa.
Exemplo: int vet[10];/* É alocado espaço para dez elementos inteiros.*/
- Implementação da estrutura aviao
Código fonte da estrutura aviao. Arquivo.cpp enviado por e-mail.
#include
#include
#include
#include
#include
/* Criação da estrutura aviao.*/
typedef struct{
char modelo[15],
fabricante[15],
motor[15];
int passageiros,
comprimento,
altura,
velocidade,
altitude;
}aviao;
aviao airplane;/* Variável do tipo aviao.*/
void cadastra(aviao *n_cadastro);/* Cadastra um avião.*/
void exibe(aviao *n_mostra);/* Mostra os dados do avião.*/
int main()
{
setlocale(LC_ALL, "Portuguese");
char op;
system("cls");
puts("CADASTRO DE AERONAVES!\n");
printf("(1)Cadastrar\n(2)Exibir\n(3)Sair\n\nOpção: ");
op = getche();
switch(op){
case '1':
system("cls");
puts("Menu cadastrar!\n");
cadastra(&airplane);
system("cls");
puts("Cadastro efetuado!\n\n");
system("pause");
main();
case '2':
system("cls");
puts("Menu exibir!\n");
exibe(&airplane);
puts("\n");
system("pause");
main();
case '3':
system("cls");
puts("**** Encerrando aplicação! *****");
Sleep(3000);
exit(1);
...