Escolar Documentos
Profissional Documentos
Cultura Documentos
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
UNIVERSIDADE ANHANGUERA
}
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:
ptr = malloc( sizeof (data));
if (ptr == NULL) {
printf( "Socorro! malloc devolveu NULL!\n");
exit( EXIT_FAILURE);
}
A codificao frequente e repetida desse teste cansativa para o programador e
desvia a ateno do leitor. Por isso, vamos usar a seguinte verso alternativa de
malloc:
void *mallocc( size_t nbytes)
{
void *ptr;
ptr = malloc( nbytes);
if (ptr == NULL) {
printf( "Socorro! malloc devolveu NULL!\n");
exit( EXIT_FAILURE);
}
return ptr;
}
O parmetro de mallocc do tipo size_t. Em muitos computadores, size_t
equivalente a unsigned int.
UNIVERSIDADE ANHANGUERA
UNIVERSIDADE ANHANGUERA
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)
{
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");
UNIVERSIDADE ANHANGUERA
}
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)
{
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
UNIVERSIDADE ANHANGUERA
#include
#include
void cadastrarVoo();
void consultaVoo();
void removeVoo();
struct Voo
{
int numerovoo,
datavoo,
horariovoo;
char aeroportosaida[30],
aeroportochegada[30],
rota[20];
int tempovoo,
passageiros;
}
struct Voo voo;
int main()
{
int opcao;
REFAZ: printf("\n\n===================================");
printf("\n\n 1 - Cadastrar Voo");
printf("\n 2 - Consultar Voo");
printf("\n 3 - Excluir Voo");
printf("\n 0 - Sair");
printf("\n\n===================================\n");
scanf(" %i",&opcao);
switch(opcao)
{
case 0:
{
return -1;
break;
}
case 1:
{
cadastrarVoo();
goto REFAZ;
break;
}
case 2:
{
consultaVoo();
goto REFAZ;
UNIVERSIDADE ANHANGUERA
break;
}
case 3:
{
removeVoo();goto REFAZ;
break;
}
default:
{
printf("\n Opcao Invalida\n\n Digite Novamente\n\n");
goto REFAZ;
break;
}
}
getch();
return;
}
void cadastrarVoo()
{
printf("\nDigite o numero do voo\n");
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.");
UNIVERSIDADE ANHANGUERA
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;
}
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')
UNIVERSIDADE ANHANGUERA
{
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;
}
}
}
else
{
printf("\n Numero do voo nao existe\n");
return;
}
return;
Passo 3 (Equipe)
UNIVERSIDADE ANHANGUERA
10
nova passagem;
Implementar a funo consultaPassagem() que deve permitir obter informaes
sobre a passagem com base na digitao do nmero da passagem.
#include
#include
#include
void cadastrarPassagem();
void consultaPassagem();
truct Passagem
{
int numeropassagem,
numerovoo,
dataembarque,
horarioembarque;
char portaoembarque[30];
};
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;
UNIVERSIDADE ANHANGUERA
11
}
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;
}
}
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);
UNIVERSIDADE ANHANGUERA
12
typedef struct {
ftcelula *frente;
ftcelula *tras;
}tfila;
UNIVERSIDADE ANHANGUERA
13
//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
int main (){ //abre funao meain
//variaveis gerais
int op, opV, opB;
//variaveis para recebeminto dos dados de voo
tfila f;
taxiamento t;
inicializaFila(&f); //inicializa a fila
op = menuGeral(); //recebe o parametro de menuGeral para iniciar o case.
switch (op){ //abre switch
case 1:
//recebendo dados de voo
//receber opcao de menu para cadastrar voo
UNIVERSIDADE ANHANGUERA
14
printf("\t\t===Taxiamento Areo===\n\n");
printf("\t\t1 - Cadastrar Decolagem \n");
printf("\t\t2 - Ver sequncia de decolagem\n");
printf("\t\t0 - sair\n\n");
printf("\t\tEscolha uma opcao: ");
scanf("%d", &opV);
printf("\n\n");
if (opV == 1){ // se a opcao for 1, ele ira recolher os dados do voo;
printf("informe o numero do voo");
scanf("%d", &t.numeroVoo);
printf("informe o modelo da aeronave");
scanf("%d", &t.modeloAviao);
printf("informe a empresa area");
scanf("%d", &t.empresaAerea);
printf("informe a hora de saida");
scanf("%d", &t.horarioSaida);
cadastrarTaxiamento(t, &f); //insere o voo cadastrado na fila de decolagem
} else
if (opV==2){
autorizaTaxiamento (&f, t); //retira o voo da lista e imprime na tela para o cliente
ver a //sequencia de decolagens
UNIVERSIDADE ANHANGUERA
15
#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)
{
printf("\n");
printf("[1] Cadastrar Bagagem \n");
printf("[2] Recuperar Bagagem \n");
printf("[3] Sair \n");
scanf("%d", &opcao);
UNIVERSIDADE ANHANGUERA
16
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;
}
else
{
//atribuindo o apontamento do primeiro registro para o ultimo da pilha
novo->prox = inicio;
//apontando o novo registro para o primeiro da pilha
UNIVERSIDADE ANHANGUERA
17
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
18
UNIVERSIDADE ANHANGUERA
19
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
20
if (p.topo == MAXNOS)
puts (" Overflow na Pilha");
else
{
p.topo++;
p.vetor[p.topo] = indice;
}
}//push
int pop()
{
int indice = -1;
if (p.topo == -1)
puts ("Underflow na Pilha");
else
{
indice = p.vetor[p.topo];
p.topo--;
}
return (indice);
}//pop
int pilhaVazia()
{
int vazio = 1;
if (p.topo > -1)
vazio = 0;
return vazio;
}
UNIVERSIDADE ANHANGUERA
21
{
if (f.quantos == MAXNOS)
puts ("Overflow na Fila");
else
{
if (f.fim == (MAXNOS-1))
f.fim = 0;
else
f.fim++;
f.vetor[f.fim] = indice;
f.quantos++;
}
}
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
22
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
23
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
24