Beruflich Dokumente
Kultur Dokumente
ESTRUTURA DE DADOS.
UNIVERSIDADE ANHANGUERA
UNIVERSIDADE ANHANGUERA
CENTRO DE EDUCAO A DISTNCIA FACULDADE DE NEGOCIOS
DE BH (FNBH)
CURSO DE ANLISE E DESENVOLVIMENTO DE SISTEMAS
ESTRUTURA DE DADOS.
UNIVERSIDADE ANHANGUERA
UNIVERSIDADE ANHANGUERA
Para alocar um tipo-de-dado que ocupa vrios bytes, preciso recorrer ao operador sizeof,
que diz quantos bytes o tipo especificado tem:
typedef struct {
int dia, mes, ano;
} data;
data *d;
d = malloc( sizeof (data));
d->dia = 31; d->mes = 12; d->ano = 2008;
[As aparncias enganam: sizeof no uma funo.]
Overhead. Cada invocao de malloc aloca um bloco de bytes consecutivos maior que o
solicitado: os bytes adicionais so usados para guardar informaes administrativas sobre o
bloco de bytes (essas informaes permitem que o bloco seja corretamente desalocado, mais
tarde, pela funo free). O nmero de bytes adicionais pode ser grande, mas no depende do
nmero de bytes solicitado no argumento de malloc. No recomendvel, portanto, invocar
malloc repetidas vezes com argumento muito pequeno. prefervel alocar um grande bloco
de bytes e retirar pequenas pores desse bloco na medida do necessrio.
int dia, mes, ano;
} data;
int main( void) {
printf( "sizeof (data) = %d\n", sizeof (data));
printf( "sizeof (data *) = %d\n", sizeof (data *));
return 0;
}
A memria finita:
Se a memria do computador j estiver toda ocupada, malloc no consegue alocar mais
espao e devolve NULL. Convm verificar essa possibilidade antes de prosseguir:
UNIVERSIDADE ANHANGUERA
UNIVERSIDADE ANHANGUERA
char modelo[8];
char fabricante[30];
int passageiros;
float comprimento;
float altura;
float velocidade;
float altitude;
char motor [10];
struct aviao *prox;
};
struct aviao *aux, *inicio = NULL, *final = NULL;
struct aviao* cria(void)
{
return NULL;
}
struct aviao* insere_final()
{
int x;
printf("Entre com um numero inteiro: ");
scanf("%i",&x);
aux = (struct aviao*) malloc (sizeof(struct aviao));
aux->passageiros = x;
aux -> prox = (struct aviao *) NULL;
if(inicio == NULL)
inicio = final = aux;
else
{
final -> prox = aux;
final = aux;
}
return inicio;
}
int lista_vazia(struct aviao *lista)
{
if(lista == NULL)
return 1;
else
return 0;
}
void visualiza_lista_final(struct aviao *lista)
UNIVERSIDADE ANHANGUERA
{
if(!lista_vazia(lista))
{
aux = lista;
while(aux != (struct aviao *) NULL)
{
printf("Valor da Lista: %i\n", aux->passageiros);
aux = aux -> prox;
}}
else
printf("\nTentou imprimir uma lista vazia!");
getch();
}
struct aviao* busca(struct aviao* lista, int busca)
{
bool achou = 0;
if(!lista_vazia(lista))
{
for(aux=lista;aux!=NULL;aux=aux->prox)
{
if(aux->passageiros == busca)
printf("Valor encontrado.\n");
achou = 1;
}
}
if(!achou)
printf("Valor no encontrado.\n");
}
else
{
printf("\nTentou buscar de uma lista vazia");
}
getch();
return NULL;
}
struct aviao* excluir(struct aviao *lista, int valor)
{
struct aviao *ant = NULL;
aux = lista;
if(!lista_vazia(lista))
{
while(aux!= NULL && aux->passageiros != valor)
{
UNIVERSIDADE ANHANGUERA
ant = aux;
aux = aux->prox;
}
if(aux == NULL)
{
printf("\nNao foi possivel a exclusao. Elemento no encontrado!");
getch();
return lista;
}
if(ant == NULL)
lista = aux->prox;
else
ant->prox = aux->prox;
free(aux);
printf("Elemento removido com sucesso!\n");
getch();
return lista;
}
else
{
printf("\nTentou remover de uma lista vazia");
getch();
return lista;
}
}
Fazer um programa em Linguagem C que criem uma estrutura de dados voo(struct voo)para a
empresa VOEBEM, que servir para implementar funes para controle da lista dos voos:
#include
#include
#include
void cadastrarVoo();
void consultaVoo();
void removeVoo();
struct Voo
{
int numerovoo,
datavoo,
horariovoo;
char aeroportosaida[30],
aeroportochegada[30],
rota[20];
int tempovoo,
passageiros;
}
UNIVERSIDADE ANHANGUERA
UNIVERSIDADE ANHANGUERA
scanf("%i",&voo.numerovoo);
printf("\nDigite a data do voo\n");
scanf("%i",&voo.datavoo);
printf("\nDigite o horario de saida do voo\n");
scanf("%i",&voo.horariovoo);
printf("\nDigite o aeroporto de saida do voo\n");
scanf("%s",&voo.aeroportosaida);
printf("\nDigite o aeroporto de chegada do voo\n");
scanf("%s",&voo.aeroportochegada);
printf("\nDigite a rota do voo\n");
scanf("%s",&voo.rota);
printf("\nDigite o tempo estimado do voo\n");
scanf("%i",&voo.tempovoo);
printf("\nDigite o numero de passageiros do voo\n");
scanf("%i",&voo.passageiros);
printf("\n\n Voo Cadastrado com sucesso.");
return;
}
void consultaVoo()
{
printf("\n\n Numero do Voo.: %i", voo.numerovoo);
printf("\n\n Data de Saida do Voo.: %i", voo.datavoo);
printf("\n\n Horario de Saida do Voo.: %i", voo.horariovoo);
printf("\n\n Aeroporto de Saida.: %s", voo.aeroportosaida);
printf("\n\n Aeroporto de Chegada.: %s", voo.aeroportochegada);
printf("\n\n Rota do Voo.: %s", voo.rota);
printf("\n\n Tempo estimado do Voo.: %i", voo.tempovoo);
printf("\n\n Numero de passageiros a bordo.: %i", voo.passageiros);
return;
}
UNIVERSIDADE ANHANGUERA
void removeVoo()
{
int numvoo;
char exclui;
NUMEROVOO:printf("\n Digite numero do Voo\n");
scanf("%i",&numvoo);
if(numvoo == voo.numerovoo)
{
printf("\n\n Deseja realmente excluir o voo? [y/n] ");
scanf("%s",&exclui);if((exclui != 'y') && (exclui != 'n'))
{
printf("\n Digitacao Incorreta");
goto NUMEROVOO;
}
else
{
if(exclui == 'y')
{
voo.numerovoo = 0;
voo.datavoo = 0;
voo.horariovoo = 0;
//voo.aeroportosaida = '';
//voo.aeroportochegada = '';
//voo.rota = '';
voo.tempovoo = 0;
voo.passageiros = 0;
printf("\n\n Voo %i Excluido com sucesso.", numvoo);
return;
}
else
{
return;
UNIVERSIDADE ANHANGUERA
}
}
}
else
{
printf("\n Numero do voo nao existe\n");
return;
}
return;
Passo 3 (Equipe)
UNIVERSIDADE ANHANGUERA
10
};
struct Passagem pass;
int main()
{
int opcao;
REFAZ: printf("\n\n===================================");
printf("\n\n 1 - Cadastrar Passagem");
printf("\n 2 - Consultar Passagem");
printf("\n 0 - Sair");
printf("\n\n===================================\n");
scanf(" %i",&opcao);
switch(opcao)
{
case 0:
{
return -1;
break;
}
case 1:
{
cadastrarPassagem();
goto REFAZ;
break;
}
case 2:
{
consultaPassagem();
goto REFAZ;
break;
}
default:
{printf("\n Opcao Invalida\n\n Digite Novamente\n\n");
goto REFAZ;
break;
UNIVERSIDADE ANHANGUERA
11
}
}
getch();
return;
}
void cadastrarPassagem()
{
printf("\nDigite o numero da passagem\n");
scanf("%i",&pass.numeropassagem);
printf("\nDigite o numero do voo\n");
scanf("%i",&pass.numerovoo);
printf("\nDigite a data do embarque\n");
scanf("%i",&pass.dataembarque);
printf("\nDigite o horario de embarque\n");
scanf("%i",&pass.horarioembarque);
printf("\nDigite o portao de embarque)
Fazer um programa em Linguagem C que implemente a estrutura taxiamento
(structtaxiamento) para controlar a Liberao para Taxiamento das Aeronaves para
decolagem na pista de voos. O taxiamento e as decolagens devem obedecer uma fila para no
haver choques entre as aeronaves a decolar e que esto pousando.
//Biblioteca biblioteca.h
#include
#include
UNIVERSIDADE ANHANGUERA
12
char horarioSaida;
} taxiamento;
typedef struct {
ftcelula *frente;
ftcelula *tras;
}tfila;
//Classe main.c
#include "biblioteca.h"
int menuGeral(){ //abre funo menu geral
int op;
printf("\t\t===Escolha uma opca===\n\n");
printf("\t\t1 - Controle taxiamento\n");printf("\t\t2 - Controle bagegem\n");
printf("\t\t0 - sair\n\n");
printf("\t\tEscolha uma opcao: ");
scanf("%d", &op);
printf("\n\n");
return op;
} // fecha funcao menu geral
UNIVERSIDADE ANHANGUERA
13
UNIVERSIDADE ANHANGUERA
14
autorizaTaxiamento (&f, t); //retira o voo da lista e imprime na tela para o cliente ver a
//sequencia de decolagens
#include
#include
// estrutura bagagem
struct bagagem
{
int codigoBag;
int numeroPassagem;
int numeroVoo;
int dataEmbarque;
int horaEmbarque;
int portaoEmbarque;
struct bagagem* prox; // ponteiro para o prximo
};
int main (int argc, char *argv[])
{
struct bagagem* inicio = NULL,*fim, *novo,*aux,*imprime; // ponteiro para a struct voo
int opcao = 0;
// enquanto for de 3
while(opcao != 3)
{
UNIVERSIDADE ANHANGUERA
15
printf("\n");
printf("[1] Cadastrar Bagagem \n");
printf("[2] Recuperar Bagagem \n");
printf("[3] Sair \n");
scanf("%d", &opcao);
if(opcao == 1)
{
// aloca memria
novo = (struct bagagem*)malloc(sizeof(struct bagagem));
// atualiza fim do ponteiro
novo->prox = (struct bagagem*)NULL;
printf("\n");
printf("Digite
codigo da bagagem: ");
scanf("%d", &novo->codigoBag);
printf("Digite o numero da passagem: ");
scanf("%d", &novo->numeroPassagem);
printf("Digite o numero do Voo: ");
scanf("%d", &novo->numeroVoo);
printf("Data do embarque: ");
scanf("%d", &novo->dataEmbarque);
printf("Horario de Embarque: ");
scanf("%d", &novo->horaEmbarque);
printf("Portao de embarque: ");
scanf("%d", &novo->portaoEmbarque);
if(inicio==(struct bagagem*)NULL)
{
inicio = novo;
fim = inicio;
}
UNIVERSIDADE ANHANGUERA
16
else
{
//atribuindo o apontamento do primeiro registro para o ultimo da pilha
novo->prox = inicio;
//apontando o novo registro para o primeiro da pilha
inicio = novo;
}
}
else if(opcao == 2)
{
// proximo_voo->prox = NULL;
// proximo_ponto aponta para o mesmo de ini_ponto, comea do incio
imprime = inicio;
printf("\n");
UNIVERSIDADE ANHANGUERA
17
*/
return 0;
Fazer um programa em Linguagem C que implemente um levantamento de rotas entre uma
Cidade A e uma Cidade B por meio de um Grafo, utilizando Matriz de Adjacncia. Considerar
um total de dez cidades e fazer a ligao entre elas considerando as distncias e tempo voo.
Para percorrer da Cidade A para a Cidade B, considerar como melhor opo a distncia e o
tempo de voo. A Figura 1 apresentada a seguir, representa um mapa de rotas de voos de
cidades brasileiras. Considerar, por exemplo, o deslocamento entre a cidade de Belo
Horizonte Fortaleza. Podem-se considerar as seguintes rotas de voos:
1. Belo Horizonte Fortaleza.
2. Belo Horizonte So Lus Fortaleza.
3. Belo Horizonte Recife Fortaleza.
4. Belo Horizonte Salvador Recife Fortaleza.
a distncia e o tempo de voo.
#include
#include
#include
#include
UNIVERSIDADE ANHANGUERA
18
int matriz[MAXNOS][MAXNOS];
struct no
{
int visitado;
char descricao[30];
};
struct no vetor[MAXNOS];
int quantosNos;
struct pilha
{
int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow
int topo;
};
struct pilha p;
struct fila
{
int vetor[MAXNOS]; //MAXNOS + 1 para evitar de causar overflow
int inicio, fim, quantos;
};
struct fila f;
UNIVERSIDADE ANHANGUERA
19
int pilhaVazia()
{
int vazio = 1;
if (p.topo > -1)
vazio = 0;
return vazio;
}
UNIVERSIDADE ANHANGUERA
20
int filaVazia()
{
int vazio = 1;
if (f.quantos > 0)
vazio = 0;
return vazio;
}
int removeDaFila()
{
int indice = -1;
if (f.quantos == 0)
puts ("Pau Geral de Underflow na Fila");
else
{
indice = f.vetor[f.inicio];
UNIVERSIDADE ANHANGUERA
21
f.quantos--;
if (f.inicio == (MAXNOS-1))
f.inicio = 0;
else
f.inicio++;
}
return (indice);
}
void zerarVariaveis()
{
int i, j;
p.topo = -1;
f.inicio = f.quantos = 0;
f.fim = -1;
quantosNos = -1;
for (i = 0; i < MAXNOS; i++)
{
for (j = 0; j < MAXNOS; j++)
matriz[i][j] = 0;
vetor[i].visitado = 0;
strcpy(vetor[i].descricao, " ");
}
}
int pegaVerticeAdjNaoVisitado(int indice)
{
int coluna, retorna = -1;
for (coluna = 0; coluna
UNIVERSIDADE ANHANGUERA
22
Referncias bibliogrficas:
1 <https://docs.google.com/open?id=0B_uLQd5hdqlWdU9tQi1yS1pTQXUzNEQ1d3Bsbk
ZBUQ>.
<https://docs.google.com/open?id=0B_uLQd5hdqlWUVV6N0FxbzdRZm1KT0d2Y282b
U1Zdw>
<https://docs.google.com/open?id=0B_uLQd5hdqlWQXdYT19jQUJUd2Vob1BYQ3dWZ
Ekydw>
<https://docs.google.com/open?id=0B_uLQd5hdqlWTVFzdzZRYTZSSDJRRm9hLVg1Rj
RxZw>
<https://docs.google.com/open?id=0B_uLQd5hdqlWcnBnQVk0YVpTUXFzUmMyc1N
WaVpvQQ>.
UNIVERSIDADE ANHANGUERA
23